程式碼高𠅙

2008/10/15

glassfish-v2 JSP request 中文參數亂碼解法

最近幾天用 Microsoft Visual Web Developer 2008 Express Edition 練習 ASP.NET + ADO.NET,順便把 Java 陣營兩大 IDE Eclipse 及 NetBeans 拿來比較一下開發的易用性…

心得是,以 NetBeans 用 JSF + JPA 開發網站,開發的效率並不下於 ASP.NET + ADO.NET。而 Eclipse 的 JPA 工具(稱為 Dali Java Persistence Tool) 的功能其實也相當完善,例如,它可以讓你由 Java class 產生 db table,也可以讓你由 table 產生 entity class。唯一在使用性上不足之處,是 Eclipse 出廠設定較 NetBeans 薄弱。例如,為了使用 JPA,你必須自行下載一個 JPA 的一個實作,而為了使用 JSF,你也必須自行下載一個 JSF 的一個實作。下載後還要自行設定… 需要看一點功夫才設定的起來。而 NetBeans 如果下載的是 Web & Java EE 版,預設就能直接開發 JSF + JPA 程式,甚至連範例專案都含在裡面,deploy 一下,直接就能 run 了。

以上都是雜話,以下是正文,但正文不會很多。

在測試 NetBeans 開發 Web 網站時,遇到一件有趣的事。就是以 NetBeans JSP web application 的預設組態,deploy 到 glassfish-v2 上,輸入中文時,取得的資料會是亂碼。但若是以 JSF 來開發 web application 便不會有中文亂碼的問題。

glassfish 中文亂碼的問題,可參考 FaqHttpRequestParameterEncodingServlet Character Encoding,在 sun-web.xml 中加入 default-charset="UTF-8" 得到解決,如下所示:

   <sun-web-app>
     <locale-charset-info default-locale="">
       <locale-charset-map locale="" charset=""/>
       <parameter-encoding default-charset="UTF-8"/>
     </locale-charset-info>
   </sun-web-app>

(注意,在 NetBeans 裡面,預設將 JSP 及 Java 檔都以 UTF-8 存檔,且 JSP 皆加入 <%@page pageEncoding="UTF-8"%> 指示)。

但 JSF 沒有中文亂碼問題,雖然這是好事,但反道讓我有些不解。用 Google 查詢一下,原來在 JSF 規範裡面有特別提到要如何解析當前 request 參數的編碼,Tips for JSF character encoding 有精要的描述。有了這些資訊,便不需再透過撰寫 filter 來解決編碼問題了。

Technorati : , , , ,