Filter解決全域性的編碼
阿新 • • 發佈:2018-12-17
步驟:
- 編寫一個過濾器的類實現Filter介面
- 實現介面中尚未實現的方法(著重實現doFilter方法)
- 在web.xml中進行配置(主要是配置要對哪些資源進行過濾)
EncidingFilter.java
package web.filter; import java.io.IOException; import java.io.UnsupportedEncodingException; 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.http.HttpServletRequest; import javax.servlet.http.HttpServletRequestWrapper; public class EncodingFilter implements Filter{ @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { //在傳遞request之前對request的getParameter方法進行增強 /* * 裝飾者模式(包裝) * * 1、增強類與被增強的類要實現統一介面 * 2、在增強類中傳入被增強的類 * 3、需要增強的方法重寫 不需要增強的方法呼叫被增強物件的 * */ //被增強的物件 HttpServletRequest req = (HttpServletRequest) request; //增強物件 EnhanceRequest enhanceRequest = new EnhanceRequest(req); chain.doFilter(enhanceRequest, response); } @Override public void destroy() { } @Override public void init(FilterConfig filterConfig) throws ServletException { } } class EnhanceRequest extends HttpServletRequestWrapper{ private HttpServletRequest request; public EnhanceRequest(HttpServletRequest request) { super(request); this.request = request; } //對getParaameter增強 @Override public String getParameter(String name) { String parameter = request.getParameter(name);//亂碼 System.out.println(parameter); try { parameter = new String(parameter.getBytes("iso8859-1"),"UTF-8"); System.out.println("進行編碼:"+parameter); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return parameter; } }
web.xml中加入這個
<filter> <filter-name>EncodingFilter</filter-name> <filter-class>web.filter.EncodingFilter</filter-class> </filter> <filter-mapping> <filter-name>EncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
經過這個Filter的getparameter方法拿到的都是編碼過的,想用其他方法,直接增強就行