当前位置:网站首页>半小时理解JSP
半小时理解JSP
2022-04-22 11:03:00 【淮也】
目录
JSP概述
JSP是java程序,是JavaServer Pages的缩写。(基于Java语言实现的服务器端的页面)
JSP是一套规范。所有的web容器/web服务器都是遵循这套规范的,每一个web容器/web服务器都会内置一个JSP翻译引擎。
对JSP进行错误调试的时候,要直接打开JSP文件对应的java文件,检查java代码。
JSP如果看不懂,建议把jsp翻译成java代码,就能看懂了。
JSP本质
JSP本质就是一个Servlet
index.jsp访问的时候,会自动翻译生成index_jsp.java,会自动编译生成index_jsp.class,那么index_jsp 就是一个类。
index_jsp 类继承 HttpJspBase,而HttpJspBase类继承的是HttpServlet。所以index_jsp类就是一个Servlet类。
- jsp的生命周期和Servlet的生命周期完全相同。
- jsp和servlet一样,都是单例的。(假单例)
JSP和Servlet的区别
职责不同
- Servlet:收集数据(逻辑处理,业务处理,然后连接数据库,获取/收集数据)
- JSP:展示数据
JSP的基础语法
1.在jsp文件中直接编写文字,会自动被翻译到哪里?
翻译到servlet类的service方法的out.write("翻译到这里"),直接翻译到双引号里,被java程序当做普通字符串打印输出到浏览器。
在JSP中编写的HTML,CSS,JS代码,这些代码对于JSP来说只是一个普通的字符串。但是JSP把这个普通的字符串一旦输出到浏览器,浏览器就会对HTML,CSS,JS进行解释执行,从而展现一个效果。
2.page指令
(1)响应时的中文乱码问题:
通过contentType属性用来设置响应的内容类型,在内容类型的最后面添加:charset=UTF-8
<%@page contentType="text/html;charset=UTF-8"%>
表示响应的内容类型是text/html,采用的字符集UTF-8
(2)导包
<%@page import="java.util.List,java.util.ArrayList"%>
3.在JSP中编写Java程序:
(1)<% java语句; %>
- 在这个符号当中编写的被视为java程序,被翻译到Servlet类的service方法内部。
- 在<% %>这个符号里写java代码的时候,你要时时刻刻的记住你正在“方法体”当中写代码,方法体中可以写什么,不可以写什么?
- service方法当中不能写静态代码块,不能写方法,不能定义成员变量
- 方法体当中的代码要遵循自上而下的顺序依次逐行执行。
- 在同一个JSP当中 <%%> 这个符号可以出现多个。
(2)<%! %>
- 在这个符号当中编写的java程序会自动翻译到service方法之外。
- 不建议使用,因为在service方法外面写静态变量和实例变量,都会存在线程安全问题。servlet是单例的,多线程并发的环境下,这个静态变量和实例变量一旦有修改操作,必然会存在线程安全问题。
4.JSP的输出语句
(1)向浏览器上输出一个java变量
<%
String name = “Tom”;
out.write("name = " + name);
%>
out是JSP的九大内置对象之一。可以直接在service方法内部使用
(2)如果向浏览器上输出的内容中没有java代码,例如输出一个固定的字符串,可以直接在jsp中编写,不需要写到<%%> 这里。
(3)如果输出的内容中含有java代码
<%= %>
- 在=的后面编写要输出的内容。
- 会翻译到service方法当中,成了这个java代码:out.print();
5.JSP的注释
(1)<%--JSP的专业注释,不会被翻译到java源代码当中。--%>
(2)<!--属于HTML的注释,注释信息仍然会被翻译到java源代码当中,不建议。-->
题外话
(1)为什么jsp文件第一次访问的时候比较慢?
大部分的运维人员在给客户演示项目的时候,会提前先把所有的jsp文件先访问一遍。
第一次:
- 要把jsp文件翻译生成java源文件
- java源文件要编译生成class字节码文件
- 然后通过class去创建servlet对象
- 然后调用servlet对象的init方法
- 最后调用servlet对象的service方法。
第二次就比较快了
直接调用单例servlet对象的service方法即可。
(2)JSP的扩展名必须是xxx.jsp吗?
jsp文件的扩展名是可以配置的。不是固定的。
在CATALINA_HOME/conf/web.xml,在这个文件当中配置jsp文件的扩展名。
<servlet-mapping>
<servlet-name>jsp</servlet-name>
<url-pattern>*.jsp</url-pattern>
<url-pattern>*.jspx</url-pattern>
</servlet-mapping>
xxx.jsp文件对于Tomcat来说,只是一个普通的文本文件,web容器会将xxx.jsp文件最终生成java程序,最终调用的是java对象相关的方法,真正执行的时候,和jsp文件就没有关系了。
版权声明
本文为[淮也]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_51165184/article/details/124330722
边栏推荐
- Originally, this is the correct posture for developers to open world book day!
- Slope optimization DP
- How can Futures Network account opening be reliable? Fund security!
- 七大设计原则总结
- 084使用CVE-2017-7494漏洞实现Samba远程代码执行
- Batch update software and security optimization (taking openssh as an example) -- the road of building a dream
- 点击tab栏如何让tab置顶
- Article 84: the most important thing for investment is the safety framework: at the end of the pig cycle, animal husbandry has become the only definite plate in the two cities (framework thinking)
- [data mining] use Excel to mine the equity relationship and count the distribution and trend of different types of kinship in listed companies according to the year [visual presentation]
- 【leetcode】94.二叉树的中序遍历
猜你喜欢

110T oracle故障恢复

What is tooljet—— Evaluation of low code development platform

使用 Bitnami PostgreSQL Docker 镜像快速设置流复制集群

机器学习基础知识

vulnhub The Planets: Earth
![错误:PermissionError: [WinError 32] 另一个程序正在使用此文件,进程无法访问。“+文件路径“的解决方案](/img/eb/9031f00e41666941219974ea2e2274.png)
错误:PermissionError: [WinError 32] 另一个程序正在使用此文件,进程无法访问。“+文件路径“的解决方案

Matlab 2009 installation tutorial

女生学软件测试难不难?

360 released the annual report: the operating revenue was about 10.886 billion yuan, and the security business increased by more than 70%

What common problems will you encounter when entering the field of robot UAV?
随机推荐
企业如何计算客户终身价值?
卷积神经网络
After installing yarn correctly, use yarn installation in vscode and report an error
ES6 learning notes 4 numerical representation related to numerical expansion (octal representation) (reprinted, the memo is not my original)
C language example 100 (IV)
Right click menu of cesium map (cesium chapter. 72)
【leetcode】94. Middle order traversal of binary tree
ToolJet 是什么,怎么样? —— 低代码开发平台测评
The wrong statistics of the table causes the optimizer to select the wrong execution plan
塔米狗分享|国有股权转让法律依据及程序是什么?
How does the project solve cross domain problems
12年的测试前辈给学习软件测试的你几点建议
蔡国强烟花NFT首发,白天烟花一样精彩
什么样的项目适合做自动化测试?
110t Oracle fault recovery
As a half salted fish in the workplace, how can we do well in test management
2022软件测试好学吗,大概要学多久?(附学习路线图)
Network security -- attack defense confrontation
CVPR 2022 | 用Transformer学习多假设表示!3D人体姿态估计的新框架!
文章84:投资最重要的事是安全框架:猪周期结束,畜牧成为两市唯一确定板块(框架思维)