Arvin-Z

今天写一jsp文件,将文本域中输入的信息存储到数据库中,结果再在页面上显示出来的时候发现,中文部分全变成了乱码,然后去看数据库,发现存入数据库的信息也是乱码,这说明乱码是form表单提交的过程中产生的。

现在模拟一下出现乱码的情况

代码1:

 1 <%@ page language="java" contentType="text/html; charset=gbk"
 2     pageEncoding="gbk"%>
 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 4 <html>
 5 <head>
 6 <meta http-equiv="Content-Type" content="text/html; charset=gbk">
 7 <title></title>
 8 </head>
 9 <body>
10 <form action="response.jsp" method="get">
11 <table border="0" cellpadding="0" cellspacing="2">
12     <tr>
13         <td>
14             <textarea rows="10" cols="40" name="text"></textarea>
15         </td>
16     </tr>
17     <tr>
18         <td><input type="submit" value="提交" /></td>
19     </tr>
20 </table>
21 </form>
22 </body>
23 </html>

 

代码2:

 1 <%@ page language="java" contentType="text/html; charset=gbk"
 2     pageEncoding="gbk"%>
 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 4 <html>
 5 <head>
 6 <meta http-equiv="Content-Type" content="text/html; charset=gbk">
 7 <title>Insert title here</title>
 8 </head>
 9 <body>
10 返回结果:<br/>
11 <%=request.getParameter("text") %>
12 </body>
13 </html>

输入内容,提交

 

返回结果

 

这是因为虽然设定将文件编码格式改成了简体中文(gbk),但是通过form表单提交时的数据仍然是按照jsp原本默认的编码

为了解决这个问题,就需要在响应页面加上一句

<% request.setCharacterEncoding("gbk"); %>

将得到的表单信息转码成你需要的编码格式(这里是gbk)

但是当我再测试的时候,仍然是返回

 

原来是因为用这种方式解决乱码问题只对method="post"有效,所以还要将代码1中的method="get" 改成method="post"最后改完的结果便能正常返回

总结:

1、如果通过form表单传递中文参数,在响应请求的页面应该首先用request.setCharacterEncoding("gbk"); 进行转码;

2、request.setCharacterEncoding("gbk"); 只对doPost()方法有效;

3、如果是要解决doGet()方法的乱码问题,应该要找到Tomcat目录下面server.xml中的这句

<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443""/>,在其中加入URIEncoding="GBK",即修改后为<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="GBK"/>,然后重启Tomcat服务器。

分类:

技术点:

相关文章: