JSP/Servlet及相关技术 学习笔记

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。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值