全站编码过滤器EncodingFilter
来源:互联网 发布:吸烟罚款 知乎 编辑:程序博客网 时间:2024/05/18 21:47
import java.io.IOException;import java.util.Map;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 { private FilterConfig config = null; private String encode = null; public void destroy() { } 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); } public void init(FilterConfig filterConfig) throws ServletException { this.config = filterConfig; encode = config.getInitParameter("encode") == null?"utf-8":config.getInitParameter("encode"); } //内部类,装饰类改造HttpServletRequest 的三个方法 class MyHttpServletRequest extends HttpServletRequestWrapper{ private HttpServletRequest request = null; private boolean isNotEncode = true; public MyHttpServletRequest(HttpServletRequest request) { super(request); this.request = request; } @Override public 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();//获取有乱码的map if(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); } } @Override public String[] getParameterValues(String name) { return (String[]) getParameterMap().get(name); } @Override public String getParameter(String name) { return getParameterValues(name) == null ? null : getParameterValues(name)[0]; } }}
在xml文件重配置过滤器的拦截路径
<filter> <description>全站乱码过滤器</description> <filter-name>encodeFilter</filter-name> <filter-class>com.java.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
- 全站编码过滤器EncodingFilter
- EncodingFilter 全站编码过滤器 get请求中文编码过滤
- 全局编码过滤器--encodingFilter
- 04-封装BaseServlet和设置全站请求编码过滤器EncodingFilter
- 小工具(6):项目所需小工具之EncodingFilter(全站请求编码过滤器)
- 使用EncodingFilter过滤器来完成统一编码
- javaweb全站编码过滤器
- servlet过滤器之EncodingFilter
- 乱码过滤器EncodingFilter
- 过滤器篇(2)-----过滤器设置编码格式与清除浏览器缓存(EncodingFilter , NoCacheFilter)
- 过滤器——解决全站编码
- 使用过滤器统一全站编码
- javaweb 使用过滤器解决全站编码问题
- EncodingFilter
- EncodingFilter
- EncodingFilter
- EncodingFilter
- 过滤器-全站压缩
- 欧拉函数
- 2013 高斯日记
- opencv 3.1模块+扩展模块 解析
- 10.Smarty3:缓存控制
- Java大数之大数比大小compareTo()和equals()的用法
- 全站编码过滤器EncodingFilter
- (记录学习android遇到的问题)使用被weight分配空间后的控件高度值画新控件出现的问题
- 并查集
- hibernate映射详解:一对一映射的两种实现方式
- 关于Android studio 2.0beta5最近提示的Plugin is too old
- 十分钟搭建 Neural Style 服务
- Python进阶学习小结-1.md
- Sphinx中通过mysql客户端访问Sphinx,实现实时索引,需要注意的要点
- jquery-ajax-php(内容点赞并进行cookie限制实现)