# ServletMapping auf /



## mad-din (6. Okt 2008)

Hi Leute!

Ich hab eine kleine Anwendung, die folgendermaßen augerufen werden soll:

http://server:port/app/ID/hash

Soweit kein Problem. Ich hab ein Servlet, dass direkt auf /* gemappt wurde und dann über request.getPathInfo() die ID nd den Hash ausliest. Das funktioniert auch ohne Probleme. Allerdings sollen auch Fehlerseiten angezeigt werden sollen, zum Beispiel wenn der Hash nicht stimmt. Das Problem ist aber, wenn ich innerhalb des Servlets einen RequestDispatcher auf z.B. /error/default.jsp mache, hängt die Anwendung. Ist ja auch irgendwie klar, weil ich auf /error/irgendwas.jsp weiterleite, aber das wiederum auf das Servlet weiterleitet. Resultat: Endlosschleife. Kann ich das Mapping (Regex-Pattern gehen ja nicht) irgendwo so schreiben, dass die Error-Seiten trotzdem aufgerufen werden?

Danke & viele Grüße
Martin


----------



## maki (6. Okt 2008)

Wieso direkt auf /* mappen? Viel zu grobmaschig, man könnte auch sagen das würde jeden Request betreffen...

/ID/* sollte doch vollkommen ausreichen.


----------



## mad-din (6. Okt 2008)

Hi!

Dann müsste ich aber für jede ID ein eigenes Mapping erstellen  Das Problem ist ja, dass der Aufruf so erfolgt:

http://server:port/documentation/123456/sdkj23kldkaava6

Wobei die Zahlen hinter /documentation wechseln. Das heißt, ich bräuchte ein dynamisches Mapping. Aber sowas gibt es ja nicht, richtig?

Viele Grüße
Martin


----------



## maki (6. Okt 2008)

Wieso macht du nicht einfach noch einen String in die URL, so dass du weisst dass dieser Request für dieses eine Servlet ist?

zB
http://server:port/documentation/*show*/123456/sdkj23kldkaava6

Dann kannst du alls was nach /show/* aussieht auf das Servlet mappen.


----------



## mad-din (6. Okt 2008)

Hi!

Ja, das wäre meine Lösung gewesen bzw. so ist es derzeit eingestellt. ABER: Der Link wird in einer anderen Anwendung automatisch generiert und der Programmierer, der den Link erzeugt, hat das /view/ (so heißts bei mir) eben mal weggelassen bzw. übersehen. So, die gute Frau ist aber im Urlaub und kommt erst nächste Woche wieder. Da die Anwendung aber heute noch geschaltet werden muss, such ich nach einer Lösung, wie ich das Mapping auch ohne diesen String hinbekomme. 
Meine Idee wäre gewesen alles auf ein Servlet zu mappen und das Servlet prüft dann, ob es sich um einen Aufruf á la /[ID]/[HASH] oder  /error/*.jsp handelt und dann dementsprechend reagiert. Allerdings funktioniert innerhalb dieses Servlets keine Weiterleitung, einzig was mir noch einfällt wäre dann den HTML-Code, der ausgegeben werden soll direkt in das Servlet zu schreiben, aber das ist mir zuviel Aufwand.

Viele Grüße
Martin


----------



## maki (6. Okt 2008)

Als schlechteste Alternative könntest du die WebApp auf den sog. ROOT context mappen (falls noch nicht belegt), das wäre dann / für deine Anwendung, dann kannst du  /documentation/* ,mappen lassen.

Ist aber alles andere als sauber, oft ist der ROOT context auch schon belegt.


----------



## mad-din (6. Okt 2008)

Hi!

Ja, ROOT-Context ist auch schon belegt. Im Grunde will ich auch alle Requests abfangen und nur die für /[ID]/[HASH] durchlassen. Bei anderen Aufrufen sollte sowieso immer eine Fehlermeldung erfolgen. Ich glaube ich werde jetzt folgendes machen: ich werde ein weiteres Servlet schreiben, dass ich dann auf /error mappe und je nach Anfrage den entsprechenden HTML-Code ausgebe. Ist zwar umständlich, aber nur so funktionierts anscheinend.

Viele Grüße
Martin


----------

