本篇文章為大家展示了Struts中怎么避免出現亂碼,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
網站建設哪家好,找創新互聯公司!專注于網頁設計、網站建設、微信開發、小程序定制開發、集團企業網站建設等服務項目。為回饋新老客戶創新互聯還提供了江門免費建站歡迎大家使用!
下面是效果圖:
如圖鍵入:中文
顯示結果如下圖:
為什么會到錯誤頁面呢?我們明明都寫正確了呀,是的,沒有錯誤,這是什么原因呢?
請看下圖:
我們打印才發現原來username的值傳到action中,成了亂碼,這主要由于客戶端和服務器端采用了不同的字符集,中文亂碼我們沒有處理。
2、解決辦法:
A、直接轉編碼我們新建一個包,命名為util,在包下新建一個類文件,命名為EncodingUtil,類的功能就是提供一個字符集轉換的一個方法,具體代碼如下所示:
package util; |
小結:這辦法雖然能解決中文亂碼,但是每次還得調用,是不是很不方便呢?如果忘記了調用這個方法,那程序又亂碼了,維護起來很困難,下面我們看另一種解決方案。
B、繼承RequestProcessor類
RequestProcessor類處理ActionServlet接收到的所有請求。根據它的處理方式,可將每個請求分解為多個小任務,分別由不同的方法執行。這就允許針對請求的各個單獨部分自定義處理。
RequestProcessor類的部分方法如下:
processPath(): 獲取客戶端請求的路徑URI
processMapping(): 根據請求URI獲取所需的映射信息
processRoles(): 檢查用戶的角色是否允許他訪問請求的資源
processActionForm(): 新建一個Form Bean或從請求會話中檢索Form Bean
processForward(): 處理元素forward以匹配當前的請求路徑
processValidate(): 調用Form Bean的validate()方法
processPreprocess(): 告訴請求處理器調用此方法后,是否應繼續處理請求
processLocale(): 為請求選擇一個語言環境
processActionCreate(): 實例化當前ActionMapping指定的類的實例
processActionPerform(): 將調用action的perform()或execute()方法
呵呵,發沒發現RequestProcess類的所有方法都有一個前綴proess,接著往下看吧。
RequestProcessor在action之前,所以我們應著手RequestProcessor,要開發自己的RequestProcessor類,步驟如下:
(1) 創建一個繼承org.apache.struts.action.RequestProcessor的類,在改類中顯示定義一個無參,方法體為空的構造器。
(2) 重寫所需的方法,加入我們的功能。
具體代碼如下所示:
package servlets; |
(3) 修改配置文件sturts-config.xml,在其中加入一個名為
小結:這樣做呢?問題是解決了,每一個請求先經過這個方法,并轉換了字符集再交給action做處理,這樣我們不用在操心中文亂碼,但RequestProcessor是與struts耦合在一塊兒。如果不用struts框架,我們又該如何處理中文問題呢?是否又更好的辦法呢?那就接著跟我往下看吧。
C、Filter來解決中文問題
Filter,是不是你腦子里閃現了這個詞呢?下面就來看看如何用它來改寫我們上一章節的例子吧!
(1) 首先在工程中新建一包,命名為filter,在下面新建一類文件,命名為EncodingServlet,并繼承HttpServlet、實現Filter接口,注意并實現接口的方法。
在Servlet中filter起著過濾器的作用,當一個請求發送到服務器的時候,需要把請求首先交給filter來處理,然后交給action做處理。EncodingServlet負責處理請求的字符集,在此就起這么個功能,具體代碼請依照如下所示:
package servlets; |
(2) 修改web.xml,加入我們的filter。
|
上述內容就是Struts中怎么避免出現亂碼,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注創新互聯行業資訊頻道。
標題名稱:Struts中怎么避免出現亂碼
網頁路徑:http://vcdvsql.cn/article26/iigejg.html
成都網站建設公司_創新互聯,為您提供電子商務、網站設計、外貿網站建設、網站排名、標簽優化、微信小程序
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯