Filter + 動態代理實現全域性編碼
阿新 • • 發佈:2018-12-16
html:
<form action="/WEB24/EnCoding" method="get">
<input type="text" name="username">
<input type="submit" value="提交">
</form>
filter:
package web.filter; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; 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 { //被增強的物件 final HttpServletRequest req = (HttpServletRequest) request; HttpServletRequest newProxyInstance = (HttpServletRequest) Proxy.newProxyInstance(req.getClass().getClassLoader(), req.getClass().getInterfaces(), new InvocationHandler() { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { String mothodName = method.getName(); if("getParameter".equals(mothodName)) { String invoke = (String) method.invoke(req, args); System.out.println("亂碼"+invoke); invoke = new String(invoke.getBytes("iso8859-1"),"UTF-8"); return invoke; } return method.invoke(req, args); } }); chain.doFilter(newProxyInstance, response); } @Override public void destroy() { } @Override public void init(FilterConfig filterConfig) throws ServletException { } }
servlet:
String parameter = request.getParameter("username");
System.out.println(parameter);
response.setContentType("text/html;charset=UTF-8");
response.getWriter().write(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>