`
xinklabi
  • 浏览: 1591581 次
  • 性别: Icon_minigender_1
  • 来自: 吉林
文章分类
社区版块
存档分类
最新评论

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

    博客分类:
  • Java
 
阅读更多

背景:今天做IMIX共享平台提交表单时,以GET方式提交表单会在提交数据库之前就出现乱码(form是我自己写的,若是用struts的标签的话就不会有问题,因为struts提供的表单默认提交方式是POST),而改成POST方式就不会出现这个问题,Spring的CharaterEncodingFilter配过了,后来在网上查才知道GET和POST编码解决方法不一样。附件中有详细的乱码解决方案。

 

这里有个哥们跟我遇到了类似的问题:

组合查询功能,原先使用<html:form>缺省是以POST方式提交的,增加了分页功能后,由于要在URL里记住用户提交的查询内容(例如:http://localhost:8080/aims/client/filter.do?name=%E5%BC%A0&address=%E5%8C%97%E4%BA%AC&title=&duty=&departmentCode=10000001&categoryCode=10000002&fieldCode=10000006&genderCode=&identityCode =),所以表单的提交方式要改为GET。

只是简单的改为method="GET",但这样一改却让action无法得到正确的输入值,例如用户在姓名条件里输入“张”,在action里用 theForm.getName()会得到形如“%A4”的乱码,不仅查询结果是错误的,而且在重新显示的查询表单的姓名栏里也显示出乱码。

我试了很多种转码也没转成原来的值,问了很多朋友,最后的解决方式还是通过转换编码,是把ISO8859-1转为UTF-8,即String name=new String(theForm.getName().getBytes("ISO8859-1"),"UTF-8");,注意我的应用程序里已使用了 encoding为UTF-8的Filter。

虽然要加手工转码的代码很不爽,但只在这一处而已,也不碍大事。只是我现在的环境是Tomcat+Mysql,不知道换到其他服务器上会不会重新出现乱码问题,好在这个项目不需要考虑这个问题。

据说Tomcat处理POST和GET的请求时处理编码的方式不太一样,我还看到有篇帖子说要在server.xml的<Connector>里加URIEncoding="GBK"属性,但我试了不起丝毫作用。

 

引用自:http://3930416.blog.51cto.com/3920416/713253

1,jsp表单提交到servlet默认为get提交;

2,get表单提交乱码处理最常见的是在tomcat服务器下把server.xml里面的8080端口后面加上URIEncoding="UTF-8",第二种方法是在后台得到get提交的参数后使用

String param=new String(request.getParameter("参数名").getBytes("iso-8859-1"),"UTF-8");

3,post表单提交乱码处理则为在后台使用方法request.setCharacterEncoding("UTF-8");即可。

4。超链接为GET提交,超链接提交出现乱码没有表单提交处理乱码哪么简单,要处理超链接提交,首先在server.xml里面增加 UTIEnding="UTF-8"是必须的,然后若超链接中传递的参数为偶数个中文汉字,刚不须再处理乱码,若为奇数则用方法encodeURI('site.action?name=中文乱码');但是这样处理乱码有点麻烦为了解决不管参数的奇偶性也能处理乱码 个 可以采用C标签:

<c:url value="login/login!login.action" var="url">
       <c:param name="name" value="中文乱码s"></c:param>
    </c:url>
    <a href="${url}">提交</a>

5,jsp表单提交到action默认为post提交;POST提交不须再处理乱码因为struts已经在过滤器里面帮你把乱码处理了

6,ajax POST和GET提交乱码处理

在AJAX提交中要把参数和URL分离开来处理

var xmlHttp;
//自动加载国家
function country() {
    var text = "sql=SELECT co_name FROM COUNTRY order by nvl(length(trim(co_name)),0) asc,co_name";
    var url = "ajax/ajax!selectName.action";
    createXmlhttp();
    if (xmlHttp) {
        xmlHttp.open("POST", url, true);
        xmlHttp.setRequestHeader("Cache-Control", "no-cache");
        xmlHttp.setRequestHeader("Content-Type",
                "application/x-www-form-urlencoded");
        xmlHttp.onreadystatechange = function() {
            if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
                parseMessage('country');
            }
        }
        xmlHttp.send(text);
    }
}

其中 xmlHttp.setRequestHeader("Cache-Control", "no-cache");
        xmlHttp.setRequestHeader("Content-Type",
                "application/x-www-form-urlencoded");这个要加上

action中:HttpServletResponse response= ServletActionContext.getResponse();
        response.setContentType("html/xml;charset=gb2312");
        response.setCharacterEncoding("UTF-8");

分享到:
评论

相关推荐

    超强过滤器彻底解决JSP-SERVLET中文参数GET-POST传递的问题(转)

    当JSP页面中的表单提交含有中文字符的数据时,GET请求将这些数据附加到URL后面,而POST请求则将数据放在请求体中。浏览器和服务器之间可能存在不同的字符编码标准,如UTF-8、GBK等,如果不一致,就可能导致乱码。...

    J2EE经典教程

    - 重写`doGet()`和`doPost()`方法处理GET和POST请求。 - 在`web.xml`中配置Servlet。 ##### 4.6 Servlet处理客户端请求实现用户注册 - 设计表单界面收集用户输入。 - 通过POST方法提交表单数据。 - 在Servlet中处理...

    解决JSP页面中文乱码问题

    特别是在接收表单提交的数据或者显示数据库查询结果时,中文字符可能会出现乱码的情况。这对于初学者来说可能是一个比较棘手的问题。 #### 二、基本原理 要解决JSP页面中文乱码问题,我们需要理解以下几个关键点:...

    从J2SE到J2EE知识点介绍

    理解form表单的`action`属性以及GET和POST提交方式的区别。 3. **JSP内置对象**:request、response、session和out对象是JSP编程中常用的对象,用于处理请求、响应、会话和输出。 4. **JSP中文乱码问题**:解决在...

    jsp 入门笔记1

    当一个用户向服务器发送请求时,无论是通过GET还是POST方式,`request`对象都会捕获这些信息,并提供一系列方法来访问请求的数据。 - **`getParameter()`方法详解:** `getParameter()`方法是`HttpServletRequest...

    动态网页(JSP+Servlet)教程

    - **GET 和 POST 方法的区别** - **GET**: 通常用于获取数据,数据附在 URL 后面,对数据长度有限制。 - **POST**: 用于发送数据,数据放在请求体中,没有长度限制。 **3.3 Servlet简介和优点** - **Servlet 的...

    jsp文档 jsp资料 jsp重要知识点

    - GET/POST乱码:GET方式修改`server.xml`的`URIEncoding`,POST方式使用`request.setCharacterEncoding("GBK")`。 - URL参数包含中文:同样使用`request.setCharacterEncoding("GBK")`。 7. **Cookie与Session的...

    java/jsp面试红宝书

    - GET方式乱码,可在服务器端设置请求编码,如:`request.setCharacterEncoding("GBK")`。 - POST方式乱码,同样需在接收参数前设置编码。 - URL包含中文参数,需在JSP页面中设置请求编码。 7. **Cookie与...

    Java方向企业笔试题

    2. ServletRequest接口的使用:getParameter方法用于获取请求参数,无论是GET还是POST请求,都能使用此方法。如果一个参数key有多个值,getParameter(key)只会返回第一个值,而getParameterValues(key)会返回一个...

    中科软JAVA面试题

    【表单GET与POST】 GET将数据附在URL后面,适合少量数据且不敏感的场景;POST将数据放在请求体中,适合大量或敏感数据。 【String常用函数】 如substring(), length(), equals(), concat(), toUpperCase()等。 ...

    java面试题题库详解

    - **表单提交:** 如何通过 GET 和 POST 方式提交表单数据。 #### 36. errorPage 属性与应用范围 **知识点概述:** - **errorPage:** 指定错误页面,用于处理特定错误码。 - **异常处理:** 如何配置异常处理页面...

    servlet知识点集锦

    然后,服务器会根据请求的方式(GET或POST等)调用相应的方法(如`doGet()`或`doPost()`)来处理请求。 4. 最后,服务器将处理结果返回给客户端。 - **重要方法介绍**: - `init()`:初始化方法,仅在第一次加载...

Global site tag (gtag.js) - Google Analytics