重定向帶中文參數跳頁面顯示中文示例代碼

最近發現一個問題,訪問servlet,在其中使用重定向帶中文參數跳轉頁面,發現地址欄取不到參數爲中文的狀況,糾結一小會,下面講講亂碼緣由:對於URL地址欄裏面的內容通常都是ISO-8859-1編碼的,因此呢,咱們若是使用重定向,那麼就是從新修改地址欄裏面的內容(URL),那麼這是若是咱們要在URl中加入中文參數,必須將中文以ISO-8859-1的編碼,而後才能夠顯示在地址欄上,否則就會實現中文找不到的狀況或者地址欄中文亂碼,不羅嗦看代碼,你們就會明白。html

下面貼個人代碼了,不明白能夠交流:java

在WebRoot下面新建兩個jsp文件:web

(1)index.jsp瀏覽器

(2)success.jspapp

在src下面新建一個servlet文件夾,裏面建立一個servlet,名字爲:UserSerlvet.javajsp

下面繼續貼代碼咯:測試

(1)index.jsp代碼:ui

<%@ 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代碼:url

<?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);
        
    }

}

以上就是所有代碼了,能夠直接複製,進行測試,有問題一塊兒交流。

此文小編自測經過,放心測試吧!!

相關文章
相關標籤/搜索