概述
JSP页面本质上是一个Servlet。JSP不需要编译。JSP页面是在JSP容器中运行的。Servlet容器一般也是JSP容器。
当客户端请求一个JSP页面的时候,JSP容器会将页面转换成一个JSP页面实现类,这个类实现javax.servlet.JspPage接口的子接口或其子接口
javax.servlet.jsp.HttpjspPage的java类。JspPage是javax.servlet.Servlet的子接口,这样会使每个JSP页面都成为一个Servlet。
如果转换成功,Servlet/JSP容器将会编译Servlet类。之后容器加载和实例化java字节码,并执行它通常对Servlet所做的生命周期操作。
对于同一个JSP页面的后续请求,Servlet/JSP容器会查看这个JSP页面自从最后一次转换以来是否修改过,如果修改过就会重新转换。
修改和添加jsp页面不需要重启tomcat。
JSP常用语法
备注
jsp备注。<%–备注–%>这种形式的备注不会发送到浏览器,也不能进行嵌套。
HTML/XHTML备注。这种形式的备注由浏览器处理。
隐式对象
对象 | 类型 |
---|---|
request | javax.servlet.http.HttpServletRequest |
response | javax.servlet.http.HttpServletResponse |
out | javax.servlet.jsp.JspWriter |
session | javax.servlet.http.HttpSession |
application | javax.servlet.ServletContext |
config | javax.servlet.ServletConfig |
pageContext | javax.servlet.jsp.PageContext |
page | javax.servlet.jsp.HttpJspPage |
exception | java.lang.Throwable |
getAttribute和setAttribute的作用域
-
pageContext,客户端和服务器端跳转均失效。
-
request,客户端跳转失效,服务器端跳转有用。
-
session,客户端和服务器端跳转都有用。关闭浏览器失效。
-
application,客户端和服务器端跳转都有用,关闭浏览器不失效,关闭服务器失效。
指令
page指令。<%@ page attribute1 = “value”,attribute2 = “value”,…….>,attribute为属性。
属性 | 作用 |
---|---|
import | 导入java类型,导入多个用逗号隔开 |
session | 值为true时参与session管理,默认为true |
buffer | 隐式对象out的缓冲区大小,单位强制为KB,默认容量大于或等于8KB,为none时表示不缓存 |
autoFlush | 默认值为true,当缓冲区满了时自动刷新输出。值为false时表示只有调用隐式对象的flush方法才进行刷新,否则缓冲区溢出抛出异常 |
info | 指定所生成的Servlet的getServletInfo方法的返回值 |
errorPage | 表示负责处理该页面产生错误时进行处理的页面 |
isErrorPage | 表示这个页面是否负责处理错误 |
contentType | 指定该页面隐式对象response的内容的类型,默认为text/html |
pageEncoding | 该页面的字符编码,默认值为IOS-8859-1 |
isELIgnored | 指明该页面是否支持EL表达式 |
language | 指定该页面支持的脚本语言,默认为java |
deferredSyntaxAllowedAsLifteral | 指明是否允许使用字符序列#{作为该页面和便一单元的String的字面值,默认为false |
include指令。<%@ include file = “url”%> 静态包含。生成一个java文件。不同jsp页面中变量名不可重复。文件名任意。
脚本元素
-
Scriptlet代码块:<% %>
-
表达式:<%= %>
-
声明: <%! %>这种方式所声明的属性转化为servlet类之后是全局变量。直接在代码块中声明的变量转换为Servlet后是包含在service方法中的局部变量。
动作
-
useBean。创建一个与某个java对象相关的脚本对象。
-
setProperty和getProperty。在java对象中保存属性值和获取属性值。
<jsp:useBean id="对象名" class ="classurl"/>
<jsp:setProperty name="对象名" property="属性" value="值"/>
<jsp:getProperty name="对象名" property="属性"/>
- include。动态包含,生成多个java文件,不同jsp页面中变量名可以重复。和include指令不同的是,动作所包含的文件扩展名必须为jsp。
<jsp:include page="jspurl">
<jsp:parm name ="参数" value="值">
</jsp:include>
- forward。将当前页面跳转到一个不同的资源,浏览器地址栏url不变。跳转立即执行forword后面的代码不执行。
<jsp:forword page="jspurl">
<jsp:param name="参数" value="值">
</jsp:forword>
- 错误处理
<%@page errorPage="error.jsp"%>