`
talentluke
  • 浏览: 590277 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

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

 
阅读更多

/**
 * 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;
 }
 
}

分享到:
评论

相关推荐

    自定义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提交表单中文乱码过滤器(java)

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

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

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

    JSP用过滤器解决request getParameter中文乱码问题

    (1)客户端的数据一般是通过HTTP GET/POST方式提交给服务器,在服务器端用request.getParameter()读取参数时,很容易出现中文乱码现象。 (2)用过滤器解决request中文乱码问题。 (3)代码如下: package my; ...

    JSP利用过滤器解决request中文乱码问题

    (1)客户端的数据一般是通过HTTP GET/POST方式提交给服务器,在服务器端用request.getParameter() 读取参数时,很容易出现中文乱码现象。 (2)用过滤器解决request中文乱码问题。 (3)代码如下: package my; ...

    web配置文件.txt

    GET请求和POST请求是HTTP请求的两种基本方法。 两者的区别:GET请求一般用去请求获取数据; POST一般作为发送数据到后台时使用 而POST请求中,如果出现中文时,会导致程序无法正常运行,会出现中文乱码问题,所以就...

    GetRequestUtf8Filter.java

    解决Get请求中文乱码的方式1、修改tomcat server.xml的编码 2、过滤器 ;本文就是通过过滤器修改,因业务需要兼容,所以写的Get拦截器,本文仅支持Get请求拦截器,本文仅支持Get请求拦截器,本文仅支持Get请求拦截器...

    Servlet-1-filter-3.rar

    对get、post请求进行全站防乱码控制

    文件上传和下载

    实现了用户上次资料到服务器 解决的下载乱码,存储乱码问题 有queue队列遍历所有文件的算法。 filter解决了所有get/post请求响应乱码的问题。

    HttpClient以及获取页面内容应用

    HttpClient已经应用在很多的项目中,比如Apache Jakarta上很著名的另外两个开源项目Cactus和HTMLUnit都使用了HttpClient。 下载地址:  http://hc.apache.org/downloads.cgi 1.2特性 1. 基于标准、纯净的java语言。...

    网页教程《跟姐姐学JSP》

    2.2.1. 先解决响应中的乱码 2.2.2. POST乱码 2.2.3. GET乱码 3. 请求的跳转与转发 3.1. 范例 3.2. 如果用forward 3.3. 如果用redirect 3.4. forward和redirect的问题 3.4.1. 绝对路径与相对路径 3.4.1.1. ...

    javaweb_高级_过滤器_监听器

    1:过滤器的原理。 2:如何使用过滤器。(对象 api 实现业务功能) 3:映射filter的多种方式 4:filter的案例(重点掌握) 1) 用户权限url设置 2) 解决全网站的post和get方式乱码。

    Java面试宝典2020修订版V1.0.1.doc

    14、jquery中的$.get和$.post请求区别? 27 15、jquery中如何操作样式的? 28 16、如何设置和获取HTML和文本的值? 28 17、Jquery能做些什么? 28 18、在ajax中data主要有哪几种? 28 19、jQuery中ajax由几部分组成...

    支付宝第三方支付接口

    1 index页面是创建支付url,使用ItemUrl方法拼凑一个url。...4 java程序要注意的中文乱码问题,一定要配置上去中文filter, 注意:一定要在web.xml中配置过滤器。每个项目中都配置了这个过滤器,具体可以直接打开

    jpivot学习总结.doc

    对于一个 Hierarchy 来说,有两种方式为其指定:一种是直接通过一个 Table 标签指定;一种是通过 Join 将若干张表连接起来指定。一旦采用 Join 的话,那么就要在 Hierarchy 里的 primaryKeyTable 属性指定主表。 ...

Global site tag (gtag.js) - Google Analytics