01-JSP原理和指令
1. JSP概念
JSP,java server page
,本质就是一个 servlet,可以使用 jsp 代替 servlet 来处理请求,显示数据。
即 jsp 可以理解为在 html 页面中写 java 代码,或 一个可以获取 java 数据的 html 文件。
JSP 为什么本质是一个 Servlet?
testjsp.jsp 继承自 testjsp.java/testjsp.class 继承自 HttpJspPage 继承自 JspPage 继承自 Servlet。
Tomcat 镜像中将 jsp 文件转义为了 java 文件和编译后的 class 字节码文件:
C:\Users\Administrator.IntelliJIdea2019.3\system\tomcat\ Tomcat_8_5_53_demo61
\work\Catalina\localhost\ demo
\org\apache\jsp\ demo.java
查看生成java文件的文件头注释:
1 |
|
2. JSP原理
① 当在浏览器上输入 http://localhost:8080/demo/index.jsp
② 服务器 tomcat 得到请示,会通过 JspServlet 将后缀名是 .jsp 的请求处理
③ 会将 index.jsp 翻译成 index_jsp.java 文件
④ 再将 index_jsp.java 文件编译成 index_jsp.class 文件
⑤ jvm 将 .class 加载运行
⑥ 服务器生成响应,响应信息中就包含了 jsp 页面上的 html 代码
3. JSP脚本和注释
脚本:可以在页面上写java代码
分类:
● 声明脚本:<%! Java代码 %>
在jsp对应的java类中生成一个成员变量
● 片段脚本:<% Java代码 %>
在jsp对应的java类的_jspService方法中,生成一个局部变量
● 输出脚本:<%= Java代码 %>
向浏览器输出内容,相当于 response.getWriter().write(Java代码)
在 jsp 对应的 java 类的 out.prinln() 中
注释:jsp 文件中可以有 jsp + html + java 代码,即 可以使用上述三种语言的注释标签。
● jsp注释:<%-- 注释 --%>
jsp注释不会生成到 jsp 对应的 java 文件中
● html注释:<!-- 注释 -->
● java注释:/* 注释1 */
和 // 注释2
html、java 注释均会生成到 jsp 对应的 java 文件中
4. JSP三大指令
JSP指令,用于指示 jsp 执行某些操作或特性行为/效果。
语法:
1 |
|
page
指令
设置jsp页面的基本属性。- contentType=”…” 相当于 response.setContentType(“…”) 设置编解码方式
- language=”java” jsp脚本上可以使用的语言,
一般不用
,默认java - import=”java.util.List” 页面上导入java包,多个包使用逗号分隔(IDEA可以导入包,默认导入jsp页面顶部-为单独的page指令导包)
- isELgnored=”false” 是否忽略el表达式,默认false是不忽略
- errorPage=”error.jsp” 用于指定错误页面,当前页面发生错误后,会跳转到指定的错误页面
- isErrorPage=”true” 为 true 时可以在当前页面直接使用 jsp 内置对象 exception,即 <%= exception.toString() %> 或 ${exception} 页面输出错误信息
- extends=”org.apache.jasper.runtime.HttpJspBase” 默认继承自HttpJspBase类,
不动
!
1 |
|
taglib
指令
在当前jsp页面导入 jstl 标签库(JSP标准标签库是由JCP所制定的标准规范)。
依赖库:jstl.jar & standard.jar
1 |
|
uri属性确定标签库的位置,prefix属性指定标签库的前缀。
include
指令
嵌套其他jsp文件的jsp代码(其他jsp代码可以只是所需部分)。
第一种 include指令:通过file属性来指定被包含的页面
,当JSP转换成Servlet时引入指定文件,一般不需要写头
。
编译阶段执行。
1 |
|
第二种 jsp:include 动作元素:通过page属性来指定被包含的页面
,当JSP页面被请求时引入指定文件,需要写头
可以用 jsp:param 来向所包含页传递参数。
请求处理阶段执行。
1 |
|