JSP

JSP

学习总结

Posted by 溜大虾 on April 10, 2018

概述


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"%>