Filter
生命周期:init -> doFilter -> destroy
同一个请求路径 /demo01.do 中,Filter 会在 Servlet 前拦截请求
Filter 和 Servlet 类似,可以在 web.xml 中配置映射也可以直接使用 @WebFilter("/demo01.do")
@WebFilter("/demo01.do")
public class Demo01Filter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("helloA");
//放行
filterChain.doFilter(servletRequest,servletResponse);
System.out.println("helloA2");
}
@Override
public void destroy() {
}
}
多个 Filter 的顺序
在 web.xml 中配置的 Filter 按配置文件中的配置顺序
@WebFilter("/")注解的 Filter 按类名的全名排序
一般不将配置文件和注解两种方法混合使用
Filter 在中央控制器前拦截请求,可以实现为所有请求设置编码
为所有请求设置编码
@WebFilter(urlPatterns = {"*.do"},initParams = {@WebInitParam(name = "encoding",value = "UTF-8")})
public class CharacterEncodingFilter implements Filter {
private String encoding = "UTF-8";
@Override
public void init(FilterConfig filterConfig) throws ServletException {
String encodingStr = filterConfig.getInitParameter("encoding");
if(StringUtil.isNotEmpty(encodingStr)){
encoding = encodingStr ;
}
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
((HttpServletRequest)servletRequest).setCharacterEncoding(encoding);
filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void destroy() {
}
}
标签:encoding,void,Filter,Servlet24,Override,servletRequest,public
From: https://www.cnblogs.com/Ashen-/p/17065295.html