<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    歲月如哥
    人生非夢
    posts - 50,comments - 144,trackbacks - 0
        維護一個古董級的項目,在jsp傳參的時候亂碼了,如下:
       
    <jsp:forward page="/pub/msgpage/MsgTo.jsp">
    <jsp:param name="msg_Title" value='<%=Form.getFES("回復成功")%>'/>
    <jsp:param name="msg_Content" value='<%=Form.getFES("回復成功,正在操作")%>'/>
    <jsp:param name="url_to" value='<%=addpic_url%>'/>
    </jsp:forward>
       使用request得到的都是問號,最后在網上找到了下面的一段話,才解開了我心中的謎團。
      
    最近在做GGLook的時候,發現<jsp:forword>被tomcat generate成了...pageContent.forword(...java.util.URLEncoder.encode("" + ... )); 看了函數原形java.util.URLEncoder.encode有兩種形式:1.encode(String s)  2.encode(String s, String enc).對于第二個,我們可以對編碼進行設置.但是對于第一個,j2sdk實現的默認編碼卻是iso-8859-1.沒搞懂為什么內部編碼為UNICODE的java要把他實現成為iso-8859-1.還有就是tomcat為什么不采用配置文件的方式使我們自己能設定其編碼方式.現在一跳轉到errorpage.jsp就是亂碼.沒辦法,要嗎改j2sdk,要嗎改tomcat.最后,確定下載tomcat原代碼包,將Generator.java改掉,重新編譯,現在一切運行正常!
      
        原來是因為url里面沒有指定編碼,會默認使用ISO-8859-1進行編碼,而ISO-8859-1是不支持中文的,即URLEncoder.encode之后  都會顯示%3F%3F%3F,所以之后無論使用何種字符集解碼都是問號了。。。
       最后的解決方案有一下幾種,其中第四種沒有成功:
    1. 寫個filter,然后在filter里面進行request.setCharacterEncoding("GBK")
    2. 每個jsp頁面的頭部都寫上request.setCharacterEncoding("GBK"),原理和1是一樣的
    3. 傳參數前先對中文進行encode,得到參數后再使用對應的decode,這樣的話傳遞的參數就不會丟失,但是比較麻煩
    4. 修改tomcat的server.xml配置文件,在<Connector>節點增加一個屬性:URIEncoding="GBK",但是感覺這個參數沒有起作用,官方文檔是這么描述的“This specifies the character encoding used to decode the URI bytes, after %xx decoding the URL. If not specified, ISO-8859-1 will be used. ”

         我的理解是要區分你是怎么提交數據的,如果是Post的話,則會使用過濾器;如果是Get方式的話,tomcat默認會使用URIEncoding----是tomcat的server.xml配置文件,在<Connector>節點有一個URIEncoding的屬性,如果不配置的話默認是:URIEncoding="ISO-8859-1",官方文檔是這么描述的“This specifies the character encoding used to decode the URI bytes, after %xx decoding the URL. If not specified, ISO-8859-1 will be used. ”
    因為ajaxAnywhere.getAJAX是通過Get提交數據的(sends a GET request to the server.),所以還是使用了ISO-8859-1編碼。

     HTTP 定義了與服務器交互的不同方法,最基本的方法是 GET 和 POST。事實上 GET 適用于多數請求,而保留 POST 僅用于更新站點。根據 HTTP 規范,GET 用于信息獲取,而且應該是 安全的和 冪等的。所謂安全的意味著該操作用于獲取信息而非修改信息。換句話說,GET 請求一般不應產生副作用。冪等的意味著對同一 URL 的多個請求應該返回同樣的結果。完整的定義并不像看起來那樣嚴格。從根本上講,其目標是當用戶打開一個鏈接時,她可以確信從自身的角度來看沒有改變資源。比如,新聞站點的頭版不斷更新。雖然第二次請求會返回不同的一批新聞,該操作仍然被認為是安全的和冪等的,因為它總是返回當前的新聞。反之亦然。POST 請求就不那么輕松了。POST 表示可能改變服務器上的資源的請求。仍然以新聞站點為例,讀者對文章的注解應該通過 POST 請求實現,因為在注解提交之后站點已經不同了(比方說文章下面出現一條注解);
     
    在FORM提交的時候,如果不指定Method,則默認為GET請求,Form中提交的數據將會附加在url之后,以?分開與url分開。字母數字字符原樣發送,但空格轉換為“+“號,其它符號轉換為%XX,其中XX為該符號以16進制表示的ASCII(或ISO Latin-1)值。GET請求請提交的數據放置在HTTP請求協議頭中,而POST提交的數據則放在實體數據中;

    GET方式提交的數據最多只能有1024字節,而POST則沒有此限制。


     

    posted on 2008-09-20 17:03 歲月如歌 閱讀(2347) 評論(1)  編輯  收藏 所屬分類: java

    FeedBack:
    # re: 碰到一個jsp中文傳參亂碼的問題
    2008-09-22 01:42 | ttee
    過濾器是個一勞永逸的辦法,基本上百試不爽  回復  更多評論
      
    主站蜘蛛池模板: 亚洲午夜精品久久久久久浪潮| 亚洲AV无码欧洲AV无码网站| eeuss影院免费直达入口| 久久久久久久尹人综合网亚洲| 91精品免费观看| 美女黄频a美女大全免费皮| 亚洲AV无码国产精品色午友在线 | 一级毛片在线免费看| 成人亚洲国产va天堂| 亚洲日本在线观看视频| 免费看美女裸露无档网站| 免费中文字幕视频| 亚洲人成激情在线播放| 国产成人精品久久亚洲高清不卡 | 免费人成在线观看网站品爱网 | 久久久久久亚洲AV无码专区| 成人永久免费福利视频网站| 人人玩人人添人人澡免费| 亚洲欧洲国产综合AV无码久久| 亚洲成av人片天堂网| 国产一区在线观看免费| 95老司机免费福利| 国产JIZZ中国JIZZ免费看| 亚洲精品无码日韩国产不卡av| 亚洲AV永久无码精品| 亚洲日本在线观看视频| 日日操夜夜操免费视频| 日本最新免费网站| 精品成人免费自拍视频| 日本永久免费a∨在线视频 | 亚洲精品视频免费看| www永久免费视频| 亚洲高清一区二区三区电影| 中文字幕亚洲色图| 久久久青草青青亚洲国产免观| 四虎永久免费观看| 久久精品免费一区二区喷潮| 2021在线永久免费视频| 久久国产乱子精品免费女| EEUSS影院WWW在线观看免费| 高h视频在线免费观看|