C.1 JSP概述
当一个JSP页面第一次被请求时,容器会生成一个java类。该类实现JspPage或其子接口HttpJspPage。而JspPage是javax.servlet.Servlet的子接口。所以每一个JSP页面实现类都是一个servlet。
C.2 注释
<%-- --%> JSP注释
<!-- --> HTML注释
C.3 内置对象
这些对象不用实例化,直接就可以使用。
request -- javax.servlet.http.HttpServletRequest
response -- HttpServletResponse
out -- javax.servlet.jsp.JspWriter (功能上和Response.get)
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
一些方法:
//获取request中header名字集合,可用Enumeration<String>接收
request.getHeaderNames()
//获取header参数的具体值
request.getHeader(String header)
response.getBufferSize()
session.getId()
config.getServletName()
application.getServletInfo()
C.4 指令
指令知识JSP转换器如何翻译JSP页面为Servlet,其中最重要的是page和include指令。
C.4.1 page指令
语法格式:
<%@ page attribute1="value1" attribute2="value2" ...%>
page属性列表:
- import 导入java类
- session 是否加入会话管理
- buffer 定义out的缓冲大小
- autoFlush 为True表示缓冲区满时自动写入输出流
- isThreadSafe 线程安全级别,不推荐使用
- info
- errorPage 定义错误处理页面
- isErrorPage 标识本页是一个错误处理页面
- language 值为java
C.4.2 include指令
<%@ include file="url"%>
JSP转换器处理include指令时,将指令替换为指令所包含文件的内容。
.jspf文件、html文件等常被include
C.5脚本元素
一个脚本程序是以<%开始以%>结束的java代码块。
定义在一个脚本的变量,可以在后续的脚本程序中使用。
C.5.1 表达式
以<%=开始,以%>结束。会被jsp容器执行。实际上会用out对象打印出结果。
如:
Today is <%=java.util.Calendar.getInstance().getTime()%>
无需分号结尾.
C.5.2 声明
声明在JSP页面中使用的方法和变量。以<%!开始,并以%>结束。
(声明方法是包括方法体的)
可以通过声明来重写类的(JSP页面生成的servlet类)init和destroy方法。
<%!
public void jspInit(){
System.out.println("index.jsp jspInit...");
}
public void jspDestroy(){
System.out.println("index.jsp jspDestroy...");
}
%>
C.5.3 禁用脚本元素
“随着JSP 2.0对表达式语言的加强,推荐的实践是:在JSP页面中用EL访问服务器端对象且不写JAVA代码。”(?)
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<scripting-invalid>true</scripting-invalid >
</jsp-property-group>
C.6 动作
useBean\setProperty\getProperty
<jsp:useBean id="employee" class="entity.Employee"></jsp:useBean>
<jsp:setProperty property="firstName" name="employee" value="chen"/>
first name:<jsp:getProperty property="firstName" name="employee"/>
include动作与include指令的区别:
对于include指令,资源引入发生在页面转换时,即当JSP容器转换页面生成Servlet时。
而include动作,资源引入发生在请求页面时,故可以传递参数。
还有其他……未完善
forward动作
转向其他资源:
<jsp:forward page="useBeanTest.jsp">
<jsp:param name="" value=""/>
</jsp:forward>
C.7 错误处理
可将一个JSP页面定义为错误处理页面,只需设置<%@page isErrorPage="true"%>
设置一个页面的错误处理页面:<%@page errorPage="errorHandler.jsp"%>
这样当该jsp页面抛出异常时,便会跳转到错误页面处理,当网页url不变,输出为页面处理程序的输出,
不再会输出难以理解的信息。
C.8 小结
JSP隐身对象: (九大对象)
- out
- session
- request
- response
- exception
- application
- page
- config
- pageContext
3大语法元素:
- 指令:
<%@page attribute="value"%>
<%@ include file="url"%> - 脚本元素
<% %>脚本
<%= %>表达式
<%! %>声明 - 动作
//bean
<jsp:useBean name="" class=""></jsp:useBean>
<jsp:setProperty name="" property="" vlaue=""/>
<jsp:getProperty name="" property=""/>
//include动作:
<jsp:include page="">
<jsp:param name="" value=""/>
</jsp:include>
forward动作:
<jsp:forward page="">
<jsp:param name="" value="">
</jsp.forward>
其他:
-
新增加JSP页面后,并不需要重启Tomcat服务器。
-
解决JSP页面中文乱码问题:
<%@page contentType="text/html;charset=utf-8"%>
-
Servlet的缺点:
- html是由以字符串形式输出的。这使得处理response响应非常繁琐。
- 页面形式的一点变化都要重新编译
备注
第一次用MarkDown写文章,确实强大,排版很方便、很美观。棒棒哒!
网友评论