@nextleaf
2018-09-26T10:25:30.000000Z
字数 2091
阅读 1104
JSP
过滤器
过滤器是一种服务器端的组件,可以动态地拦截请求和响应,以变换或使用包含在请求或响应中的信息。
可以实现以下目的:
根据规范建议的各种类型的过滤器:
过滤器通过 Web 部署描述符(web.xml)中的 XML 标签来声明,然后映射到您的应用程序的部署描述符中的 Servlet 名称或 URL 模式。
当 Web 容器启动 Web 应用程序时,它会为您在部署描述符中声明的每一个过滤器创建一个实例。
Filter 的执行顺序与在 web.xml 配置文件中的配置顺序一致,一般把 Filter 配置在所有的 Servlet 之前。
<web-app>
<filter>
<filter-name>CommentLenth</filter-name>
<filter-class>s.filter.LengthFilter</filter-class>
</filter>
<!--filter-mapping顺序决定过滤器执行顺序-->
<filter-mapping>
<filter-name>CommentLenth</filter-name>
<!--要拦截的请求路径(与相关servlet的url-pattern一致)-->
<url-pattern>/comment</url-pattern>
</filter-mapping>
</web-app>
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
ServletContextAttributeListener
ServletRequestAttributeListener
HttpSessionAttributeListener
HttpSessionBindingListener(这种类型的监听器不用在web.xml中进行声明)
HttpSessionActivationListener
HttpSession中对象的状态有两种:绑定与解除绑定、钝化与活化;
绑定与解除绑定,就是指在HttpSession中将某个对象设置为属性值或者移除某个属性的值。而钝化是指服务器会将不常使用的Session对象暂时序列化到系统文件或数据库中,而活化就是将暂存在系统文件或数据库中的Session对象反序列化到服务器中