其實Struts 已經用了一陣子了!!當初自己在開發時,遇到最大的問題就是中文的問題!!
好在 LAB 有學長也是有碰過類似的經驗,大家討論之下終於有了答案... Filter
在每個 Struts 的請求中先透過 Filter 來作編碼的動作:
package filter.encoding;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;
public class EncodingServlet extends HttpServlet implements Filter
{
private FilterConfig filterConfig;
//Handle the passed-in FilterConfig
public void init(FilterConfig filterConfig) throws ServletException
{
this.filterConfig = filterConfig;
}
//Process the request/response pair
public void doFilter(ServletRequest request, ServletResponse response,FilterChain filterChain)
{
try
{
request.setCharacterEncoding("utf-8");
filterChain.doFilter(request, response);
}
catch(ServletException sx)
{
filterConfig.getServletContext().log(sx.getMessage());
}
catch(IOException iox)
{
filterConfig.getServletContext().log(iox.getMessage());
}
}
//Clean up resources
public void destroy()
{
}
}
然後在 web.xml 中加入
<filter>
<filter-name>EncodingServlet</filter-name>
<filter-class>filter.encoding.EncodingServlet</filter-class>
</filter>
<filter-mapping>
<filter-name>EncodingServlet</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
就是讓所有對 Controller 發出 request 的請求都能夠先經過我們的 filter
網頁之間的編碼問題解決了!!
事情還沒結束勒~~~
因為 Struts 有一種 i18n 的機制,就是讓所有 Message 都包裝在一個 ApplicationResource.properties 之中
這個檔案裡面不能將中文很正確的在 view 中顯示,所以我們需要一個工具來輔助:property editor
下載的網址如下:
http://propedit.sourceforge.jp/index_en.html
因為我是用 Eclipse 來開發的,所以我是用他對於 Eclipse 的 plug-in
安裝方式網頁上有說,不是用下載的方式,而是可以透過 Eclipse 的安裝 feature 工具來 support
當你重新開啟 Eclipse 後,對於 *.properties 檔案按下右鍵選擇 [Open with] -> [PropertiesEditor]
就可以利用這個工具來編輯 *.properties 檔案
當然它看起來就跟一般 Eclipse 內建的工具差不多,只是如果你是輸入非英文字母,它會自動幫你轉成 UTF-8 的編碼方式
另外還有一點要注意,在 view 的編碼也要改成 UTF-8 不然,我也不知道會怎樣XD
最近找到有 support struts 在 eclipse 上的 plug-in ,可是似乎都不太好用~~
但是有一個工具也可以提供給大家:Struts Console
網址如下:
http://www.jamesholmes.com/struts/console/
他也是有支援 eclipse 讓我在開發時對於編輯 struts-config.xml 來說就不是只是看一堆 XML TAG 了
他的工具也支援 Validator and Tiles 的 struts plug-in
不過對大的缺點就是對於 struts 與支援到 1.2的版本,殘念!!
剩下對於支援 Struts 的工具就有限了!!
如果要開新的 struts project ,我個人是建議直接將 struts-blank.war 匯入後在去更改內容
因為這樣是最快的方法了!! 很多東西要重新撰寫很累人!!!
希望對正要開始開發 struts 的 programmer 來說會有一些些的幫助
P.S. 還是要感謝涼鳥學長在Struts 方面給的指導!!