zoukankan      html  css  js  c++  java
  • Tomcat JSP提交参数中文乱码问题解决

    参考:

    http://blog.csdn.net/error_case/article/details/8250209

    中文乱码是个老生常谈的问题,一般情况下,只要保证页面,web服务器,数据库的编码一致,很少出现中文乱码,不过最近项目中碰到了一个以前没在意过的问题,就是post提交和get提交的中文乱码处理方式不一样的问题,具体情况是这样的:为了方便,我将tomcat服务器的编码方式设置为utf-8,设置方法如下:

    在tomcat的server.xml的
    <Connector port="8080" protocol="HTTP/1.1"?
    connectionTimeout="20000"?
    redirectPort="8443"/>
    节点中,加上useBodyEncodingForURI="true"这个属性,这属性的默认值 是false,另外也可以在那个节点中加上URIEncoding="UTF-8"属性。

    设置后,重启tomcat,发现get方式提交的数据没中文乱码,但post提交的数据依旧存在中文乱码,通过在网上搜索一看,这样的设置只能处理get请求方式的中文乱码,不能处理post请求方式的,原因应该是get方式是将参数拼接在url中的,而post方式是将参数写在http协议的body中的;post还乱码,我在java代码中转码看了下,转码后正常,转码代码:

    String a = new String(request.getParameter("a").getBytes("ISO8859_1"),"UTF-8");

    从这可以看出来,tomcat服务器还是以默认编码方式提交了请求,为了改变请求提交编码方式,就需要设置request.setCharacterEncoding("UTF-8");,设置后测试,没中文乱码了,不过如果在开发中每个jsp页面这样写的话,也不太和谐,为了方便,可以制作一个filter,在处理请求前,对所有的request都设置它的编码为需要的编码方式,这样就不用在每次处理的时候来设置编码了。

    -----------------------------------

    hl add 20140107 很多框架都提供了类似的filter ,比如spirngmvc

    <filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    ---------------------

    hl add 20140108 ajax, json通过post方式走filter没问题,但是如果通过get方式会出现乱码

    解决方案:jsp页面拼装的时候通过encodeURI转码,java接收的时候也通过URLDecoder.decode转码

    js:

    var age = encodeURI($(“age”).attr(“value));

    var userName = encodeURI($(“userName”).attr(“value));

    var user = {userName: userName, age: age};

    $.ajax({

     url:’’;

    type: “get”,

    data: user

    })

     

    java:

    String userName = URIDecoder.decode(user.userName);

    -----------------------------------------------------------------------------------------

     

    测试结果:

    增加URIEncoding="UTF-8"属性不行,修改成URIEncoding="GBK"就可以了,不知何故。

  • 相关阅读:
    从一个集合中查找最大最小的N个元素——Python heapq 堆数据结构
    算法导论第二章小试牛刀
    python网络编程初级
    python基础的几个小练习题
    LeetCode:114_Flatten Binary Tree to Linked List | 将一棵二叉树变成链表的形式 | Medium
    LeetCode:111_Minimum Depth of Binary Tree | 二叉树的最小深度 | Easy
    LeetCode:110_Balanced Binary Tree | 平衡二叉树 | Easy
    LeetCode: 106_Construct Binary Tree from Inorder and Postorder Traversal | 根据中序和后序遍历构建二叉树 | Medium
    mysql中json_object函数的使用?
    mysql中json_remove函数的使用?
  • 原文地址:https://www.cnblogs.com/barryhong/p/3115303.html
Copyright © 2011-2022 走看看