国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

servlet 解決亂碼問題

2019-11-26 15:13:39
字體:
來源:轉載
供稿:網友

  對于servlet大家應該都很熟悉了,今天再復習一下,如果有哪里寫的不好或不對的地點希望廣大的網友批評指正。今天只討論get和post兩w種方式,他們之間有很多的不同點,所以解決編碼的方式也會不一樣,post的亂碼問題好解決一點,下面先簡單說下http協議,以便我能更好的記憶原理性的東西和他們之間的不同點。

get方式和post方式都是基于http協議的,它的目的是為了提供一種發布和接收html頁面的方法,由客戶端發起請求,服務器端進行響應。

  一個完整的請求消息包括:一個請求行,若干消息頭和請求實體內容

    請求行包括請求方式(get或post), 資源路徑(要訪問的地址),http版本號(http1.1)

    若干消息頭(比如包涵了瀏覽器的內核信息(user-agent),打開它的父頁面是誰(refer)等

    在請求實體內容和消息頭中有一行空行,將消息頭和請求實體內容分開,實體內容有用戶提交的

  一個完整的響應消息包括:狀態行,一個或多個應答頭,一個空行,響應實體

    狀態行:包括http協議版本號,狀態碼和原因敘述

    常見狀態碼:200 正常

          404:請求資源不存在

          500:服務器內部錯誤    

    粗略說完http后可以介紹get和post方式的不同之處了

get方式:

  get方式是將提交的內容放到url的后面,長度有所限制,post和get都是基于http協議的,get方式是放到了請求行里,因為它的參數是在url中的,而post方式是放到請求實體內容里的,post方式相對安全,瀏覽器不保留緩存信息,而get方式會wk保留緩存,可以從瀏覽器的歷史記錄里查看提交的內容,并且get方式長度有限制,而post沒有。

  正是因為get方式和post方式提交數據時在http協議的位置不同,解決他們的編碼方式也會不同

  post方式亂碼問題解決:

    在servlet的service方法(doGet或doPost方法也可以)中,將request的編碼設置為UTF-8

  

req.setCharacterEncoding("UTF-8");

  這樣,request的編碼就沒有問題了,然后將response的編碼也設置為UTF-8;

resp.setCharacterEncoding("UTF-8");

  這樣,response的編碼也沒有問題了,但是這樣寫了以后到瀏覽器還是可能會出問題的,因為瀏覽器不知道你的編碼格式是什么,所以就按著瀏覽器的默認格式來顯示,所以要把瀏覽器進行顯示時的編碼方式也要設置為UTF-8,語句如下:

resp.setContextType("text/html;charset=utf-8");

  同時還要保證你的開發工具編碼和項目的編碼一致,不然可能會出現亂碼問題,這里都是以UTF-8為例

  get方式亂碼問題解決:

    get方式除了上面的操作外還要在tomcat的conf目錄下的server.xml配置文件里面加上一句話,找到下面這句話,

   

 <Connector port="8080" protocol="HTTP/1.1"        connectionTimeout="20000"        redirectPort="8443" />

  修改后為

 <Connector port="8080" protocol="HTTP/1.1"        connectionTimeout="20000"        redirectPort="8443" userBodyEncodingForURI="true" />

  這種改法比較靈活,讓URL的編碼格式跟著頁面的編碼格式一樣,也可以設置為固定的某一種格式,如

 <Connector port="8080" protocol="HTTP/1.1"        connectionTimeout="20000"        redirectPort="8443" EncodingForURI="UTF-8" />

  這樣就基本上沒有什么問題了,如果還有問題,就得用String里的方法,將頁面的亂碼改為你想要的格式了,不過,如果上面的方式都對了,這種方式就不怎么會用到了。

  除了上面的操作外,也要把數據庫的編碼格式設為與項目的一樣才行,這里就是改為UTF-8了,因為時間有限,所以寫的比較粗糙,還有很多東西也都給省略了,不過解決servlet的編碼方式應該是夠了的。

  調用時可以用js,如:

function ceshi() {	window.location.href = "UserServlet?uname=zhangsan&realname=" + encodeURIComponent("大家好");}

  這樣就將大家好就不會再顯示漢字到地址欄了(把這句話綁定到提交按扭上),就可以提交到相應的servlet了。這種解決亂碼的方式同樣也適用于jsp

  對了,還得再說點跟servlet有關系的,那就是forward和redirect,forward只能是在當前項目進行跳轉,redirect可以跳轉到外面去,當然,他們還有別的區別,這里我只說一點我覺得重要的東西,那就是無論使用哪一種,寫完了forward和redirect后,一定要加上return,如果不加,后面的語句還是會被執行的,加上return后,后面的語句就會報錯,這樣就阻止了同一個頁面進行了多次跳轉。不喜歡的網友誤噴,謝謝合作,感謝幫我挑錯的網友,因為這樣我才會不斷進步,真心感謝你們

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 木里| 扎鲁特旗| 灵川县| 安平县| 石家庄市| 邵阳市| 弋阳县| 松滋市| 饶河县| 平利县| 光山县| 松桃| 新邵县| 墨竹工卡县| 定南县| 察雅县| 永吉县| 滕州市| 大埔县| 盐池县| 松滋市| 南召县| 新乡县| 宁晋县| 万山特区| 平安县| 乌拉特前旗| 盐亭县| 邵阳县| 临城县| 册亨县| 辽宁省| 华宁县| 三都| 黑山县| 宜黄县| 云霄县| 上栗县| 扬州市| 榆树市| 柞水县|