[关闭]
@nextleaf 2018-09-26T10:25:30.000000Z 字数 2091 阅读 1104

2018-09-25 工作日志

JSP 过滤器


下午

JSP过滤器

过滤器是一种服务器端的组件,可以动态地拦截请求和响应,以变换或使用包含在请求或响应中的信息。
可以实现以下目的:

根据规范建议的各种类型的过滤器:

过滤器通过 Web 部署描述符(web.xml)中的 XML 标签来声明,然后映射到您的应用程序的部署描述符中的 Servlet 名称或 URL 模式。

当 Web 容器启动 Web 应用程序时,它会为您在部署描述符中声明的每一个过滤器创建一个实例。

Filter 的执行顺序与在 web.xml 配置文件中的配置顺序一致,一般把 Filter 配置在所有的 Servlet 之前。

  1. <web-app>
  2. <filter>
  3. <filter-name>CommentLenth</filter-name>
  4. <filter-class>s.filter.LengthFilter</filter-class>
  5. </filter>
  6. <!--filter-mapping顺序决定过滤器执行顺序-->
  7. <filter-mapping>
  8. <filter-name>CommentLenth</filter-name>
  9. <!--要拦截的请求路径(与相关servlet的url-pattern一致)-->
  10. <url-pattern>/comment</url-pattern>
  11. </filter-mapping>
  12. </web-app>

此处输入图片的描述

Filter 的基本工作原理

1、Filter 程序是一个实现了特殊接口的 Java 类,与 Servlet 类似,也是由 Servlet 容器进行调用和执行的。
2、当在 web.xml 注册了一个 Filter 来对某个 Servlet 程序进行拦截处理时,它可以决定是否将请求继续传递给 Servlet 程序,以及对请求和响应消息是否进行修改。
3、当 Servlet 容器开始调用某个 Servlet 程序时,如果发现已经注册了一个 Filter 程序来对该 Servlet 进行拦截,那么容器不再直接调用 Servlet 的 service 方法,而是调用 Filter 的 doFilter 方法,再由 doFilter 方法决定是否去激活 service 方法。
4、但在 Filter.doFilter 方法中不能直接调用 Servlet 的 service 方法,而是调用 FilterChain.doFilter 方法来激活目标 Servlet 的 service 方法,FilterChain 对象时通过 Filter.doFilter 方法的参数传递进来的。
5、只要在 Filter.doFilter 方法中调用 FilterChain.doFilter 方法的语句前后增加某些程序代码,这样就可以在 Servlet 进行响应前后实现某些特殊功能。
6、如果在 Filter.doFilter 方法中没有调用 FilterChain.doFilter 方法,则目标 Servlet 的 service 方法不会被执行,这样通过 Filter 就可以阻止某些非法的访问请求。

相关链接:Filter、FilterChain、FilterConfig 介绍


监听器

生命周期监听器——监听域对象自身的创建和销毁的事件

ServletContextListener
ServletRequestListener
HttpSessionListener

属性操作监听器——监听ServletContext、HttpSession和ServletRequest这三个域对象中属性的创建、销毁和修改的事件

ServletContextAttributeListener
ServletRequestAttributeListener
HttpSessionAttributeListener

会话属性类监听器——监听绑定到HttpSession域中某个对象状态的事件

HttpSessionBindingListener(这种类型的监听器不用在web.xml中进行声明)
HttpSessionActivationListener

HttpSession中对象的状态有两种:绑定与解除绑定、钝化与活化;
绑定与解除绑定,就是指在HttpSession中将某个对象设置为属性值或者移除某个属性的值。而钝化是指服务器会将不常使用的Session对象暂时序列化到系统文件或数据库中,而活化就是将暂存在系统文件或数据库中的Session对象反序列化到服务器中

相关链接:JSP——监听器篇


添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注