javaweb解决post和get请求方式中文乱码问题(通用)

  • 添加一个过滤器,解决乱码问题,代码如下:
  1 import java.io.IOException;
  2 import java.io.UnsupportedEncodingException;
  3 import java.util.Map;
  4
  5 import javax.servlet.Filter;
  6 import javax.servlet.FilterChain;
  7 import javax.servlet.FilterConfig;
  8 import javax.servlet.HttpConstraintElement;
  9 import javax.servlet.ServletException;
 10 import javax.servlet.ServletRequest;
 11 import javax.servlet.ServletResponse;
 12 import javax.servlet.http.HttpServletRequest;
 13 import javax.servlet.http.HttpServletRequestWrapper;
 14
 15 /**
 16  * 通用解决get 和 post 方式请求的中文乱码问题
 17  * @author 代码小杨
 18  *
 19  */
 20 public class EncodingFilter implements Filter {
 21
 22     public void destroy() {
 23     }
 24
 25     @Override
 26     public void doFilter(ServletRequest request, ServletResponse response,
 27             FilterChain chain) throws IOException, ServletException {
 28         //处理请求乱码
 29         HttpServletRequest httpServletRequest = (HttpServletRequest) request;
 30         HttpServletRequest myRequest = new MyRequest(httpServletRequest);
 31
 32         //处理响应乱码
 33         response.setContentType("text/html;charset=utf-8");
 34         chain.doFilter(myRequest, response);
 35     }
 36
 37     @Override
 38     public void init(FilterConfig filterConfig) throws ServletException {
 39
 40     }
 41 }
 42
 43 //自定义request对象
 44 class MyRequest extends HttpServletRequestWrapper{
 45
 46     private HttpServletRequest request;
 47     private boolean hasEncode;
 48
 49     public MyRequest(HttpServletRequest request) {
 50         super(request);
 51         this.request=request;
 52     }
 53
 54     //对需要增强的方法 进行覆盖
 55     @Override
 56     public Map getParameterMap() {
 57         //先获得请求方式
 58         String method = request.getMethod();
 59         if(method.equalsIgnoreCase("post")){   //post方式请求
 60             try {
 61                 request.setCharacterEncoding("utf-8");
 62                 return request.getParameterMap();
 63             } catch (UnsupportedEncodingException e) {
 64                 e.printStackTrace();
 65             }
 66         }else if(method.equalsIgnoreCase("get")){  //get方式请求
 67             Map<String,String[]> parameterMap = request.getParameterMap();
 68             if(!hasEncode){
 69                 for(String parameterName:parameterMap.keySet()){
 70                     String[] values = parameterMap.get(parameterName);
 71                     if(values!=null){
 72                         for (int i = 0; i < values.length; i++) {
 73                             try {
 74                                 values[i] = new String(values[i].getBytes("ISO-8859-1"),"utf-8");
 75                             } catch (UnsupportedEncodingException e) {
 76                                 e.printStackTrace();
 77                             }
 78                         }
 79                     }
 80                 }
 81                 hasEncode =  true;
 82             }
 83             return parameterMap;
 84         }
 85         return super.getParameterMap();
 86     }
 87
 88     @Override
 89     public String getParameter(String name) {
 90         Map<String,String[]> parameterMap = getParameterMap();
 91         String[] values = parameterMap.get(name);
 92         if(values==null){
 93             return null;
 94         }
 95         return values[0];
 96     }
 97
 98     @Override
 99     public String[] getParameterValues(String name) {
100         Map<String,String[]> parameterMap = getParameterMap();
101         String[] values=parameterMap.get(name);
102         return values;
103     }
104 }
  • web.xml文件中配置过滤器
 <filter>
      <filter-name>EncodingFilter</filter-name>
      <filter-class>com.**.web.filter.EncodingFilter</filter-class>
  </filter>

  <filter-mapping>
      <filter-name>EncodingFilter</filter-name>
      <url-pattern>/*</url-pattern>
  </filter-mapping>
时间: 2024-10-05 02:05:38

javaweb解决post和get请求方式中文乱码问题(通用)的相关文章

SpringMVC 解决GET请求时中文乱码的问题

<filter>        <filter-name>CharacterEncoding</filter-name>        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>        <init-param>            <param-name>encoding</param

详解get请求和post请求参数中文乱码的解决办法

首先出现中文乱码的原因是tomcat默认的编码方式是"ISO-8859-1",这种编码方式以单个字节作为一个字符,而汉字是以两个字节表示一个字符的. 一,get请求参数中文乱码的解决办法 对于get请求解决中文乱码有两种途径一种是修改tomcat默认的编码方式为"UTF-8" 在tomcat的server.xml里把 <Connector connectionTimeout="50000" port="8080" pro

使用过滤器(Filter)解决请求参数中文乱码问题(复杂方式)

前述: 在写这篇笔记之前,对笔记中的设计模式进行介绍: 本篇笔记中将要使用到的设计模式是:装饰(包装)设计模式 (1)装饰(包装)设计模式口诀: ①定义一个类,实现被装饰对象的接口 ②定义一个成员变量,记住被装饰对象的引用 ③定义构造方法,传入被装饰对象的实例 ④改写要修改的方法 ⑤不需要改写的方法,调用被装饰对象的原来的方法 (2)什么时候使用装饰设计模式 当我们需要对一个类进行增强的时候,增强后的类不再当前类的范畴 例如:现在有一个     Animal类     Cat和Dog都属于动物类

使用SpringMVC参数传递时,解决get请求时中文乱码的问题

问题描述: 使用SpringMVC参数传递时, 遇到get请求中文信息时,页面应答会显示中文乱码. 解决办法: 一,  我们需要把request.getParameter(“参数名”)获取到的字符串先用ISO-8859-1编码成字节流,然后再将其用utf-8解码成字符流,代码如下: String str = new String(request.getParameter("参数名").getBytes("iso-8859-1"), "utf-8"

get请求和post请求参数中文乱码的解决办法

get请求参数中文乱码的解决办法 在tomcat的server.xml里的Connector加个URIEncoding="UTF-8",把 <Connector connectionTimeout="50000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/> 改为 <Connector connectionTimeout=&qu

springmvc提供的解决post/get请求参数中文乱码问题

<!--springmvc提供的解决post/get请求参数中文乱码问题--><filter> <filter-name>encoding</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</p

配置Tomcat解决URL传参引出的中文乱码问题

今天在写一个JSP页面时候,发现下面报错: <span style="font-size:18px;"> <a href="request.jsp?username=小七七">测试URL传参</a></span> 通常情况下,通过使用contentType和下面的就可以解决传参过程中的中文乱码问题,但是貌似URL传参还要设备别的东西. <% request.setCharacterEncoding("u

解决Centos 6.3 中 gedit中文乱码问题

1.安装gconf-editor yum list | grep conf-editor yum install gconf-editor 2.运行gconf-editor 设置: apps  ---> gedit-2  --->  preferences  ----> encoding auto-detected 项添加Add New list value: GB2312 shown_in_menu 项添加 New list value: GB2312  解决Centos 6.3 中

如何解决链入js,innerHTML中文乱码问题呢?

描述:发生在做suhuotong网站的时候,添加在线客服代码的时候三个地方1.将js以UTF-8无BOM编码:VS修改或者使用NotePad++修改2.<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />[我觉得这个不是关键的]3.<script type="text/javascript" src="/{aspcms:sitepa