1. 程式人生 > >JavaEE(2)——JSP亂碼問題

JavaEE(2)——JSP亂碼問題

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 訪問

圖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 訪問

如圖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. 理解表單亂碼問題的解決方法。