最近發現一個問題,訪問servlet,在其中使用重定向帶中文參數跳轉頁面,發現地址欄取不到參數為中文的情況,糾結一小會,下面講講亂碼原因:對於URL地址欄里面的內容一般都是ISO-8859-1編碼的,所以呢,我們如果使用重定向,那么就是重新修改地址欄里面的內容(URL),那么這是如果我們要在URl中加入中文參數,必須將中文以ISO-8859-1的編碼,然后才可以顯示在地址欄上,不然就會實現中文找不到的情況或者地址欄中文亂碼,不羅嗦看代碼,大家就會明白。
下面貼我的代碼了,不明白可以交流:
在WebRoot下面新建兩個jsp文件:
(1)index.jsp
(2)success.jsp
在src下面新建一個servlet文件夾,里面創建一個servlet,名字為:UserSerlvet.java
下面繼續貼代碼咯:
(1)index.jsp代碼:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> </head> <body> <a href="servlet/UserSerlvet?name=張三的零食">訪問</a> </body> </html>
(2)success.jsp代碼:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <body> <%=new String(request.getParameter("name").getBytes("ISO-8859-1"),"utf-8") %> </body> </html>
(3)web.xml代碼:
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <display-name></display-name> <servlet> <servlet-name>UserSerlvet</servlet-name> <servlet-class>servlet.UserSerlvet</servlet-class> </servlet> <servlet-mapping> <servlet-name>UserSerlvet</servlet-name> <url-pattern>/servlet/UserSerlvet</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
(4)src/servlet中的UserSerlvet.java代碼:
package servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class UserSerlvet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /** * 注意,瀏覽器Get請求中的url只能是ISO-8859-1編碼,如果 * 要在url后面帶參,必須將數據轉為ISO-8859-1編碼才可以實現URL后面帶 * 中文參數。到頁面一定要記得將ISO-8859-1轉為UTF-8顯示中文。 */ //方式一:在程序中,默認編碼為utf8或者GBK,一般為utf8,這時的中文要作為參數實現重定向傳遞,一定要轉ISO-8859-1才可以傳成功! //String name = new String("張三的零食".getBytes("utf-8"),"iso-8859-1"); //方式二:從頁面獲得ISO-8859-1編碼,不需要轉碼,直接重定向到頁面即可,到頁面在以UTF-8解碼 String name = request.getParameter("name"); System.out.println(name);//控制台是亂碼,此時它是ISO-8859-1,所以顯示必然亂碼 response.sendRedirect("../success.jsp?name="+name); } }
以上就是全部代碼了,可以直接復制,進行測試,有問題一起交流。
此文小編自測通過,放心測試吧!!