1.EncodingFilter.java
import java.io.IOException; 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; /** * Servlet Filter implementation class EncodingFilter */ public class EncodingFilter implements Filter { /** * Default constructor. */ public EncodingFilter() { // TODO Auto-generated constructor stub } /** * @see Filter#destroy() */ public void destroy() { // TODO Auto-generated method stub } /** * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain) */ public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { response.setContentType("text/html;charset=utf-8"); //1 创建我们包装之后的request对象 ServletRequest req = new MyRequest((HttpServletRequest)request); //2放行(放行的request是我们包装后的) chain.doFilter(req, response); } /** * @see Filter#init(FilterConfig) */ public void init(FilterConfig fConfig) throws ServletException { // TODO Auto-generated method stub } }
2.MyRequest.java
import java.io.BufferedReader; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.util.Enumeration; import java.util.HashMap; import java.util.Locale; import java.util.Map; import java.util.Map.Entry; import javax.servlet.RequestDispatcher; import javax.servlet.ServletInputStream; import javax.servlet.ServletRequest; import javax.servlet.ServletRequestWrapper; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequestWrapper; //将已经是乱码的参数,重新编码回中文 public class MyRequest extends HttpServletRequestWrapper{ private Map<String,String[]> params =new HashMap<String, String[]>(); public MyRequest(HttpServletRequest request) { super(request); // 在构造中获得封装参数的map, 将map中所有乱码解决 //----------------------------------------------- //1 获得map Map<String,String[]> map = super.getParameterMap(); //2 遍历map if(map!=null && map.size()>0){ for(Entry<String, String[]> en : map.entrySet()){ //3 取出每个键值对,并解决值得乱码(逆推法) String[] values = en.getValue(); if(values!=null){ String[] newValues = new String[values.length]; for(int i = 0; i < values.length ;i++){ try { newValues[i] = new String(values[i].getBytes("ISO-8859-1"),"UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } //4 将解决的键值对 放入新的map params.put(en.getKey(), newValues); } } } } @Override public String getParameter(String name) { String[] values = params.get(name); if(values==null){//获得的参数键不存在 return null; } return values[0]; } @Override public Map<String,String[]> getParameterMap() { return params; } @Override public String[] getParameterValues(String name) { return params.get(name); } }
时间: 2024-10-06 12:08:14