今天写一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服务器。