public class EncodingFilter implements Filter { public void destroy() { } public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException { // 1.强制转换 HttpServletRequest request = (HttpServletRequest) req; HttpServletResponse response = (HttpServletResponse) resp; // 2.操作 HttpServletRequest myrequest = new MyRequest(request); // 增强后的request,解决了编码问题 response.setContentType("text/html;charset=utf-8"); // 3.放行 chain.doFilter(myrequest, response); } public void init(FilterConfig filterConfig) throws ServletException { } } // 装饰类 class MyRequest extends HttpServletRequestWrapper { private HttpServletRequest request; public MyRequest(HttpServletRequest request) { super(request); this.request = request; } // 重写关于获取请求参数的方法. @Override public String getParameter(String name) { Map<String, String[]> map = getParameterMap(); if (name == null) { return null; } String[] st = map.get(name); if (st == null || st.length == 0) { return null; } return st[0]; } @Override public String[] getParameterValues(String name) { Map<String, String[]> map = getParameterMap(); if (name == null) { return null; } String[] st = map.get(name); return st; } private boolean flag = true; //添加这个boolen值的目的是,当我传递的参数是多个的时候,我第一次就已经设置好了 我我的编码集,所以当我再次调用的时候,也就不需要修改编码集,再次修改的时候,还是会乱码。 @Override public Map getParameterMap() { // 1.得到所有请求参数的Map集合 Map<String, String[]> map = request.getParameterMap(); // 有编码问题. // 2.解决编码问题. if (flag) { for (String key : map.keySet()) { String[] values = map.get(key); for (int i = 0; i < values.length; i++) { try { values[i] = new String(values[i].getBytes("iso8859-1"), "utf-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } } flag = false; } return map; } }
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println(request.getParameter("msg1")); System.out.println(request.getParameter("msg2")); }
<body> <form action="/day21_2/demo6" method="get"> msg1:<input type="text" name="msg1"><br> msg2:<input type="text" name="msg2"><br> <input type="submit" value="提交"> </form> </body>