1. 程式人生 > >JSP頁面超連結跳轉到Servlet後中文亂碼解決

JSP頁面超連結跳轉到Servlet後中文亂碼解決

因為涉及到專案的一個功能,我們使用到了超連結a標籤作為分頁符,進行模糊查詢功能,在使用過程中,使用form表單post提交中文資料進入servle介面,第一次使用中文查詢沒有問題,但是在按動分頁符時,發現無法將中文資料再次傳入後臺,所以簡單使用在位址列尾部增加值的方式,然後直接跳轉到Servlet介面,因為超連結預設使用GET方法跳轉,三件套對POST提交有作用,對GET提交是沒有影響,所以Servlet在接受位址列傳下來的中文值時出現了接收到亂碼的情況;

三件套:

response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");

我又在jsp頁面標籤值處改用URLEncoder.encode((request.getAttribute("name")+""), "utf-8")的辦法,有了一點效果,傳進來的值不是亂碼了,而是一個問號?,瀏覽器預設跳轉使用的編碼為ISO-8859-1,而不是utf-8,所以在這裡使用到這個方法,但是問題還是沒有解決,檢視相關資料發現最快的捷徑就是修改Tomcat的server.xml的配置,因為相關資料較少,怎麼修改,在哪裡修改,修改什麼,網上資料較少,所以在這裡分享一下,預設在conf目錄下,只需要在Connector標籤下新增兩行程式碼URIEncoding="UTF-8" 以及  useBodyEncodingForURI="true"

即可,這兩句程式碼將以GET提交的編碼預設修改成為UTF-8

 <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443"
               URIEncoding="UTF-8"
        useBodyEncodingForURI="true"/
>
    <!-- A "Connector" using the shared thread pool-->
    <!--
    <Connector executor="tomcatThreadPool"
               port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />