JavaEE(2)——JSP乱码问题

版权声明:[email protected] https://blog.csdn.net/zhaoxuyang1997/article/details/82931445

1 实验目的

  • 了解JSP页面乱码问题;
  • 掌握URL传递参数乱码问题解决方法;
  • 掌握表单参数乱码问题解决方法;

2 实验原理

JSP程序通过URL链接传递参数时,但参数中有中文会出现乱码。解决方法如下:

  1. 将获取的参数二次编码。先将参数按ISO8859-1编码转换为字节数组,再将字节数组按UTF-8重新生成字符串:
String param = new String((request.getParameter("param")).getBytes("iso8859-1"),"UTF-8");
  1. 修改Tomcat服务器的配置文件。修改 Tomcat 的 config 目录下的 server.xml 文件,在原来的代码中添加URI编码设置URIEncoding="UTF-8",重启Tomcat服务器即可,修改后的代码如下:
<Connector port="8080" protocol="HTTP/1.1" URIEncoding="UTF-8"
               connectionTimeout="20000"
               redirectPort="8443" />
  1. 在页面接收参数前设置请求的编码。在调用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
图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乱码
图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无乱码
图3 - encodeForm.jsp无乱码


4 思考题

  • 理解URL传递参数中文乱码问题解决方法。
  • 理解表单乱码问题的解决方法。

猜你喜欢

转载自blog.csdn.net/zhaoxuyang1997/article/details/82931445
今日推荐