JSP 的一点笔记
JSP 总结
-
JSP 和 Servlet 的分工
- JSP
- 作为请求的发起页面,例如显示表单、超链接。
- 作为请求的结束页面,例如显示数据。
- Servlet
- 作为请求中处理的环节。
- JSP
-
JSP 的原理
- 原理
- ** JSP页面第一次被访问时,服务器会把JSP编译成java文件(Servlet类)。**
- ** java文件编译成.class文件。**
- ** 创建改类的对象。 **
- ** 调用service()方法。 **
- ** 下一次请求JSP时,直接调用service()方法。 **
- 在tomcat的work目录下可以找到JSP对应的.java文件。
- 原理
-
JSP 的注释
<%-- ... -->:当JSP编译成java文件时这种注释就已经被忽略。
-
JSP 中的 3 种 Java 脚本
<% ... %>(Scriptlet):Java代码片段,0-n条Java语句。<%= ... %>:Java表达式,用于输出一条表达式或变量(变量也是表达式)的结果。<%! ... %>:声明,用来创建类的成员变量或成员方法。- ** 最好不要用上面三种方式写程序。 **
-
JSP 中的 3 大指令
- page 指令
- 定义页面的特定属性。
<%@ page import="foo.*" seesion="false" %>- 属性(13 个属性,4个重要)
- import 属性:增加的 import 语句,多个用逗号隔开。
- isThreadSafe 属性 : 是否实现 SingleThreadModel。
- 属性值
- true:默认,不实现 SingleThreadModel。
- false:实现 SingleThreadModel,最好不要这么做。
- 属性值
- contentType 属性:定义 JSP 相应的 MIME 内容(和可先的的字符编码)。 ???
- isELIgnored 属性:是否忽略 EL 表达式(两种办法中的一种)。
- isErrorPage 属性:是否是另一个 JSP 的错误页面。
- 属性值
- false:默认,不能使用隐式exception对象。
- true:能访问隐式exception对象。
- 属性值
- errorPage 属性:URL,如果有未捕获的Throwable。如果这个属性指定一个 JSP,该 JSP 的 page 指令中有
isErrorPage="true"属性。
- include 指令
- <%@ include file="wickedHeader.html" %>
- 将文件内容添加到当前位置。
- taglib 指令
<%@ taglib tagdir="/WEB-INF/tags/cool" prefix="cool" %>
- page 指令
-
JSP 中的 9 个内置对象(隐式对象)
- out 对象
- JspWriter 类型.
- JspWriter 不在PrintWriter类层次体系中,但是它的大多数打印方法都与PrintWriter相同,只是增加了一些缓冲功能。
- page 对象
- Object 类型。
- 在Java代码中直接指向jsp文件对应的类。
- pageContext 对象 (页面,Servlet 中不存在)
- PageContext 类型。
- 封装了其他隐式对象。
- 函数
- setAttribute(String, Object) 和 getAttribute(String):设置和获得一个页面作用域的属性
- setAttribute(String, Object, int) 和 getAttribute(String, int):设置和获得一个其他作用域的属性(会话、应用、请求)
- findAttribute(String):依次从页面、请求、会话、应用作用域中查找属性。
- request 对象 (请求)
- HttpServletRequest 类型。
- response 对象
- HttpServletResponse 类型。
- seesion 对象 (会话)
- HttpSeesion 类型。
- application 对象 (应用)
- ServletContext 类型。
exception 对象- Throwable 类型。
- 只用特定的“错误页面”才能用这个隐式对象。
- config 对象
- ServletConfig 类型。
- out 对象
-
JSP 中的动作标签
- forward
- include
- param
- useBean
<jsp:useBean id="person" class="foo.Person" scope="request" />- 属性
- id:声明 bean 对象的标识符,来源:
request.setAttribute("peron", p)。 - class:bean 对象的类型(完全限制名)。
- scope:bean 对象的属性作用域。不指定默认为 “page”。
- id:声明 bean 对象的标识符,来源:
- 如果找不到对象会自动创建一个。
- 建立多态的 bean 引用
<jsp:useBean id="person" type="foo.Person" class="foo.Employee" scope="page" />- type 可以是 class 类型、抽象类或接口,class 必须是 type 的一个子类或具体实现。
- 使用 type,但没有 class
<jsp:useBean id="person" type="foo.Person" scope="page" />- 如果 page 作用域已经存在 person 属性,能正常工作。
- 如果 page 作用域不存在 person 属性,不能工作。
- setProperty
<jsp:setProperty name="person" property="name" value="Fred" />- setProperty 标签可以放在 useBean 标签体中。
<jsp:useBean id="person" class="foo.Person" scope="page" > <jsp:setProperty name="person" property="name" value="Fred" /> </jsp:useBean>
- getProperty
<jsp:getProperty name="person" property="name" />- 属性
- name:标识具体的 bean 对象,与
<jsp:useBean>标记的“id”匹配。 - property:标识属性中的属性名。(Person 类中有 name 属性)。
- name:标识具体的 bean 对象,与
-
初始化 JSP
- 为 JSP 配置初始化参数
- 代码
<web-app ...> <servlet> <servlet-name>MyTestInit</servlet-name> <jsp-file>/TestInit.jsp</jsp-file> <init-param> <param-name>email</param-name> <param-value>abe@abc.com</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>MyTestInit</servlet-name> <url-pattern>/TestInit.jsp</url-pattern> </servlet-mapping> </web-app>
- 代码
- 覆盖 jspInit() 方法
- 代码
<%! public void jspInit() { ServletConfig config = getServletConfig(); String emailAddress = config.setInitParameter("email"); ServletContext servletContext = getServletContext(); servletContext.setAttribute("mail", emailAddress); } %>
- 代码
- 为 JSP 配置初始化参数
浙公网安备 33010602011771号