2013-10-17 8 views
5

Ich habe zwei statische Kriege mit Hilfe-Dateien gefüllt von einem Jetty-Server und einem Root-Kontext Krieg gefüllt.Wie wird eine Webanwendung an eine andere Webanwendung weitergeleitet?

  • help.war - Englisch Hilfedateien
  • help_CS.war - Tschechische Hilfedateien
  • ROOT.war

    Basierend auf den Lokalisierungs des Antrags, ich will um einen Benutzer in die für ihn relevante Sprache umzuleiten. d. h. Benutzeranforderungen /help/index.htm und wenn sie von einem tschechischen Gebietsschema anfordern, erhalten sie /help_CS/index.htm. Die Idee ist, dass Sprachpakete nach Bedarf ohne viel Aufwand hinzugefügt werden können.

    I tried eine benutzerdefinierte Zugabe RewriteHandler, in jetty.xml bezeichnet, die die von den locale Request und ergreift entweder vorwärts oder Umleitungen auf Griff(). Beide beschweren sich, da Antwortcodes zu diesem Zeitpunkt gesendet wurden ... irgendwie ?!

    habe ich versucht, eine benutzerdefinierte Filter in der web.xml der ROOT.war, die ich nicht Ich habe versucht, entsprechen */help/** egal welche Variation des URL-Muster erhalten könnte.

    Ich habe dann einen Verweis auf die gleichen Filter als letzten Versuch, in WEB-INF/web.xml meinen help.war was passen würde und URLS erzeugt werden könnte, aber ich kann die URL in dem nicht neu schreiben Punkt, weil es immer von /help/ vorangestellt wird, so dass die URL mit Hilfe, die durch help_CS ersetzt wird, als domain/help/help_CS/index.htm endet.

    Also meine Frage. Wie soll/könnte das gemacht werden?

+2

Verwenden Sie Javascript dafür. if (isCS) {window.location.href = Hostname/help_CS}, wobei isCS eine boolesche Variable ist. –

+0

Guter Plan, aber ich kann nicht. Die Hilfedateien werden dynamisch von einer Drittanbieter-Software generiert, die sehr wenig Anpassung ermöglicht. Das würde bedeuten, dass, wenn wir eines Tages fünfzig Sprachen haben, das JavaScript für jedes Mal, wenn Hilfe generiert wird, für 50 * n eingegeben werden muss (n ist die Anzahl der Sprachen). –

+1

Sie haben Recht.Speichern Sie Ihre Hilfedateien in Unterverzeichnissen in der Haupt-Webanwendung. Ich denke, es ist der richtige Weg. –

Antwort

1

Also! Nach ein paar Tagen herumspielen mit diesem habe ich something gefunden, das ein wenig hacky fühlt, aber es funktioniert.

ich meine benutzerdefinierten Filter dann setze in WEB_INF/web.xml für jeden help_XX.war mit einem individuellen Servlet-Mapping (aber ansonsten identisch) für jede Datei Krieg als so

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

dann innerhalb der Filter erhalte ich die ServletContext des erforderlichen Krieges und nach vorn, dass die Verwendung manuell /help von der Anforderungsadresse wie so

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