2013-10-17 48 views
5

Bir Jetty sunucusu tarafından sunulan yardım dosyaları ve bir kök bağlam savaşıyla dolu iki statik savaşım var.Bir webapp başka bir webapp'a nasıl iletilir?

  • help.war - İngilizce yardım dosyaları
  • help_CS.war - talebinin yerel ayarı dayanarak Çek yardım dosyaları
  • ROOT.war

    , istediğim Bir kullanıcıyı kendileriyle alakalı dile yönlendirmek için yani kullanıcı, /help/index.htm taleplerini ve Çek yerel ayarlarından istedikleri gibi, /help_CS/index.htm'u alır. Fikir, dil paketlerinin gereğinden fazla yaygara gerekmeden eklenmesidir. Request ve her iki ön taraftan yerel kapar veya kolu() yönlendirmeler Jetty.xml değinilen özel bir RewriteHandler ekleme

    I tried. İkisi de yanıt kodları bu noktadan gönderildikçe şikayet ediyorlar ... bir şekilde ?!

    ben denedim url-desen arasında */help/** ne olursa olsun varyasyonu eşleşecek şekilde alamadım ROOT.war ait Web.xml bir özel Filter çalıştı.

    Sonra eşleşir ve URL'LER oluşturulmuş olabilir ama bu URL'yi yeniden yazamazsınız hangi benim help.war için WEB-INF içine/web.xml son girişimi ile aynı Filter bir başvuru eklendi point her zaman /help/ tarafından hazırlandığından, help_CS ile değiştirilen yardım URL'si etki alanı/help/help_CS/index.htm olarak biter.

    Benim sorum. Bu nasıl yapılmalı/yapılmalı?

+2

Bunun için javascript kullanın. if (isCS) {window.location.href = hostname/help_CS}, burada isCS boole değişkeni. –

+0

İyi plan ama yapamam. Yardım dosyaları, çok az özelleştirme sağlayan bazı üçüncü taraf yazılımlar tarafından dinamik olarak oluşturulur. Bu, bir gün elli dile sahip olsaydık, her yardım geldiğinde JavaScript'in 50 * n (n dil sayısı) için elle girilmesi gerektiği anlamına gelir. –

+1

Haklısınız.Yardım dosyalarınızı ana web uygulamasında alt dizinlerde saklayın. Bence bu şekilde. –

cevap

1

So! Bununla uğraştığım birkaç gün sonra, biraz hacky hisseden something'u buldum ama işe yarıyor.

Öyle

<servlet-mapping> 
    <servlet-name>default</servlet-name> 
    <url-pattern>/help_CS</url-pattern> 
</servlet-mapping> 
olarak her savaş dosya için ayrı servlet-mapping (ama başka türlü özdeş) ile her help_XX.war için WEB_INF/web.xml koymak sonra benim özel Filter kullanmak

Sonra Filter içeride ben gerekli savaş ServletContext almak ve elle böylece

gibi istek adresinden /yardım kaldırarak, bu kullanarak iletmek
@Override public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) 
           throws IOException, ServletException 
    { 
    HttpServletRequest request = (HttpServletRequest) req; 
    String requestAddress = request.getRequestURI(); 
    String country_code = req.getLocale().getCountry(); 

    if (requestAddress.contains("/help/")) 
    { 
     ServletContext forwardContext = config.getServletContext().getContext("/help_" + country_code); 

     forwardContext.getRequestDispatcher(requestAddress.replace("/help", "")).forward(req, res); 
    } 
    else 
    { 
     chain.doFilter(req, res); 
    } 
    } 
İlgili konular