当前位置: 代码迷 >> JavaScript >> Jsp表单提交数据乱码有关问题
  详细解决方案

Jsp表单提交数据乱码有关问题

热度:335   发布时间:2012-10-18 13:46:56.0
Jsp表单提交数据乱码问题

????????????? Jsp表单提交数据出现乱码

????????这个问提真的就纠结了好多天。太复杂了。说是涉及到到jsp文件的存储格式,又有解码格式,还有浏览器的解码格式。

???? 1. 网上说了很多方法,我觉得更改server.xml文件这个方法应该相对来说是比较简单的,改了之后就一劳永逸了。所以就将

???? <Connector port="80" protocol="HTTP/1.1"

???????????? maxThreads="150" minSpareThreads="25" maxSpareThreads="75"?

??????????? enableLookups="false"

?????????????? connectionTimeout="20000"

?????????????? redirectPort="8443" URIEncoding="gbk"/>?

??? ?改成

?? <Connector port="8080" maxHttpHeaderSize="8192"?

?????????? maxThreads="150" minSpareThreads="25" maxSpareThreads="75"?

??????????? enableLookups="false" redirectPort="8443" acceptCount="100"?

?????????? connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="gbk">?

????? 我试过,不行。开始以为是自己那个单词写错了,后来就把网上的这段copy过来。还是不行。后来小甘说,她就是这么做的,完全行得通。我就无语了,难道还是概率事件,重启试过很多次还是不行。又说可以在上面加上useBodyEncodingForURI=”true” ,但还是不行。现在也不知道是什么原因。为什么很多人都说是可以的???

?

?

????? 2. 没办法得尝试其他方法。在servlet 类中,对提交的数据先做以下处理。

??? request.setCharacterEncoding("gbk");

??? ?? ?response.setCharacterEncoding("gbk");

??????? 这样可以正确显示中文了。但是这个方法也比较麻烦,每个servlet类里面都要写。但是奇怪的是我又用新建的jsp页面时,这个方法又行不通了。我甚至将页面提交到前面行得通的servelt类,也不行。但第一次的jsp页面却可以。仔细看才知道,这两个jsp页面提交的方式不一样,前面是我自己设置的post方法,而第二个我并没有设置提交方式,是默认的get方法

???? 难道postget在提交的时候不只是地址栏和提交数据量的区别?后来搜这两个在提交时候的区别。tomcatpostget的处理方法不一样,他们两个在传参的时候,编码不一样。Tomcat的内部编码格式是iso-8856-1,tomcatget的缺省编码方式是iso-8859-1,get提交方式不再进行其他的编码,所以接收页面通过请求对象的getParameter()得到的字符串是以iso-8859-1转换来的,故中文会出现乱码。所以用上面的转换方法不能还原得到中文。? post提交方式是经过页面设置的编码格式编码的,不存在特殊字符传错问题。我试过用上述方法是可以的。对于get提交方法,在接收页面对获取提交的数据做处理之前,还要做以下处理

????????

???? String usename=request.getParameter("uName");

???? byte bytes[]=usename.getBytes("iso-8859-1");

???? String? username=new String(bytes,"gb2312");

?

?

也可以解决乱码问题,但这个方法就更加的麻烦了,对每一个提交的数据都要做这么复杂的转换。网上很多人说可以使用过滤器,按照方法做了,不过也是对post提交方式可以,对get提交方法也还是不行。而且我不知道这个过滤器是怎么运行的,觉得很奇怪啊,我又没有调用它。

?????

???? ?所以总的来说,post比get提交方式好多了,又方便使用,又安全,又没有数据量的限制。

???

???? 3.对于这个方法,在preferences中修改

? window--preferences--general--workspace--other--UTF-8

? JSP页面右击--preferences--javascript--enconding--UTF-8

?

? 我试了,jsp页面提交的中文,servlet确实可以收到,也能将数据库中的信息显示出来。但有一个问题,就是我的eclipse中编辑区的所有中文都乱码了,连控制台的中文也都是乱码,包括其他java工程也都是这样,吓得我又重新设置回来。这是为什么,是因为我之前的文件保存的编码格式的问题吗??

?

?

?? 4. 几条指令的认识

?? <%@ page language="java" ?pageEncoding="gbk"%>

这是表示jsp的文件的存储格式。

?? <%@ page contentType="text/html; charset=gbk"%>

?? 这是表示解码格式,所以这两个必须保持一致,否则会出现乱码。如果第二条没有,缺省是使用iso8859-1的编码格式。

?? 两个指令的区别

?? <%@ page language="java" contentType="text/html; charset=gbk"

pageEncoding="gbk"%>是在jsp被编译为html的过程中提供编码方式,让java读取表达式当中的String

?

??? <meta http-equiv="Content-Type" content="text/html; charset=gbk">? 的作用是为IE浏览器提供编码选择,是用来“显示”最后的数据的。

?

????

  相关解决方案