博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
七 Servlet 基础
阅读量:4295 次
发布时间:2019-05-27

本文共 2129 字,大约阅读时间需要 7 分钟。

概述

1997 年 Sun 公司为了将 Applet 技术扩展到 Web 服务器端提出了 Servlet 技术,之后,以此为基础,推出了 Java Server Page(JSP),其具备了 Java Servlet 几乎所有优点。

实际上,JSP 引擎根据 JSP 页面生成的 Java 文件,就是一个 Servlet(基于 Java 技术的 Web 组件)。其与平台无关,会被编译成字节码供容器(也称引擎,是支持 Servlet 功能的 Web 服务的扩展)管理。

Servlet 必须在 Web 应用程序的 web.xml 文件中进行配置,指明其路径,才可以被引擎加载。

在配置时,可以使用 <load-on-startup>AnyTime</load-on-startup> 来表示 Servlet 可以在任何时间被载入。

自定义 Servlet 时,需要实现 Servlet 接口,但是可以直接扩展 javax.servlet.GenericServlet 类,或者扩展 javax.servlet.http.HttpServlet 类来处理和 HTTP 相关的请求。

Servlet 中提供了 RequestDispatcher 接口,来实现多个 Servlet 的协作,该接口中的 forward()include() 方法都可以将请求信息转发到其他 Servlet ,但是前者转发后,原 Servlet 将不再响应,这有点儿类似。

在 web.xml 配置文件中,可以通过 <error-page> 配置报错后的处理资源路径。使用子标签 <location> 指定处理错误的资源文件,可以是一个 JSP 页面,也可以是一个 servlet 服务。而 <error-code><exception-type> 子标签则可以指定在该错误代码或错误类型下使用该资源进行处理。

其实在 Java EE 6 推出 Servlet 3.0 后,并不是所有的 Servlet 都需要在 web.xml 进行配置,可以使用注解功能。但是,如果想要限制注解的使用,只部署 web.xml 中的 Servlet ,则可以将 <web-app> 标签的 metadata-complete 属性置为 true 值。

使用 @WebServlet 将 Servlet 注解为需要处理用户请求的 Servlet ,而使用 @WebInitParam 可以注解初始化参数。

过滤器

在 Web 应用中部署多个过滤器,Web 容器会根据过滤器的声明部署次序将用户的请求依次传递给相应的过滤器进行处理,直到目的资源。当然,具体是否传递给下一个过滤器或者直接传递给目的资源,或转发或拒绝,由当前的过滤器决定。同样的,返回的响应会依照相反的过滤器顺序,回传给用户。

自定义过滤器,需要实现 javax.servlet.Filter 接口。在其 doFilter() 方法中,需要调用 FilterChaindoFilter() 方法(javax.servlet.FilterChain 接口是由容器实现的),在该方法之前,只能修改请求对象,之后,只能修改响应对象。

public void doFilter(ServletRequest request, 						ServletResponse response, 						FilterChain chain) throws IOException, ServletException {	//处理 request	chain.doFilter(request, response);	//处理 response}

同样的,使用 @WebFilter 注解,可以不用在 web.xml 中进行过滤器的配置。其中可以通过 dispatcherTypes 指定使用过滤器的范围,取值范围如下枚举:

public enum DispatcherType {    FORWARD,    INCLUDE,    REQUEST,    ASYNC,    ERROR}

监听器

Servlet 监听器可以对 ServletContext、HttpSession 以及 ServletRequest 对象的状态进行监听,在状态发生变化的前后,Servlet 容器会触发相关事件,而监听器可以处理这些事件。

javax.servlet.* 中定义了 8 个监听器接口,均继承自 java.util.EventListener 接口,可以用来监听请求对象的创建和销毁,请求对象属性的变化,Web 应用启动及终止时,上下文对象的创建及销毁,上下文对象属性的变化,会话的创建和销毁,会话属性的变化,会话对象绑定的变化。

实现相应的接口,当变化发生时,进行相应的处理,但是需要在 web.xml 文件中进行相应的配置。使用 <listener> 标签,并使用 <listener-class> 子标签指定具体实现监听接口的类。当然,也可以直接使用 @WebListener 注解,从而省略 web.xml 中的配置。

转载地址:http://hpdws.baihongyu.com/

你可能感兴趣的文章
Vuejs入门和使用实践
查看>>
SpringBoot入门和使用实践
查看>>
JEECG配置Kisso单点登录
查看>>
解决Oracle11g不能导出空表的问题
查看>>
[ContOS] MySQL安装部署
查看>>
CentOS基础操作命令
查看>>
[CentOS] JDK安装部署
查看>>
[CentOS] Tomcat安装部署
查看>>
Linux硬盘扩容
查看>>
[CentOS] Typora安装
查看>>
tcp三次握手和tcp四次挥手测试
查看>>
TCP协议格式
查看>>
tcp三次握手和tcp四次挥手过程详解
查看>>
upd协议格式
查看>>
upd协议测试
查看>>
IP协议头格式
查看>>
以太网协议
查看>>
mmap
查看>>
最简单的win7基础上安装ubuntu方法__EasyBCD硬盘安装(免U盘)
查看>>
getopt
查看>>