不适用web.xml,使用注解,@WebFilter不起作用吗?
都不经过过滤器
dispatcherTypes都写上了,
package com.navitek.crawler.cloud.filter; import java.io.IOException; import java.io.UnsupportedEncodingException; import javax.servlet.DispatcherType; 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; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequestWrapper; import javax.servlet.http.HttpServletResponse; /** * * crawler_cloud com.navitek.crawler.cloud.filter.WebFilter * @Description 异步Servlet有时需要一个拦截器,但必须是异步的Filter,否则将会报错: ... 方法开启异步输出,否则MarkWapperedResponse将不起作用 * @author shaozt * @date 2015年12月7日 下午6:06:57 * @version 1.0 */ @WebFilter(dispatcherTypes = { DispatcherType.ASYNC, DispatcherType.ERROR, DispatcherType.FORWARD, DispatcherType.INCLUDE, DispatcherType.REQUEST }, urlPatterns = "/", asyncSupported = true) public class DoFilter implements Filter { private String encode = "UTF-8";// 默认UTF-8编码 public void init(FilterConfig filterConfig) throws ServletException { String encoding = filterConfig.getInitParameter("encode"); if (encoding != null) { encode = encoding; } } public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) req; HttpServletResponse response = (HttpServletResponse) resp; System.out.println("-doFilter.requestURI:" + request.getRequestURI()); // 设置request编码 request.setCharacterEncoding(encode); // 设置相应信息 response.setContentType("text/html;charset=" + encode); response.setCharacterEncoding(encode); chain.doFilter(new CharacterEncodingRequest(request), response); } public void destroy() { } } /** * 对Get方式传递的请求参数进行编码 */ class CharacterEncodingRequest extends HttpServletRequestWrapper { private HttpServletRequest request = null; public CharacterEncodingRequest(HttpServletRequest request) { super(request); this.request = request; } /** * 对参数重新编码 */ @Override public String getParameter(String name) { String value = super.getParameter(name); if (value == null) return null; String method = request.getMethod(); if ("get".equalsIgnoreCase(method)) { try { value = new String(value.getBytes("ISO8859-1"), request.getCharacterEncoding()); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } return value; } }