jsp各種亂碼問題解決方案

來源:互聯網
上載者:User

類型1、瀏覽器開啟一個jsp頁面時,頁面中的中文出現亂碼
    有很多IDE預設的jsp檔案是iso-8859-1編碼,它對中文不能識別,用<%@ pageEncoding="utf-8"%>或者"gb2312"、"gbk"都可解決這個問題,至於他們具體有什麼區別,這裡就不多講了,搜百度就可以了,這裡只講方法。

類型2、瀏覽器調用一個servlet時,頁面中出現中文亂碼
    比如該servlet的一個方法是:
    public void doPost(HttpServletRequest request,HttpServletResponse response)
           throws ServletException,IOException
    {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("<html>");
        out.println("<head><title>this is a servlet</title></head>");
        out.println("<body>");
        out.println("我不帥");
        out.println("</body>");
        out.println("<html>");
        out.close();
    }
    當瀏覽器調用該servlet時,"我不帥"出現亂碼,這時把response.setContentType("test/html")改成response.setContentType("text/html;charset=gb2312")即可解決。

類型3、對於post方法提交到另一個jsp或servlet處理並顯示提交內容資訊,出現文亂碼
    比如有個jsp檔案my.jsp核心代碼如下:
    <body>
        <form  method="post" action="display.jsp">
        <input type="text" name="username">
        <input type="submit" value="提交">
        </form>
    </body>
   
    display.jsp的核心代碼如下:
    <body>
        The user'name is:<%=request.getParameter("username")>
    </body>

    用瀏覽器開啟my.jsp,在文字框中輸入"錕哥哥",點擊提交按鈕,把它交給display.jsp處理,這時"錕哥哥"就亂碼了。解決方案是在display.jsp代碼第一行加一句:<%request.setCharacterEncoding("gb2312"); %>
    一般像request請求類的中文亂碼問題都用過濾器來解決,也就是用一個servlet來過濾提交時出現的亂碼問題。比如這個過濾器為EncodingFilter.java,代碼如下:
    package ...自擬
    import ...自擬

    public class EncodingFilter implements Filter
    {
        private FilterConfig config;
        private String encoding="ISO8859-1";

        public void init(FilterConfig config) throws ServletException
        {
              this.config=config;
              String s=config.getInitParameter("encoding");
              if(s!=null)
              {
                        encoding=s;
              }
        }
        public void doFilter(ServletRequest request,ServletResponse response,FitlerChain chain) throws IOException,ServletException
        {
               request.setCharacterEncoding(encoding);
               chain.doFilter(request,response);
        }
        public void destroy()
        {
               config=null;
        }
     }
     該過濾器對應的web.xml配置如下:
     <filter>
     <fitler-name>EncodingFilter</filter-name>
     <filter-class>...自擬,為該類在工程名中的路徑所在,比如package1.package2.EncodingFilter</filter-class>
     <init-param>
        <param-name>encoding</param-name>   //與代碼中config.getInitParameter("encoding")中的encoding對應
        <param-value>gb2312</param-value>
     </init-param>
     </filter>

     <filter-mapping>
     <fitler-name>EncodingFilter</fitler-name>
     <url-pattern>/*</url-pattern>    //表示凡是在該項目下只要有request的中文提交都會把提交資訊過濾
     </filter-mapping>

類型4、對於get提交表單即改寫uri時出現的亂碼問題
    前面提到了對於post方法的處理,但對於get方法,解決方案不能通過修改jsp或者servlet解決,這是只能修改伺服器設定檔了。下面說一下這種get方法的中文亂碼的表現形式:
    與前面那個例子相似,比如有個jsp檔案my.jsp核心代碼如下:
    <body>
        <form  method="get" action="display.jsp">
        <input type="text" name="username">
        <input type="submit" value="提交">
        </form>
    </body>
   
    display.jsp的核心代碼如下:
    <body>
        The user'name is:<%=request.getParameter("username")>
    </body>
    當我們通過瀏覽器的網域名稱地址輸入:http://localhost:8080/工程名/display.jsp?username=錕哥哥。此時display.jsp頁面中顯示的"錕哥哥"為亂碼。
    當我們通過表單以get方法提交時,若在my.jsp中輸入"錕哥哥",提交給display.jsp後,頁面顯示的"錕哥哥"為亂碼,而網域名稱地址顯示的"錕哥哥"也為亂碼。

    若遇到get類型的亂碼問題時,不能像處理post類型那樣,比如在display.jsp代碼第一行加入<%request.setCharacterEncoding("gb2312"); %>,這是沒有作用的。此時,得修改%tomcat_home%/conf/server.xml的配置資訊,在<Connector port="8080" protocol="HTTP/1.1" maxThreads="100" connectionTimeout="10000" redirectPort="8443" />中加入一條URIEncoding="gb2312",然後重啟tomcat,這樣get類型的亂碼問題就解決了。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.