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

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

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

    Leo's Blog

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      13 隨筆 :: 3 文章 :: 18 評論 :: 0 Trackbacks

    昨天在整合Spring MVC和Velocity,Sitemesh時,又碰到了久違的中文問題。唉,JSP, mysql, struts,每次都會碰到這樣的問題,總是以為這種以后不會碰到這種看似初級的問題了,結果還是躲不過。網上沒查到相關資料,于是開始動手跟蹤Spring和Velocity的源碼,弄了一天終于搞定。后來一個同學告訴我這個問題在Spring中文論壇里有精華貼,跟我最后的解決方案一樣的,氣死我也。不過跟蹤Spring的源代碼收獲還是不錯的,現在又對Spring的MVC framework有了更深的認識。這里把以前碰到的中文問題大概列一下,方便以后參考。

    1、JSP頁面顯示的中文問題
    這是最初級的東西,網上到處都有,不過還是列一下吧:
    Page的第一行改成:<%@ page contentType="text/html; charset=gb2312" %>
    Head里加:
    2、頁面Form 內容提交的中文問題
    在web.xml里加入:

    CharacterEncodingFilter
    Character Encoding Filter
    no description
    org.springframework.web.filter.CharacterEncodingFilter

    encoding
    GB2312


    forceEncoding
    true



    CharacterEncodingFilter
    /*

    呵呵,這是個簡單得要命的filter,如果不用Spring的話,完全可以自己寫一個。其實任何的interceptor機制都可以處理這個的,不管用Webwork還是Spring的interceptor,甚至用AOP,只要在取參數前加那么一句:request.setCharacterEncoding("GB2312");就行了。以前我用struts就是在它的RequestProcessor的populate之前加了這么一行。
    3、request 的parameter里要傳中文參數的問題
    這個問題跟Web Container有關系,記得以前我同學用WebLogic時好象沒出現這樣的問題。(我一般不傳中文參數,呵呵)。
    Tomcat里的解決方案是在server.xml里Connector port="8080"的attribute里加URIEncoding="GB2312"
    當然還有最土的解決方案,雖然不太會用到,不過還是列出來,以備最無奈的時候使用:
    String encodeStr=new String(fieldValue.getBytes("8859_1"), "gb2312");
    4、mysql的中文問題
    首先要修改mysql配置文件的encoding為GB2312,這部分的操作不記得了,畢竟好久沒用mysql了。不過據說新版的mysql里有wizard可以設的。然后把jdbc connection改成如下:
    jdbc:mysql://localhost:3306/bsfbookstore?useUnicode=true;characterEncoding=GB2312
    另外在寫程序成盡量用PrepareStatement,少用Statement,好象jdbc驅動在解析statement里的SQL包含中文時會有問題。(用PrepareStatement也是好習慣, hibernate里全用PrepareStatement的,哈哈)
    5、Spring與Veclocity結合的中文問題
    第一步:
    在"velocityConfig"里配置velocity.propeties文件,加下面一行:
    /WEB-INF/velocity.properties
    呵呵,也可以在config里直接用Map把參數寫進去,這樣就不用properties文件,這個Spring的文檔里都有。
    然后在velocity.properties里寫:
    input.encoding=GB2312
    output.encoding=GB2312
    default.contentType=text/html; charset=GB2312(ms這一行沒有用處,Spring有個地方讀進這個參數,不過后來又覆蓋掉了)
    第二步:
    接下來就是我昨天調了半天的那個地方,最后的解決方案很簡單,在viewResolver配置里加一行:
    text/html; charset=GB2312
    呵呵,就這么一行害我debug了好久,跟蹤了Velocity的Context設置,甚至改了Spring的源碼,用了Filter,Spring的Handler interceptor來設置reponse的contentType就是沒效果,結果發現Spring在Velocity View的render里加了這么一行:
    response.setContentType(getContentType());
    呵呵,原先設好的contentType都被沖掉了,因為render的時機是在postHandler之后,呵呵。
    這個參數對jsp是沒有用的,因為jsp會根據自己頁面的contentType設定的,所以每個JSP必須設置自己的contentType,Velocity就不用啦。難怪以前用JSP的時候沒碰到這個問題。

    posted on 2005-09-14 10:37 Leo 閱讀(1087) 評論(3)  編輯  收藏 所屬分類: 技術隨文

    評論

    # re: Spring MVC與Veclocity結合中文問題及常用中文問題總結 2005-12-03 14:02 csand
    thx  回復  更多評論
      

    # re: Spring MVC與Veclocity結合中文問題及常用中文問題總結 2005-12-14 22:03 rlj
    該方案不完整,非終極解決方案  回復  更多評論
      

    # re: Spring MVC與Veclocity結合中文問題及常用中文問題總結 2006-01-07 11:56 nickey's home
    為什么那么喜歡gb2312? getTemplate的時候用getTemplate(xxx,"utf-8")加載模版不行嗎?  回復  更多評論
      

    主站蜘蛛池模板: 亚洲国产精品无码久久九九| 欧洲乱码伦视频免费| yy6080亚洲一级理论| 青青免费在线视频| 四虎永久免费观看| 日本一区二区在线免费观看 | 亚洲福利秒拍一区二区| 污污网站免费观看| 亚洲毛片无码专区亚洲乱| xx视频在线永久免费观看| 亚洲人成电影网站| 无码一区二区三区免费视频| 亚洲精品美女久久久久久久| 日日夜夜精品免费视频| 日本高清免费中文在线看| 亚洲人午夜射精精品日韩| 在线观看免费视频一区| 久久久久亚洲精品天堂| 国产1000部成人免费视频| 亚洲AV无码一区二区三区牲色| 免费国产真实迷j在线观看| 人妻18毛片a级毛片免费看| 亚洲av午夜成人片精品网站 | 免费福利资源站在线视频| 中文字幕亚洲一区| 日本免费大黄在线观看| 亚洲综合丁香婷婷六月香| 国产又粗又猛又爽又黄的免费视频 | 亚洲经典在线中文字幕| 好吊妞在线成人免费| 一级毛片视频免费| 亚洲网站免费观看| 日本免费福利视频| 国产在线观看无码免费视频| 亚洲天堂中文字幕在线观看| 四虎永久在线精品免费观看地址| 久久国产免费观看精品| 亚洲人成色4444在线观看| 精品国产综合成人亚洲区| 免费看韩国黄a片在线观看| 日本一区二区三区在线视频观看免费 |