`
kalogen
  • 浏览: 880124 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

很好的解决中文乱码的filter(包括get和post提交两种方式)

    博客分类:
  • Java
阅读更多

/**
 * Tomcat GET方式表单提交乱码解决。
 * @author BeanSoft
 *
 */
public class TomcatFormFilter implements Filter {
 public void destroy() {
  // TODO Auto-generated method stub
  
 }

 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
  // 1. ServletRequest 转成 HttpServletRequest
  HttpServletRequest req = (HttpServletRequest)request;
  
  // 2. 如果是GET,就生成一个Wrapper对象,覆盖获取参数的方法进行转码
  if("GET".equalsIgnoreCase(req.getMethod())) {
   req = new MyRequest(req);
  }
  // 3. 如果是POST,request.setCharacterEncoding("UTF-8")
  else if("POST".equalsIgnoreCase(req.getMethod())) {
   req.setCharacterEncoding("UTF-8");
  }
  // 4.调用chain.doFilter继续向后执行
  chain.doFilter(req, response);
 }

 public void init(FilterConfig arg0) throws ServletException {
  // TODO Auto-generated method stub
  
 }

}

/**
 * 包装器,覆盖 getParameter()和 getParameterValues() 这两个方法来进行转码。
 * @author BeanSoft
 *
 */
class MyRequest extends HttpServletRequestWrapper {

 public MyRequest(HttpServletRequest request) {
  super(request);
  // TODO Auto-generated constructor stub
 }
 
 /**
  * 字符串转码。
  * @param input 输入字符串
  * @param srcEncoding 源字符串的编码
  * @param targetEncoding 目标编码
  * @return 转换过的内容
  */
 public String changeEncoding(String input, String srcEncoding, String targetEncoding) {
  try {
   // 1. 获取源编码的bytes[]
   byte[] data = input.getBytes(srcEncoding);
   // 2. 将bytes[]按照制定编码转换为String
   return new String(data, targetEncoding);
  } catch (UnsupportedEncodingException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  
  return input;
 }

 @Override
 public String getParameter(String name) {
  String value = super.getParameter(name);
  
  if(value != null) {
   value = changeEncoding(value, "ISO8859-1", "UTF-8");
  }
  return value;
 }

 @Override
 public String[] getParameterValues(String name) {
  String[] values = super.getParameterValues(name);
  if(values != null && values.length > 0) {
   for (int i = 0; i < values.length; i++) {
    String value = values[i];
    
    values[i] = changeEncoding(value, "ISO8859-1", "UTF-8");
   }
  }
  return values;
 }
 
}

<script></script>

分享到:
评论

相关推荐

    J2EE以GET和POST方式提交表单的乱码解决(受教了)

    下面我们将深入探讨如何解决J2EE环境下GET和POST方式提交表单时出现的乱码问题。 首先,我们要理解GET和POST的区别。GET方式会将表单数据附加到URL后面,而POST方式则将数据放在请求体中。由于GET方式的限制,它...

    解决post get 请求乱码问题

    对于 GET 请求,我们可以使用两种方法来解决乱码问题: 方法一:修改 Tomcat 配置文件 我们可以修改 Tomcat 的配置文件,添加 URIEncoding 属性。例如,在 conf/server.xml 文件中,我们可以添加以下配置: ```...

    中文乱码过滤器(包括GET和POST)

    中文乱码过滤器是一种专门用于解决这种问题的工具,它能够有效地处理GET和POST请求中的中文乱码问题,确保数据的正确显示和传输。本文将深入探讨中文乱码的产生原因,介绍中文乱码过滤器的工作原理,以及如何在实际...

    自定义Filter来解决web项目的乱码问题,包括get和post请求

    自定义Filter来解决web项目中的乱码问题,包括get请求和post请求,使用包装设计模式。

    利用Filter全局中文过滤(get和post请求中文乱码问题)

    filter是javaWeb中一个十分重要的知识点,可以拦截webApp的所有请求。 使用场景: 1、可以利用filter做到网站自登录。...2、可以利用filter全局修改参数编码,从而解决中文乱码问题(十分重要)。

    过滤器实现get请求和POST请求的中文乱码问题

    使用过滤器实现GET请求和POST请求的中文乱码问题,只需在自己的Web应用中的web.xml中配置该filter即可使用。

    get与post乱码过滤器.zip

    这个"get与post乱码过滤器"很可能是一个Servlet Filter,它是Java Servlet API提供的一种机制,可以拦截请求和响应,在它们到达目标Servlet或JSP之前进行预处理,或者在离开服务器之前进行后处理。Filter可以在请求...

    get post提交表单中文乱码过滤器(java)

    get post提交表单中文乱码过滤器(java)

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

    总结,解决Spring MVC中GET请求中文乱码问题的关键在于确保从客户端到服务器再到客户端的整个链路中,字符编码的一致性和正确设置。通过调整配置、使用注解或自定义拦截器,可以有效地解决这个问题,确保中文数据的...

    JSP-GET-POST传递的乱码问题

    然而,在处理中文参数时,尤其是通过GET和POST方法传递时,经常会出现乱码问题。这通常是由于字符编码不一致或者处理不当导致的。以下是对这一问题的详细解析: 首先,我们需要理解字符编码的基本概念。在Web中,...

    POST和GET方法乱码解决方案.docx

    - **传输过程**:POST和GET两种方法处理数据的方式不同,导致其在传输过程中可能出现的乱码问题也有所不同。 - **后端解码**:服务器接收到数据后,根据预设的字符集进行解码。若解码字符集与前端编码字符集不符,则...

    JAVA过滤器filter request.setCharacterEncoding仅对POST提交起作用,对GET提交还是会出现乱码问题

    综上所述,虽然`setCharacterEncoding`方法对POST请求的处理很有效,但解决GET请求乱码问题需要采取更全面的策略,包括但不限于服务器配置、URL编码、页面编码设置等。开发者应理解HTTP协议的工作原理,并充分考虑...

    03.SpringMVC中如何解决POST请求中文乱码问题GET的又如何处理呢.zip

    总结,解决Spring MVC中的POST和GET请求中文乱码问题,关键在于确保整个系统从客户端到服务器端的字符编码一致性,包括过滤器、控制器参数、表单提交以及服务器配置等。遵循以上步骤,可以有效避免中文乱码的出现。...

    中文乱码javaWEB开发各种解决中文乱码问题

    本文将详细探讨Java Web开发中解决中文乱码问题的策略,包括文件编码设置、页面编码控制、请求参数编码转换、过滤器应用以及GET请求特殊处理等。 #### 1. 文件编码设置 在Java Web项目中,确保所有文件(包括Java...

    Servlet及jsp解决中文乱码问题

    4. **表单提交方式引起的编码问题**:不同的表单提交方式(GET与POST)对于编码的处理方式不同,如果不加以处理,也会导致乱码问题。 #### 三、解决中文乱码的具体方法 ##### 1. 数据库配置 - **MySQL数据库配置*...

    中文乱码解决

    - C) 使用过滤器(Filter)对所有JSP请求进行编码处理,这样可以全局解决POST提交乱码问题,而无需在每个文件中写入编码设置。 3. **GET请求和文件上传乱码**: - GET请求的编码问题可以通过设置服务器配置或者...

    JSP中文乱码问题综述,中文乱码解决大全

    1. **源文件编码**:Java和JSP源文件可能包含中文字符,如果源文件的保存编码与编译时使用的编码不匹配,编译后的class文件就可能出现乱码。建议在Java源文件中避免直接使用中文,若必须使用,可使用-eencoding参数...

    JSP中文乱码解决集锦

    - JSP页面中,编码设置通常包含在两处:`pageEncoding`指令和`contentType`属性。`pageEncoding`定义了JSP源文件的编码,例如`&lt;%@ page language="java" pageEncoding="UTF-8"%&gt;`。`contentType`则指定了HTTP响应的...

    Tomcat和weblogic中文乱码问题解决方案

    Tomcat和WebLogic中文乱码问题解决方案 在 Java Web 开发中,中文乱码问题一直是困扰开发者的主要问题之一。 Tomcat 和 WebLogic 是两个常用的 web 服务器,都是支持 Servlet 和 JSP 的。然而,在使用这些服务器时...

    JSP页面中文乱码几个解决办法

    总结来说,解决JSP页面中文乱码问题的关键在于保持字符编码的一致性,从编辑器保存文件的编码、JSP页面的编码声明、Servlet的响应编码、POST请求的参数编码,到服务器处理GET请求的编码,都需要进行适配和统一。...

Global site tag (gtag.js) - Google Analytics