JavaWeb 全站乱码过滤

来源:互联网 发布:成都电视台网络直播 编辑:程序博客网 时间:2024/05/18 01:38

1、创建 EncodingFilter 实现 Filter 接口

public class EncodingFilter implements Filter {public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {//  解决响应乱码response.setContentType("text/html;charset="+encode);//  包装改造request中和获取请求参数相关的方法解决请求参数乱码chain.doFilter(new MyHttpServletRequest((HttpServletRequest) request), response);}}class MyHttpServletRequest extends HttpServletRequestWrapper{private HttpServletRequest request = null;private boolean isNotEncode = true;public MyHttpServletRequest(HttpServletRequest request) {super(request);this.request = request;}@Overridepublic Map getParameterMap() {try{if(request.getMethod().equalsIgnoreCase("POST")){//--如果是post提交,一行代码解决post提交请求参数乱码request.setCharacterEncoding(encode);return request.getParameterMap();}else if(request.getMethod().equalsIgnoreCase("GET")){//--如果是get提交,则应该手动编解码解决乱码Map<String,String[]> map = request.getParameterMap();//获取有乱码的mapif(isNotEncode){//只能在第一次解决乱码for(Map.Entry<String, String[]> entry : map.entrySet()){//遍历map,解决所有值的乱码String [] vs = entry.getValue();for(int i=0;i<vs.length;i++){vs[i] = new String(vs[i].getBytes("iso8859-1"),encode);}}isNotEncode = false;//设置为false,第二次就不会再进这个代码块了}return map;}else{return request.getParameterMap();}}catch (Exception e) {e.printStackTrace();throw new RuntimeException(e);}}}

2、注册:

<filter><description>全站乱码过滤器</description><filter-name>encodeFilter</filter-name><filter-class>com.itheima.filter.EncodingFilter</filter-class><init-param><param-name>encode</param-name><param-value>utf-8</param-value></init-param></filter><filter-mapping><filter-name>encodeFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>


0 0
原创粉丝点击