
1.Sevlet过滤器
1.什么是过滤器
servlet过滤器与servlet十分相似,但它具有拦截客户端请求的功能。
过滤器实质上是在web应用服务器上的web应用组件,用于拦截客户端资源与目标资源的请求。
2.过滤器核心对象
过滤器对象放置在javax.servlet包中。
- FilterConfig《interface》
该接口由servlet容器实现,主要用于获取过滤器中的配置信息。
- Filter《interface》
每个过滤对象都要直接或间接地实现Filter接口,在filter中定义了三个方法,分别是init(),doFilter(),destroy()方法。
- FilterChain《interface》
该接口仍然由servlet容器实现。
3.过滤器的创建与配置
创建:
创建一个过滤器对象需要实现Javax.servlet,Filter接口,同时实现Filter接口的三个方法。init():用于对过滤器的初始化进行处理。destroy():过滤器的销毁方法。
doFilter():用于过滤处理的业务逻辑。
配置:
《!–过滤器的声明–》
《filter》
《filter-name》MyFilter《/filter-name》
《filter-class》com.lyq.MyFilter《/filter-class》
《/filter》
《!–过滤器映射–》
《filter-mapping》
《filter-name》MyFilter《/filter-name》
《url-pattern》/MyFilter《/url-pattern》
《/filter-mapping》
2.servlet监听器
1.servlet监听器简介
监听器的作用是监听web容器中的有效事件,因此它是由容器管理的。
2.servlet监听器的原理
servlet监听器是当今web开发的重要组成部分,它是在servlet2.3规范中和servlet过滤器一起引入的,并且在servlet2.4规范中进行较大的改进,主要用来对web应用进行监听和控制的,极大增强了web应用处理能力。
3.servlet上下文监听
servlet上下文监听可以监听servletContext对象的创建,删除以及属性的添加,删除和修改操作,该监听器需要用到如下两个接口。
ServletContextListener接口
该接口存放在javax.servlet包中,主要实现ServletContext的创建和删除。该接口提供了两个方法,也被称为“web应用程序的生命周期方法”
(1).contextInitialized(ServletContextEvent event)方法:通知正在收听的对象,应用程序已经被加载及初始化。
(2).contextDestroy(ServletContextEvent event)方法:通知正在收听的对象,应用程序已经被载出,即关闭。
ServletContextAttributeListener接口
该接口主要存放在javax.servlet包中,主要实现监听ServletContext属性的挺假,删除和修改。ServletContextAttributeListener接口提供了三个方法。
(1).attributeAdded(ServletContextAttributeEvent event)方法:当有对象加入到Application的范围时,通知正在收听的对象。
(2).attributeReplace(ServletContextAttributeEvent event)方法:当在application的范围中有对象取代另一个对象时,通知正在收听的对象。
(3).attributeRemove(ServletContextAttributeEvent event)方法:当有对象从application范围中移除时,通知正在收听的对象。
创建监听器:
要让web容器启动时通知自定义的监听器,需要在web.xml中使用《listener》元素来配置监听器类。
eg:
《listener》
《listener-class》com.listener.MyContentListener《/listener-class》
《/listener》
4.HTTP会话监听
HTTP会话监听信息,有四个接口可以进行监听。
- HttpSessionListener接口
该接口实现HTTP会话的创建和销毁。该接口提供了以下两个方法:
(1).sessionCreated(HttpSessionEvent event)方法:通知正在收听的对象,session已经被加载及初始化。
(2).sessionDestroyed(HttpSessionEvent event)方法:通知正在收听的对象,session已经被载出。
- HttpSessionActivationListener接口
- 该接口实现监听HTTP会话active和passivate。该接口提供了三个方法:
(1).attributeAdded(HttpSessionBindingEvent event)方法:当有对象加入到session的范围时,通知正在收听的对象。
(2).attributeReplaced(HttpSessionBindingEvent event)方法:当在session范围内有对象取代另一个对象时,通知正在收听的对象。
(3).attributeRemove(HttpSessionBindingEvent event)方法:当有对象从session范围在移除时,通知正在收听的对象。
- HttpBindingListener接口
HttpBindingListener接口实现监听HTTP会话中对象的绑定信息。它是唯一不需要在web.xml中设定Listener的。该接口提供了以下两个方法。
(1).valueBound(HttpSessionBindingEvent event)方法:当有对象加入到session范围时会被自动调用。
(2).valueUnBound(HttpSessionBindingEvent event)方法:当有对象从session范围内移除时会被自动调用。
- HttpSessionAttributeListener接口
该接口实现监听HTTP会话中属性的设置请求。
(1).sessionDidActivate(HttpSessionEvent event)方法:通知正在收听的对象,他的session已经变为有效状态。
(2).sessionWillPassivate(HttpSession event)方法:通知正在收听的对象,他的session已经变为无效状态。
5.servlet请求监听
- SevletRequestListener接口
该接口提供了以下两个方法:
(1).requestInitalized(ServletRequestEvent event)方法:通知正在收听的对象,ServletRequest已经被加载及初始化。
(2).requestDestroyed(ServletRequestEvent event)方法:通知正在收听的对象,ServletRequest对象已经被载出,即关闭。
- ServletRequestAttributeListener接口
该接口提供了以下三个方法:
(1).attributeAdded(ServletRequestAttributeEvent event)方法:当有对象加入到request的范围时,通知正在收听的对象。
(2).attributeReplaced(ServletRequestAttributeEvent event)方法:当在request范围内有对象取代另一个对象时,通知正在收听的对象。
(3).attributeRemove(ServletRequestAttributeEvent event)方法:当有对象从request范围在移除时,通知正在收听的对象。
3.servlet3.0的新特性
1.新增注释
- @WebServlet
eg:@WebServlet(name=”saveSErvlet” urlPatterns=”/SaveServlet”)
- @WebFilter
eg:@WebFilter(filterName=”char”,urlPatterns=”/*”)
- @WebListener
eg:@WebListener(“This is only a demo listener”)
- @WebInitParam
eg:@WebServlet(urlPatterns=”/simple”,name=”SimpleServlet”,
initParam={@WebInitParam(name=”username”,value=”tom”)})
2.对文件上传的支持
实现文件上传需要实现两件事:
需要添加@MultipartConfig注释
从request对象中获取Part文件对象
3.异步处理
在servlet3.0之前,一个servlet的工作流程是:首先,servlet接收到请求后,需要对请求携带的数据进行一些预处理。接着调用业务接口的某些方法,以完成业务处理。最后,根据处理的结果提交响应。
现在通过servlet3.0的异步处理机制可以将处理流程调整为以下流程:首先,servlet接收到请求后,需要对请求携带的数据进行一些预处理。接着servlet线程将请求转交给异步线程来执行业务处理,线程本身返回至容器。
这样,Servlet线程不在一直处于阻塞状态以等待业务逻辑的处理,而是启动异步后可以立即返回。
异步处理机制可应用于servlet和过滤器两种组件。@WebServlet和@WebFilter注释提供了asyncSupported属性,默认该属性的取值为false,要启动异步处理支持,只需将属性设置为true即可。




近期评论