web.xml
web.xml负责配置,管理常用内容如下:(P61)
(1)配置和管理JAAS授权认证。(2)配置和管理资源引用。(3)Web应用首页。
web.xml文件的根元素是<web-app.../>
web.xml配置首页使用welcome-file-list元素,该元素能包含多个welcome-file子元素,每个子元素都能配置一个首页。例:
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
上述指当某页面不存在时该web应用首页依次是index.html ,index.htm,index.jsp。
JSP
jsp本质就是servlet,当用户向指定Servlet发送请求时,Servlet利用输出流动态生成HTML页面,包括每一个静态的HTML标签和所有在HTML页面中出现的内容。
JSP页面内容有两部分组成:
静态部分:标准的HTML标签·静态的页面内容这些内容与静态HTML页面相同。
动态部分:受Java程序控制的内容,这些内容由Java脚本动态生成。例如<%....%>之间就是Java脚本。
Servlet类的三个方法:
init():初始化JSP/Servlet的方法;
destory():销毁JSP/Servlet之前的方法;
service():对用户请求生成响应的方法。
JSP页面工作原理:(P64)
根据上面的 JSP 面工作原理图,可以得到如下4个结论:
(1)JSP 文件必须在 JSP 务器内运行.
(2)JSP 文件必须生成 Servlet 才能执行.
(3)每个 JSP 页面的第一个访问者速度会有点慢,因为必须等待 JSP 编译成 Servlet。
(4)JSP 页面的访问者无须安装任何客户端,甚至不需要可以运行 Java 的运行环境,因为 JSP 页面输送到客户端的是标准 HTML页面。
JSP的四种基本用法
JSP注释
<%-- .... --%> :JSP注释是无法通过源代码查看的,表面JSP注释不会发送到客户端。
JSP声明
<%! ....%> :JSP声明将会转换成对应Servlet的成员变量或成员方法;声明的变量不能使用abstract修饰;声明的变量会被所以客户端共享,因为JSP页面会编译一个Servlet类,每个Servlet在容器中只有一个实例;
输出JSP表达式
<%= ....%> :可替换out.println输出语句。
JSP脚本
<%...%>:JSP脚本内不能定义方法,且部分声明的变量为局部变量,不能被private和public和static修饰。
JSP的三个编译指令
page指令
一个jsp页面可以有多个page指令,下面为page指令各属性的意义:(P71)
language :声明当前 JSP 页面使用的脚本语言的种类,因为页面是 JSP 页面,该属性的值通常都 java ,该属性的默认值也是 java ,所以通常无须设置。
extends :指定 JSP 页面编译所产生的 Java 类所继承的父类,或所实现的接口。
import :用来导入包 。下面几个包是默认自动导入的,不需要显式导入。默认导入的包有: java.lang. *, javax.servlet. javax.servlet.jsp. javax.servlet.http.
session :设定这个 JSP 页面是否需要 HTTP Session。
buffer :指定输出缓冲区的大小。输出缓冲区的 JSP 内部对象: out 用于缓存 JSP 页面对客户浏 览器的输出,默认值为 阻,可以设置为 none ,也可以设置为其他的值,单位为 KB。
autoFlush :当输出缓冲区即将溢出时,是否需要强制输出缓冲区的内容。设置为 true 时为正常 输出;如果设置为 false ,则会在 buffer 溢出时产生一个异常。
info :设置该 JSP 程序的信息,也可以看做其说明,可以通过 Servlet.getServletlnfo ()方法获取该 如果在 JSP 页面中,可直接调用 getServ letlnfo ()方法获取该值,因为 JSP 页面的实质就是 Servlet。
errorPage :指定错误处理页面。如果本页面产生了异常或者错误,而该 JSP 页面没有对应的处 理代码,则会自动调用该属性所指定的 JSP 页面。
isErrorPage :设置 JSP 页面是否为错误处理程序。如果该页面本身 己是错误处理页面, 则通 常无须指定 errorPage 属性。
contentType :用于设定生成网页的文件格式和编码字符 ,即 t1E 类型和页面字符集类型, 默认的 MTh伍类型是 text/html ;默认的字符集类型为 IS0 -8859-1。
pageEncoding :指定生成网页的编码字符集。
include指令
使用 include 指令,可以将一个外部文件嵌入到当前 JSP 文件中,同时解析这个页面中的 JSP 语句 (如果有的话)。这是个静态的 include 语句,它会把目标页面的其他编译指令也包含进来,但动态 include 则不会。
include 既可以包含静态的文本,也可以包含动态的 JSP 页面。静态的 include 译指令会将被包含的页面加入本页面,融合成一个页面,因此被包含页面甚至不需要是一个完整的页面。
<%@include file="...."%>
taglib
用于定义和访问自定义标签。
JSP七大动作指令
动作指令与编译指令不同,编译指令是通知 Servi et 引擎的处理消息,而动作指令只是运行时的动 编译指令在将 JSP 编译成 Serv et 时起作用;而处理指令通常可替换成 JSP 小脚本,它只是 JSP 脚本的标准化写法。
JSP 动作指令主要有如下:(P75)
jsp :forward :执行页面转向,将请求的处理转发到下一个页面。(P75~P77)
jsp:param:用于传递参数,必须与其他支持参数的标签一起使用。
jsp:include :用于动态包含一个 JSP 页面。(P77~P78)
jsp:plugin :用于下载 JavaBean Applet 客户端执行。(P81~P82)
jsp:useBean :创建 JavaBean 的实例。(P79~P81)
jsp:setProperty :设置 JavaBean 实例的属性值。(P79~P81)
jsp:getProperty :输出 JavaBea 实例的属性值。(P79~P81)
JSP脚本中的9个内置对象(P82)
JSP 脚本中包含9个内置对象,这9个内置对象都是 ServletAPI 接口的实例,只是 JSP 规范对它们 进行了默认初始化(由 JSP 页面对应 Servlet的jspService()方法来创建这些实例) 也就是说,它们己经是对象,可以直接使用9个内置对象依次如下。
application: javax.servlet.ServletContext 的实例,该实例代表 JSP 所属的 Web 应用本身,可用于 JSP 页面,或者在 Serviet 之间交换信息。常用的方法有 getAttribute(String attName)、 setAttribute(String attName, String attValue)和 getlnitParameter(S tring pararnN ame)等。
config: javax.servlet.ServletConfig 的实例,该实例代表该 JSP 的配置信息。事实上,JSP 页面通常无须配置,也就不存在配置信息。因此,该对象更多地在 Servlet 中有效。
exception: java.lang.Throwable 的实例,该实例代表其他页面中的异常和错误。只有当页面是错 误处理页面,即编译指令 page isErrorPage 属性为 true 时,该对象才可以使用。常用的方法有 getMessage()和 printStackTrace()等。
out: javax.servlet.jsp.Jsp Writer 的实例,该实例代表 JSP 页面的输出流,用于输出内容,形成 HTML 页面。
page :代表该页面本身,通常没有太大用处。也就是 Servlet 中的 this ,其类型就是生成的 Servlet 类,能用 page 的地方就可用 this 。
pageContext: javax.servlet.jsp.PageContext 的实例,该对象代表该 JSP 页面上下文,使用该对象 可以访问页面中的共享数据 常用的方法有 getServletContext()和 getServletConfig()。
request: javax servlet.http.HttpServletRequest 的实例,该对象封装了一次请求,客户端的请求参 数都被封装在该对象里。这是一个常用的对象,获取客户端请求参数必须使用该对象。常用的 方法有 getParameter(String paramN ame)、 getParameterValues(String paramN ame)、 setAttribute(String attrName,Object attrValue)、 getAttrib e(String Name)和 setCharacterEncoding(String env)等。
response: javax.servlet.http.HttpServletResponse 的实例,代表服务器对客户端的响应。通常很少 使用该对象直接响应,而是使用 out 对象,除非需要生成非字符响应。而 response 对象常用于 重定向,常用的方法有 getOutputStream()、 sendRedirect(java.lang.String location)等。
session: javax.servlet.http.HttpSession 的实例,该对象代表 次会话 当客户端浏览器与站点建 立连接时,会话开始;当客户端关闭浏览器时,会话结束 常用的方法有: getAttribute(String rName)、 setAt ibute(String attrName, Object attrValue)等。
Servlet
Servlet作为控制层使用,必须继承HttpServlet。
Servlet提供了不同的方法响应客户端请求,但只需重写service()方法即可响应客户端的所有请求。
HttpServlet 还包含两个方法:
init(ServletConfig config):创建Servlet实例时,会先调用该方法初始化 Servlet 资源。
destroy():销毁 Servlet实例时,自动调用该方法的回收资源。
通常无须重写init()和destroy()两个方法,除非需要在初始 Servlet ,完成某些资源初始化的
才考虑重写 init()方法。如果需要在销毁 Servlet之前,先完成某些资源的回收,比如关闭数据库连接等,才需要重写 destroy 方法。
Servlet的配置(P124)
配置Servlet有两种方式:在Servlet类中使用@WebServlet注解进行配置和web.xml文件里面配置,两种方式选其一即可。个人比较习惯用@WebServlet。
JSP/Servlet的生命周期(P125)
load-on-startup Servlet(P126)
创建 Servlet 实例有两个时机:用户请求之时或应用启动之时。应用启动时就创建 Servlet ,通常是用于某些后台服务的Servlet,或者需要拦截很多请求的Servlet:这种 Servlet通常作为应用的基础 Servlet 使用,提供重要的后台服务。
访问Servlet的配置参数(P127)
配置Servlet时,可以增加额外的配置参数。 通过使用配置参数,可以实现提供更好的可移植性,避免将参数以硬编码方式写在程序代码中。
JSP 的自定义标签
开发标签库只需如下几个步骤:
(1)开发自定义标签处理类。
(2)建立一个*.tld 文件,每个*.tld 文件对应一个标签库,每个标签库可包含多个标签。
(3)在JSP 文件中使用自定义标签。
开发自定义标签类(P134)
自定义标签类应该继承一个父类:javax.servlet.jsp.tagext.SimpleTagSuppor,除此之外,JSP 自定义标签类还有如下要求:
(1)如果标签类包含属性,每个属性都有对应的get和set方法。
(2)重写doTag()方法,这个方法负责生成页面内容。
建立TLD文件(P134)
TLD即标签库定义,文件的后缀是 tld ,每个 TLD 文件对应一个标签库,一个标签库中可包含多个标签。 TLD 文件也称为标签库定义文件。
标签库定义文件的根元素是 taglib ,它可以包含 tag 子元素,每 tag 子元素都定义一个标签。
使用标签库
在JSP 页面中确定指定的标签需要两点:
(1)标签库 URI :确定使用哪个标签库。
(2)标签名:确定使用哪个标签。
使用标签库分成以下两个步骤:
(1)导入标签库:使用 taglib 编译指令导入标签库,就是将标签库和指定前缀关联起来。
(2)使用标签:在 JSP 页面中使用自定义标签。
带属性的标签(P136)
带标签体的标签(P139)
以页面片段作为属性的标签(P141)
动态属性的标签(P143)
Filter介绍(P144)
Filter主要用于对用户请求的预处理(也可以对用户的请求做出响应),也可以对HttpServletResponse进行后处理,是个典型的处理链。可以理解成Servlet的加强版。
使用Filter的完整流程是:Filter对用户请求进行预处理,接着将请求交给Servlet进行处理并生成响应,最后Filter再对服务器响应进行后处理。
Filter 有如下几个用处:
①在HttpServletRequest到达 Servlet 之前,拦截客户的HttpServletRequest。
②根据需要检查 HttpServletRequest ,也可以修 ServletRequest 头和数据。
③在 HttpServletResponse 到达客户端之前,拦截 HttpServletResponse。
④根据需要检查 HttpServletResponse ,也可以修改 HttpServletResponse 头和数据。
Filter 有如下几个种类:
①用户授权的 Filter: Filter 负责检查用户请求,根据请求过滤用户非法请求。
②日志 Filter :详细记录某些特殊的用户请求。
③负责解码的 Filter :包括对非标准编码的请求解码。
④能改变 XML 内容的 XSLTFilter 等。
⑤Filter 负责拦截多个请求或响:一个请求或响应也可被多 Filter 拦截。
创建一个Filter只需要两步骤:
①创建 Filter 处理类。
②在 web xml 文件中配置Filter或用注解配置Filter。