2010-01-31 35 views
2

我的tomcat6在區域設置爲en_US的JVM中運行。 我需要部署幾個webapps &我希望每個webapp(打包在war文件中)具有不同的默認語言環境。這可能嗎 ?設置與JVM不同的戰爭區域?

+0

所以這些都不是正確的答案?你有沒有找到答案? – 2010-02-10 10:15:11

回答

1

不可以,但是,您可以在每個JSP頁面上明確設置區域設置。將區域設置存儲在會話對象或資源中。

如果您使用sesison對象,您的用戶可能會擁有自己的個人語言環境,這在國際環境中可能不錯。

1

(警告:我沒有做了很多用Java語言環境的東西呢。)

你想避免在JSP中的實際代碼或servlet的,如果你可能可以這樣做。如果沒有直接配置的方式來做到這一點(這似乎令人驚訝),我敢打賭有一個接近直接配置方式:你可以用一個過濾器。

創建你的子類的javax.servlet.Filter,在相關應用的web.xml安裝它,在你doFilter實現呼籲ServletResponsesetLocale。或類似的規定。請注意,這並不妨礙您爲特定用戶執行特定操作,以便他們可以擁有自己的語言環境(如果有用的話)。

如果你之前沒有做過濾器,它們很容易(而且功能非常強大)。你只要實現三個方法接口,其中兩個是通常只是空存根,除非你有,你必須獲取和釋放資源,第三個(doFilter),它看起來是這樣的:

public void doFilter(
    ServletRequest request, 
    ServletResponse response, 
    FilterChain chain 
    ) 
throws IOException, ServletException 
{ 
    // Do your stuff here; so for instance: 
    response.setLocale(...); 

    // Chain to the next filter 
    chain.doFilter(request, response); 
} 

然後是web.xml部分看起來就像這樣:

<filter> 
    <filter-name>My Servlet Filter</filter-name> 
    <filter-class>com.example.MyServletFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>My Servlet Filter</filter-name> 
    <url-pattern>*.jsp</url-pattern> 
</filter-mapping> 

一個有關過濾器的很酷的事情是,你可以插入在requestresponse一個門面,如果你需要(我不認爲你在這種情況下,但誰知道)通過ServletRequestWrapperServletResponseWrapper utili ty類。這些是基類,只是包裝requestresponse實例並對它們進行傳遞。這意味着你可以更換獲取傳遞給鏈中的下一個過濾器的requestresponse情況下,使用您自己的包裝子類的實例,可以讓你覆蓋,你需要涉足任何請求或響應的方法。

我已經使用過濾器(和包裝)來做各種事情,他們工作的一種享受,並且對於特定於應用的配置驅動的東西來說非常棒。