一、jsp简介
JSP(全称Java Server Pages)是由 Sun Microsystems 公司倡导和许多公司参与共同创建的一种使软件开发者可以响应客户端请求,而动态生成 HTML、XML 或其他格式文档的Web网页的技术标准。
JSP 技术是以 Java 语言作为脚本语言的,JSP 网页为整个服务器端的 Java 库单元提供了一个接口来服务于HTTP的应用程序。
二、JSP 生命周期
理解JSP底层功能的关键就是去理解它们所遵守的生命周期。
JSP生命周期就是从创建到销毁的整个过程,类似于servlet生命周期,区别在于JSP生命周期还包括将JSP文件编译成servlet。
以下是JSP生命周期中所走过的几个阶段:
编译阶段:加载与JSP对应的servlet类,创建其实例,并调用它的初始化方法
初始化阶段:调用与JSP对应的servlet实例的服务方法
执行阶段:调用与JSP对应的servlet实例的销毁方法,然后销毁servlet实例
销毁阶段:servlet容器编译servlet源文件,生成servlet类
三、jsp语法
(1)脚本程序语法
<% %>
或
<jsp:scriptlet>
</jsp:scriptlet>
(2)声明语法
<%! %>
(3)表达式语法
<%= %>
(4)注释语法
<%-- --%>
四、指令
(1)page
A、属性
buffer 指定out对象使用缓冲区的大小
autoFlush 控制out对象的 缓存区
contentType 指定当前JSP页面的MIME类型和字符编码
errorPage 指定当JSP页面发生异常时需要转向的错误处理页面
isErrorPage 指定当前页面是否可以作为另一个JSP页面的错误处理页面
extends 指定servlet从哪一个类继承
import 导入要使用的Java类
info 定义JSP页面的描述信息
isThreadSafe 指定对JSP页面的访问是否为线程安全
language 定义JSP页面所用的脚本语言,默认是Java
session 指定JSP页面是否使用session
isELIgnored 指定是否执行EL表达式
isScriptingEnabled 确定脚本元素能否被使用
B、Page指令的语法格式:
<%@ page attribute="value" %>
等价的XML格式:
<jsp:directive.page attribute="value" />
(2)include
<%@ include file="文件相对 url 地址" %>
include 指令中的文件名实际上是一个相对的 URL 地址。如果您没有给文件关联一个路径,JSP编译器默认在当前路径下寻找。
等价的XML语法:
<jsp:directive.include file="文件相对 url 地址" />
(3)taglib
JSP API允许用户自定义标签,一个自定义标签库就是自定义标签的集合。
Taglib指令引入一个自定义标签集合的定义,包括库路径、自定义标签。
Taglib指令的语法:
<%@ taglib uri="uri" prefix="prefixOfTag" %>
uri属性确定标签库的位置,prefix属性指定标签库的前缀。
等价的XML语法:
<jsp:directive.taglib uri="uri" prefix="prefixOfTag" />
五、动作元素
jsp:include 在页面被请求的时候引入一个文件。
jsp:useBean 寻找或者实例化一个JavaBean。
jsp:setProperty 设置JavaBean的属性。
jsp:getProperty 输出某个JavaBean的属性。
jsp:forward 把请求转到一个新的页面。
jsp:plugin 根据浏览器类型为Java插件生成OBJECT或EMBED标记。
jsp:element 定义动态XML元素
jsp:attribute 设置动态定义的XML元素属性。
jsp:body 设置动态定义的XML元素内容。
jsp:text 在JSP页面和文档中使用写入文本的模板
六、九大隐式对象
request HttpServletRequest类的实例
response HttpServletResponse类的实例
out JspWriter类的实例,用于把结果输出至网页上
session HttpSession类的实例
application ServletContext类的实例,与应用上下文有关
config ServletConfig类的实例
pageContext PageContext类的实例,提供对JSP页面所有对象以及命名空间的访问
page 类似于Java类中的this关键字
Exception Exception类的对象,代表发生错误的JSP页面中对应的异常对象
七、 标准标签库(JSTL)
(1)根据JSTL标签所提供的功能,可以将其分为5个类别
核心标签
格式化标签
SQL 标签
XML 标签
JSTL 函数
(2)配置jstl
a.web.xml声明
<jsp-config> <taglib> <taglib-uri>http://java.sun.com/jstl/xxx</taglib-uri> <taglib-location>/WEB-INF/xxx.tld</taglib-location> </taglib> </jsp-config>b.jsp页面引用
<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xxx" %>
八、表达式语言
(1)el表达式语法
${expr}
(2)el表达式配置
在jsp页面声明是否启用el表达式
<%@ page isELIgnored ="true|false" %>
(3)el表达式操作符
. 访问一个Bean属性或者一个映射条目
[] 访问一个数组或者链表的元素
( ) 组织一个子表达式以改变优先级
+ 加
- 减或负
* 乘
/ or div 除
% or mod 取模
== or eq 测试是否相等
!= or ne 测试是否不等
< or lt 测试是否小于
> or gt 测试是否大于
<= or le 测试是否小于等于
>= or ge 测试是否大于等于
&& or and 测试逻辑与
|| or or 测试逻辑或
! or not 测试取反
empty 测试是否空值
(4)EL的函数
EL函数语法
${ns:func(param1, param2, ...)}
ns指的是命名空间(namespace),func指的是函数的名称,param1指的是第一个参数,param2指的是第二个参数,以此类推。
要使用任何标签库中的函数,您需要将这些库安装在服务器中,然后使用<taglib>标签在JSP文件中包含这些库。
(5)EL隐含对象
pageScope page 作用域
requestScope request 作用域
sessionScope session 作用域
applicationScope application 作用域
param Request 对象的参数,字符串
paramValues Request对象的参数,字符串集合
header HTTP 信息头,字符串
headerValues HTTP 信息头,字符串集合
initParam 上下文初始化参数
cookie Cookie值
pageContext 当前页面的pageContext
九、 异常处理
(1)Exception对象
exception对象是Throwable子类的一个实例,只在错误页面中可用。下表列出了Throwable类中一些重要的方法:
- public String getMessage() 返回异常的信息。这个信息在Throwable构造函数中被初始化
- public ThrowablegetCause() 返回引起异常的原因,类型为Throwable对象
- public String toString() 返回类名
- public void printStackTrace() 将异常栈轨迹输出至System.err
- public StackTraceElement [] getStackTrace() 以栈轨迹元素数组的形式返回异常栈轨迹
- public ThrowablefillInStackTrace() 使用当前栈轨迹填充Throwable对象
(2)jsp页面声明异常页
<%@ page isErrorPage="true" %>
(3)jsp页面设置异常页
<%@ page errorPage="ShowError.jsp" %>