一、JSP 入门
JAVAEE 13 种计算规范之一,JSP (Java Server Page) 是一种模板技术。
JSP有如下特点:
- 和 SERVLET 技术一样,都是 SUN 公司定义的一种用于开发动态web资源的技术
- JSP 内容可以写 HTML 代码, HTML 文件资源是属于静态资源数据,而jsp允许在页面中嵌套 JAVA 代码,为用户提供动态数据
- JSP = HTML + JAVA
- JSP 就是 SERVLET
1.请求 JSP 执行流程
图片.png2.JSP 生命周期方法
- 默认情况下 JSP 会在第一次请求的时候才会做翻译(JAVA 源代码)和编译(CLASS 字节码),如果再次请求 JSP ,不会重新翻译 和 编译,但是 JSP 内容发生改变,服务器就会重新翻译和编译。
- 生命周期方法:
1.void _jspService(HttpServletRequest request, HttpServletResponse response) : 该方法类似 Servlet 中的 Service方法
2.void jspInit() :该方法类似 Servlet 中的 init 方法
3.void jspDestroy() : 该方法类似 Servlet 中的 desctory 方法
3.JSP 基本语法入门
3.1 JSP 模板元素
指的就是 JSP 中的 HTML 代码,模板元素 用于 页面的排版。
3.2 JSP 中的脚本表达式
- 语法
<%= 表达式 %> - 作用
向页面输出数据 - 注意: JSP 脚本表达式中的结果会使用到 JSP 中的 out 对象的 writer方法来进行输出,所有方法里面不能带分号,换句好说,脚本表达式中的内容会直接拷贝到 writer 方法中。
错误的例子: <%= 1 + 1 ;%> ----翻译成--- out.writer(1 + 1 ;);
3.3 JSP 中的脚本片段
- 语法
<% JAVA 代码(片段) %> - 作用
编写 Java 逻辑代码片段 - 注意
不能再 JSP 脚本片段中 嵌套 JSP 表示式等。
JSP 脚本片段内容 会直接拷贝到_jspService 方法中
3.4 JSP 中的申明
- 语法
<%! 定义可能是 成员变量或者成员方法%> - 作用
定义成员变量和成员方法 - 注意
一般不使用
3.5 JSP 中的注释
- 语法
<%-- 注释内容 --%>
注意: 如果使用JSP 的注释,注释内容不会进行翻译。必须使用JSP 注释
4. JSP 中的三大指令
-
语法
<%@ %> -
作用
指令就是告诉服务器如何来翻译 JSP 生成 JAVA 源代码 -
指令分类
<%@ page %> ----- page 指令
<%@ include%> ----- include 指令
<%@ taglib%> ----- taglib指令 -
注意:一个 JSP 必须带上一个 PAGE 指令,每个指令都有相应的属性,通过属性的配置,达到一个 翻译的 效果
4.1 PAGE 指令:
autoFlush 属性 : 设置 JSP 中的 out 对象,out 流对象中缓存满了是否自动刷出。 不要去设置
buffer 属性 : 设置 JSP 中的 out 对象,缓存大小。不能设置 0 ,默认的大小为8KB。不要去设置
contentType 属性:设置response 输出属性的类型以及码表
import 属性:导包
isELIgnored 属性:设置 JSP 是否支持 EL 表达式,默认的值为false表示支持,不要去设置。
session 属性 : 设置 JSP 是否可以使用 HttpSession 对象,默认是支持的。
pageEncoding 属性:有两个特点,一个特点具有contentType 属性设置charset 的值,还有一个特点可以翻译过程中使用什么码表来保存 翻译后的源代码文件
isErrorPage 属性 :默认的值是false,如果设置成true,表示当前的 JSP是一个处理异常的JSP ,开启了 Throwable 类型的异常对象。(局部异常处理方式)
异常全局处理方式:
<!-- 全局配置 异常处理类 -->
<error-page>
<exception-type>java.lang.ArithmeticException</exception-type>
<location>/temple.jsp</location>
</error-page> -->
<error-page>
<error-code>500</error-code>
<location>/temple.jsp</location>
</error-page>
errorPage 属性:设置异常处理的JSP
4.2 include 指令 (静态包含,在翻译的时候完成包含内容的工作)
该指令只有一个属性 file:用于指定当前JSP 引入的JSP 片段
在JSP 一个动作标签:<jsp:include>可以是实现内容的包含,只不过这种包含方式属性动态包含。
建议:能用静不用动,效率高
4.3 taglib 指令
该指令,用于引入第三方的标签库
日后再说
5.JSP 中的九大内置对象(面试题,请你说出常用的至少5个)
九大内置对象,不需要手工创建,自动的准备好九个对象。直接使用
对象的引用名称 | 对象的实际类型 | 说明 |
---|---|---|
request | HttpServletRequest | Servlet讲过,不啰嗦了 |
response | HttpServletResponse | Servlet讲过,不啰嗦了 |
session | HttpSession | Servlet讲过,不啰嗦了 |
application | ServletContext | Servlet讲过,不啰嗦了 |
exception | Throwable | JavaSe讲过,不啰嗦了 |
config | ServletConfig | Servlet讲过,不啰嗦了 |
out | javax.servlet.jsp.JspWriter | 该对象跟response 对象获取的 writer 对象作用一样,但是不是一个类型的对象,response获得的对象是PrintWriter类型。out 对象类型是带有8kb缓存的流对象,out 对象保存的数据要响应到页面上,它要先把数据刷到resonse 对象中的writer中,作出响应动作还是response |
page | this | JSP 翻译后的类对象实例 Object |
pageContext | javax.servlet.jsp.PageContext | 大家一定记住这个对象,该对象可以获得其他8个对象 |
PageContext对象总结 :
- findAttribute(String key):该方法会从 page 、 request 、 session 、 application域从小到大来检索是否 有对应key 的值,有就返回。
- setAttribute(String key,Object value):把数据保存到 page域
- setAttribute(String key,Object value,指定域):把数据保存到指定域
中 (PageContext.REQUEST_SCOPE、PageContext.SESSION_SCOPE、
PageContext.APPLICATION_SCOE、
PageContext.PAGE_SCOE、) - getAttribute(String key):默认从page 域中取数据。
- getAttribute(String key,指定域):指定域中取数据 (PageContext.REQUEST_SCOPE、PageContext.SESSION_SCOPE、
PageContext.APPLICATION_SCOE、
PageContext.PAGE_SCOE、) - 使用该对象可以拿到其他8个内置对象