web.xml 在一个web应用中,可以开发编写多个Filter,这些Filter组合起来称之为一个Filter链。 web服务器根据Filter在web.xml文件中的注册顺序,决定先调用哪个Filter。 当第一个Filter的doFilter方法被调用时,web服务器会创建一个代表Filter链的FilterChain对象传递给该方法。 在doFilter方法中,开发人员如果调用了FilterChain对象的doFilter方法,则web服务器会检查FilterChain对象中是否还有filter,如果有,则调用第2个filter,如果没有,则调用目标资源。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<welcome-file-list>
<welcome-file>ip</welcome-file>
</welcome-file-list>
<filter>
<!-- filter名可以随便起,但要与下面的mapping中的filter-name保持一致 -->
<filter-name>ip_filter</filter-name>
<!-- 实现类所在目录 -->
<filter-class>IpFilter</filter-class>
</filter>
<filter-mapping>
<!-- 对应的filter名,和上边的filter名保持一致保持映射关系 -->
<filter-name>ip_filter</filter-name>
<!-- 要进行拦截过滤的目录 /*代表拦截全部。或者输入具体需要拦截的目录名-->
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>ipServlet</servlet-name>
<servlet-class>IpServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ipServlet</servlet-name>
<url-pattern>/ip</url-pattern>
</servlet-mapping>
</web-app>
@WebFilter的配置
在以后的高版本的web项目中,不需要再对xml进行配置了,只需要写一个普通的java类实现Filter接口,对该类进行@WebFilter说明就可以。下面说一下如何对@WebFilter配置。
@WebFilter的常用属性
package com.filter;
import javax.servlet.*;
import java.io.IOException;
public class CharsetFilet implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
servletRequest.setCharacterEncoding("utf-8");
servletResponse.setContentType("text/html;charset=utf-8");
filterChain.doFilter(servletRequest,servletResponse);
}
}
```
```
应用场景:
- 设置登陆权限验证
- 中文乱码问题