2013-10-17 26 views
5

Mam dwie statyczne wojny wypełnione plikami pomocy obsługiwanymi przez serwer Jetty i wojną kontekstową.W jaki sposób webapp przesyła dalej do innej aplikacji internetowej?

  • help.war - English Help Files
  • help_CS.war - plików Czech pomoc
  • ROOT.war

    zależy od ustawień narodowych wniosku, chcę aby skierować użytkownika do odpowiedniego dla niego języka. to jest żądanie użytkownika /help/index.htm, a ponieważ żądają od czeskiego locale, dostają /help_CS/index.htm. Chodzi o to, że pakiety językowe można dodawać w razie potrzeby bez zbytniego zamieszania.

    I tried dodanie zwyczaj RewriteHandler, o którym mowa w Jetty.xml który chwyta narodowe z tych Request i przodu lub przekierowań uchwyt(). Obie narzekają, że kody odpowiedzi zostały wysłane przez ten punkt ... jakoś ?!

    Próbowałem zwyczaj Filter w web.xml w ROOT.war których nie mogłem dopasować */help/** Nie ważne co odmianę url-pattern próbowałem.

    I dodaje odniesienie do tego samego Filter jako ostatnia próba w WEB-INF/web.xml do mojego help.war który będzie pasował i adresy URL mogą być generowane, ale nie mogę przepisać URL przy tym punkt, ponieważ zawsze jest poprzedzony przez /help/, więc adres URL z pomocą zastąpiony przez help_CS kończy się jako domain/help/help_CS/index.htm.

    Moje pytanie. Jak powinno/można to zrobić?

+2

Użyj do tego javascript. if (isCS) {window.location.href = nazwa hosta/help_CS}, gdzie znajduje się zmienna boolean isCS. –

+0

Dobry plan, ale nie mogę. Pliki pomocy są generowane dynamicznie przez niektóre oprogramowanie stron trzecich, które pozwala na bardzo niewielkie dostosowanie. Oznaczałoby to, że jeśli kiedyś będziemy mieć pięćdziesiąt języków, JavaScript będzie trzeba wprowadzić ręcznie za 50 * n (gdzie n jest liczbą języków) za każdym razem, gdy generowana jest pomoc. –

+1

Masz rację.Przechowuj pliki pomocy w podkatalogach w głównej aplikacji internetowej. Myślę, że to jest droga. –

Odpowiedz

1

Tak! Po kilku dniach błądzenia z tym znalazłem something, który wydaje się trochę hacky, ale działa.

używam zwyczaj Filter następnie umieścić go w WEB_INF/web.xml dla każdego help_XX.war z indywidualnym servlet-mapping (ale poza tym identyczne) dla każdego pliku wojennej jako tak

<servlet-mapping> 
    <servlet-name>default</servlet-name> 
    <url-pattern>/help_CS</url-pattern> 
</servlet-mapping> 

Następnie wewnątrz Filter uzyskać ServletContext wymaganej wojny i przekazania użyciem że ręcznego usuwania /help z adresu żądanie jak tak

@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); 
    } 
    }