版权声明:[email protected] https://blog.csdn.net/zhaoxuyang1997/article/details/82931445
文章目录
1 实验目的
- 了解JSP页面乱码问题;
- 掌握URL传递参数乱码问题解决方法;
- 掌握表单参数乱码问题解决方法;
2 实验原理
JSP程序通过URL链接传递参数时,但参数中有中文会出现乱码。解决方法如下:
- 将获取的参数二次编码。先将参数按ISO8859-1编码转换为字节数组,再将字节数组按UTF-8重新生成字符串:
String param = new String((request.getParameter("param")).getBytes("iso8859-1"),"UTF-8");
- 修改Tomcat服务器的配置文件。修改 Tomcat 的 config 目录下的
server.xml
文件,在原来的代码中添加URI编码设置URIEncoding="UTF-8"
,重启Tomcat服务器即可,修改后的代码如下:
<Connector port="8080" protocol="HTTP/1.1" URIEncoding="UTF-8"
connectionTimeout="20000"
redirectPort="8443" />
- 在页面接收参数前设置请求的编码。在调用
request.getParameter("param");
之前,按指定的编码(如UTF-8)从request对象中获取参数,添加语句:
<%
request.setCharacterEncoding("UTF-8");
%>
3 实验内容与步骤
3.1 解决URL传递参数中文乱码问题
3.1.1 编写encodeUrl.jsp。
%WEBROOT%/jsp/exp02/content01/encodeUrl.jsp
的内容如下:
<%--
Document : encodeUrl
Created on : 2018-10-3, 19:09:20
Author : zhaoxuyang
--%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%
String param = request.getParameter("param");
%>
<!DOCTYPE html>
<html>
<head>
<title>URL传递参数编码测试</title>
</head>
<body>
<a href="?param='中国'">请单击链接</a><br>
提交的中文参数为:<%=param%>
</body>
</html>
3.1.2 修改Tomcat配置文件
修改Tomcat的config目录下的server.xml
,添加URIEncoding="UTF-8"
。
%TomcatRoot%/config/server.xml
中修改的内容如下:
<Connector port="8080" protocol="HTTP/1.1" URIEncoding="UTF-8"
connectionTimeout="20000"
redirectPort="8443" />
重启Tomcat服务器,重新运行程序。
3.1.3 测试运行
在浏览器地址栏输入以下URL访问之,如 图1
所示:
http://localhost:8081/Study/jsp/exp02/content01/encodeUrl.jsp?param='中国'
图1 - encodeUrl.jsp
3.2 解决表单提交中文乱码问题
3.2.1 编写encodeForm.jsp
%WEBROOT%/jsp/exp02/content02/encodeForm.jsp
的内容如下:
<%--
Document : encodeForm
Created on : 2018-10-3, 19:19:58
Author : zhaoxuyang
--%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>form中文处理示例</title>
</head>
<body>
下面是表单提交内容:
<form action="" method="post">
用户名:<input type="text" name="userName" size="10"/>
密码:<input type="password" name="password" size="10"/>
<input type="submit" value="提交">
</form>
<hr />
下面是表单提交以后用request取到的表单数据:<br>
<%
String userName = request.getParameter("userName");
String password = request.getParameter("password");
if (null != userName) {
out.println("表单提交的userName的值=" + userName + "<br>");
out.println("表单提交的password的值=" + password + "<br>");
}
%>
</body>
</html>
3.2.2 测试运行-乱码
图2 - encodeForm.jsp乱码
3.2.3 对请求设置编码
在%WEBROOT%/jsp/exp02/content02/encodeForm.jsp
的<body>
前增加语句,令其指定按UTF-8编码从request对象中取参数。
<%
request.setCharacterEncoding("utf-8");//添加的语句
%>
3.2.4 测试运行-无乱码
图3 - encodeForm.jsp无乱码
4 思考题
- 理解URL传递参数中文乱码问题解决方法。
- 理解表单乱码问题的解决方法。