1、Servlet过滤器
Servlet 过滤器是可用于 Servlet 编程的 Java 类,可以实现以下目的:
- 在客户端的请求访问后端资源之前,拦截这些请求,可以改变请求中的内容来满足实际开发的需要。
- 在服务器的响应发送回客户端之前,处理这些响应。
2、Filter配置
Filter在Web.xml中配置,示例代码如下:
<filter> <filter-name>LogFilter</filter-name> <filter-class>com.runoob.test.LogFilter</filter-class> <init-param> <param-name>Site</param-name> <param-value>菜鸟教程</param-value> </init-param> </filter> <filter-mapping> <filter-name>LogFilter</filter-name> <url-pattern>/*</url-pattern> <dispatcher>[REQUEST|INCLUDE|FORWARD|ERROR]</dispatcher> </filter-mapping>
Filter采用注解的方法配置过滤器,示例代码如下:
<dispatcher>
指定过滤器所拦截的资源被 Servlet 容器调用的方式,可以是REQUEST
,INCLUDE
,FORWARD
和ERROR
之一,默认REQUEST
。用户可以设置多个<dispatcher>
子元素用来指定 Filter 对资源的多种调用方式进行拦截。<dispatcher>
子元素可以设置的值及其意义
REQUEST
:当用户直接访问页面时,Web容器将会调用过滤器。如果目标资源是通过RequestDispatcher的include()或forward()方法访问时,那么该过滤器就不会被调用。INCLUDE
:如果目标资源是通过RequestDispatcher的include()方法访问时,那么该过滤器将被调用。除此之外,该过滤器不会被调用。FORWARD
:如果目标资源是通过RequestDispatcher的forward()方法访问时,那么该过滤器将被调用,除此之外,该过滤器不会被调用。ERROR
:如果目标资源是通过声明式异常处理机制调用时,那么该过滤器将被调用。除此之外,过滤器不会被调用
import javax.servlet.Filter;
import javax.servlet.annotation.WebFilter;
import javax.servlet.annotation.WebInitParam;
@WebFilter(filterName="DemoFilter",urlPatterns={"/*"},initParam={@WebInitParam(name="mood",value="awake")})
public class DemoFilter implements Filter{
...
}
其中urlPatterns属性:用于指定那些URL应该被该过滤器拦截,如果所有页面均应用该过滤器则可以设置为“/*”。
3、Servlet监听器
待续。。。。。