Servlet-使用Filter全局过滤中文乱码
来源:互联网 发布:快手视频配音软件 编辑:程序博客网 时间:2024/05/16 11:01
1、GlobalFilter类编写
/** * @author CSDN_LQR * @TODO 全局中文过滤器(适用get和post请求参数的中文乱码问题,从此不同在servlet中对参数做处理) */public class GlobalFilter implements Filter { @Override public void destroy() { } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; // 解决POST请求参数乱码问题 // request.setCharacterEncoding("UTF-8"); req = new MyRequest(req); chain.doFilter(req, response); } @Override public void init(FilterConfig filterConfig) throws ServletException { }}
2、MyRequest类编写
/** * @author CSDN_LQR * @TODO 使用装饰模式包装HttpServletRequest,解决getParamter中文乱码问题 */class MyRequest extends HttpServletRequestWrapper { private HttpServletRequest req; private boolean flag = true;// 标记是否getParameterMap方法还未被调用过(如果在同个servlet中调用了2次getParameter等方法2次,没有用flag做标记的话,会对参数进行2次编码,结果第2次得到的参数会是乱码) public MyRequest(HttpServletRequest request) { super(request); req = request; } @Override public String getParameter(String name) { return getParameterMap().get(name)[0]; } @Override public String[] getParameterValues(String name) { return getParameterMap().get(name); } @Override public Map<String, String[]> getParameterMap() { Map<String, String[]> map = req.getParameterMap(); if (flag) { for (Map.Entry<String, String[]> entry : map.entrySet()) { String[] value = entry.getValue(); for (int i = 0; i < value.length; i++) { try { value[i] = new String(value[i].getBytes("iso-8859-1"), "UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } } flag = false; } return map; }}
3、web.xml配置
<?xml version="1.0" encoding="UTF-8"?><web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <!-- filter要放在servlet之前 --> <filter> <filter-name>GlobalFilter</filter-name> <filter-class>com.lqr.filter.GlobalFilter</filter-class> </filter> <filter-mapping> <filter-name>GlobalFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <servlet> ... </servlet> <servlet-mapping> ... </servlet-mapping></web-app>
0 0
- Servlet-使用Filter全局过滤中文乱码
- 使用filter(过滤器)处理JSP和servlet的中文乱码
- Filter全局解决中文乱码问题
- filter过滤、servlet过滤
- struts中文乱码使用filter
- Filter中对字符编码过滤解决中文乱码问题
- Servlet容器Filter的使用(Filter解决乱码问题实例)
- 使用 Filter 过滤器 处理中文 乱码问题
- 使用Filter解决中文乱码问题
- Servlet中filter过滤<dispatcher>FORWARD</dispatcher>标签使用
- Servlet中使用Filter来过滤请求编码
- Servlet实现Filter过滤拦截
- 使用filter解决中文乱码问题--struts2乱码
- Servlet 中文乱码解决【使用过滤器】
- Myeclipse:使用Servlet中文出现乱码解决方案
- Filter 过滤器 中文乱码
- Filter处理中文乱码
- 使用过滤器Filter解决JSP+Servlet页面编码乱码
- SQL Error: 1054, SQLState: 42S22
- javaWeb之使用Kaptcha组件使用验证码
- 我来讯飞的时光
- mysql安装,连接,插入(C语言)环境ubuntu16.04
- Java基础集锦:Java的类
- Servlet-使用Filter全局过滤中文乱码
- Android-ListView的使用-为新手而创-BaseAdapter
- 杭电OJ2021
- Android数据存储五种方式总结
- Mysql 使用 Navicat 连接提示 Cann't connet to Mysql server on 解决方案
- 使用Build Variants控制应用的多配置
- QEMU QoS特性及原理分析和Librbd QoS定义
- 杭电OJ2024
- Android平台安全概念篇