Servlet domainabhängig

Hallo zusammen,

ich befürchte, dass ich die Antwort schon kenne, aber trotzdem noch einmal die Frage:
kann man in einer Webanwendung (war, nicht ear) mehrere Servlets haben, die die gleichen Pfade bedienen und in Abhängigkeit von der Domain ausgewählt werden?
Entscheidend ist, dass die Anwendung nicht in verschiedene Servlet-Kontexte deployt werden soll, sondern auf verschiedenen Domains verschiedene Ansichten bietet.

Hintergrund ist, dass ich ein Admin-Interface auf einer anderen Subdomain laufen lassen möchte, als die Anwendung selbst. Es soll aber auf die gleichen Beans zugegriffen werden, sodass ein gemeinsamer (Eltern-)Kontext erforderlich ist.

Derzeit habe ich die Trennung mit einem Pfad-Präfix realisiert, was aber hässlich aussieht.

D.h.? Nein?

Meinst du jetzt deklarativ in der web.xml? Im Request gibts ja getServerName().

Ansonsten ist dafür ja auch rewriting in einem Reverse Proxy prädestiniert; sprich foo.example.com/adminexample.com/admin/foo o.ä. Allerdings muss die Anwendung dafür hinreichend flexibel sein, damit sie die korrekten internen Links generiert, falls das relevant ist. Bei einer SPA erübrigt sich das ja i.d.R.

Leicht OT: Hässlich liegt imho auch im Auge des Betrachters. Ein schöner Einstiegspunkt ist mir wichtig, ob der mich zu einem „hässlichen“ Pfad weiterleitet, ist mir mittlerweile egal, solange man wenigstens halbwegs erkennen kann, wo es hin geht. Früher fand ich auch, dass das relevanter ist, aber mittlerweile glaube ich, dass es einfach niemanden interessiert.

[quote=musiKk]D.h.? Nein?

Meinst du jetzt deklarativ in der web.xml?[/quote]
Genau. Eigentlich allerdings programmatisch mittels ServletContext.addServlet(..., ...).configureDomain(...).

In der mehrmandantenfähigen Webanwendung habe ich bereits einen ServletFilter, mit dem ich die Mandanten anhand der Domain identifiziere. Das funktioniert soweit auch, weil es verschiedene „Instanzen“ (nicht im eigentlichen Sinne, eigentlich sind es nur Anwendungskontexte) derselben Anwendung sind.

Das ist ein Vorschlag, auf dem ich noch einmal herumdenken muss. Ein Apache als Reverse-Proxy wird aller Wahrscheinlichkeit nach sowieso vor den Tomcat kommen, da der Tomcat SNI nicht unterstützt.

Nachdem ich mich vor ein paar Monaten mal durch den Tomcat-Quellcode gewühlt habe, habe ich keine Möglichkeit gefunden, wie man das realisieren könnte. Daraufhin habe ich dann den Adminanteil in einen anderen Kontextpfad gelegt.

Gut möglich. Falls es keine Lösung gibt (ich habe übrigens parallel in der Tomcat-Mailingliste gepostet), wird es auch dabei bleiben.