创建Filter
创建一个类然后实现Filter
注意:
导入的包是javax.servlet.Filter下的包
初始化init是再启动tomcat的时候进行初始化的
doFilter中的chain.doFilter是放行的方法
建议把doFilter中的request和response转换为带协议的HttpServletRequset和HttpServletResponse
因为带协议的Http是不带协议的子类,里面的方法比父类更丰富,方便后面调用方法
下面是创建Filter的实例代码
package cn._02FilterChain;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
@WebFilter("/chain")
public class AFilter implements Filter{
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest req=(HttpServletRequest) request;
HttpServletResponse resp=(HttpServletResponse) response;
System.out.println("A放行之前+++");
chain.doFilter(req, resp);
System.out.println("A放行之后---");
}
@Override
public void destroy() {
// TODO Auto-generated method stub
}
}
Filter再web.xml中的配置
配置方式有
1.再web.xml中进行配置
2.再类中加上@WebFilter("拦截路径");
filter链式的执行方式
调用方式是按照配置的<filter-mapping>来调用的
下面是web.xml的实例代码
<filter>
<filter-name>chainA</filter-name>
<filter-class>cn._02FilterChain.AFilter</filter-class>
</filter>
<filter>
<filter-name>chainB</filter-name>
<filter-class>cn._02FilterChain.BFilter</filter-class>
</filter>
<filter>
<filter-name>chainC</filter-name>
<filter-class>cn._02FilterChain.CFilter</filter-class>
</filter>
<!-- 执行顺序按照filter-mapping执行 -->
<filter-mapping>
<filter-name>chainB</filter-name>
<url-pattern>/chain</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>chainA</filter-name>
<url-pattern>/chain</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>chainC</filter-name>
<url-pattern>/chain</url-pattern>
</filter-mapping>