文章目录

1 实验目的

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

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 编写下面的encode1.jsp。

<%@ page language="java" import="java.util.*" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>URL传递参数编码测试</title>
  </head>
  <%
     String param=request.getParameter("param");
   %>
  <body>
    <a href="encode1.jsp?param='中国'">请单击链接</a><br>
       提交的中文参数为:<%=param %>
  </body>
</html>

3.1.2 访问

在浏览器地址栏输入:http://localhost:8080/prac02_encode/encode1.jsp
如图3-1所示。

图3-1
单击链接,结果如图3-2所示。

图3-2
出现乱码。

3.1.3 修改Tomcat配置文件

修改Tomcat的config目录下的server.xml,添加URIEncoding=“UTF-8”,修改后的代码如下:

重启Tomcat服务器,重新运行程序,结果如图3-3所示。

图3-3

3.2 解决表单提交中文乱码问题

3.2.1 编写encode2.jsp


<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>form中文处理示例</title>
  </head>
  <body>
      <font size="2">
       下面是表单提交内容:
       <form action="encode2.jsp" method="post">
          	用户名:<input type="text" name="userName" size="10"/>
          	密码:<input type="password" name="password" size="10"/>
            <input type="submit" value="提交">
       </form>
      </font><br/>
      <font size="2">下面是表单提交以后用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>");
           }
         %>
      </font>
  </body>
</html>

3.2.2 访问

在浏览器地址栏输入:http://localhost:8080/prac02_encode/encode2.jsp

如图3-4所示。

图3-4

输入表单内容,然后单击提交,弹出如图3-5所示界面,出现乱码情况。

图3-5

3.2.3 添加语句

在代码encode2.jsp的body域的前部增加语句,令其指定按UTF-8编码从request对象中取参数。

	<% request.setCharacterEncoding("UTF-8") %>

4 思考题

  1. 理解URL传递参数中文乱码问题解决方法。
  2. 理解表单乱码问题的解决方法。
10-03 14:00