# Probleme mit Verzeichnissen (Servlet, JSP, Tomcat)



## DaRolla (11. Aug 2006)

Lieber Leser,

ersteinmal vielen Dank dafür dass es dieses Forum gibt. Ich hab da eine Frage die Ihr mir vielleicht beantworten könnt. Es geht um Verzeichnisse.

Ich benutze Eclipse mit dem Tomcat Plugin und will eine Webapplication entwickeln.

Neben "WEB-INF" haben ich den Ordner "jsp", und das führt beim Aufruf eines Dispatcher-Servlets zu Probleme.

req.getRequestDispatcher( "/jsp/user_disabled.jsp" ).forward( req, res );

Damit kann ich das JSP aufrufen, das klappt soweit. Nur gibts Probleme mit der Grafik auf der JSP. Die Grafik liegt im Ordner "jsp/gfx", und muss unterschiedlich addressiert werden, je nachdem ob ich die JSP direkt aufrufe oder durch das Servlet.

Wenn ich das JSP aufrufe dann klappt "


". Aber wenn ich das aus dem Dispatcher-Servlet aufrufe, geht der Teil "/jsp/" verloren und die Grafik wird nicht gefunden.   

Bei den Beispielen unter Tomcat liegen alle Grafiken und JSP direkt neben "WEB-INF", was ich aber für keine gute Lösung halte, da ich viele JSP und Grafiken haben werde, und ordentlich wie ich bin will ich die in Unterordnern haben.

Wie geht dass den mit dem Pfad?

Liebe Grüße
DaRolla


----------



## Sanix (11. Aug 2006)

Was hälst du von dieser Struktur?

lib
misc
src
web
web/img
web/js
web/css

Damit klappts bei mir wunderbar und ist standard.


----------



## HLX (11. Aug 2006)

Versuch mal das Image mit absolutem Pfad anzugeben.


----------



## DaRolla (11. Aug 2006)

Lieber Sanix,

meinst du mit "web" vielleicht "WEB-INF" ? 

Dann frage ich mich, wie Du auf "img", "js" und "css" zugreifst, denn Tomcat blockiert das doch ?!

Das mit dem absolutem Pfad ist ne gute Idee, HLX, allerdings weiss ich nicht wie ich den Pfad zusammenbauen soll.

Ich brauche: 
- Protokoll (http://)
- Server (www.meinserver.de)
- Webapplikation (meinewebapp)
- und dann entweder das in web.xml gemappte Servlet (/hello) oder eben die Unterverzeichnisse samt Daten (/jsp/Hallo.jsp oder /jsp/gfx/Bild.jpg)

Baut Ihr den Pfad in jeder JSP / jedem Servlet zusammen? Übergebt ihr den Pfad als Parameter? Legt Ihr den Pfad in Properties fest und holt den einmal zu Programmstart?

Liebe Grüße
DaRolla


----------



## HLX (11. Aug 2006)

Ich meinte nicht nicht URL sondern eher das hier:


```
img src="/jsp/gfx/sendini.jpg"
```
[/code]

[/b]


----------



## DaRolla (11. Aug 2006)

Hehe, das ist ja genau das Problem.

also vorausgesetzt "gfx" befindet sich unter "jsp" (und "jsp" neben "WEB-INF")

Wenn ich aus dem Servlet zugreife, ist mein Pfad "http://meinserver.de/meinewebapp/" dann ist der relative pfad für die grafik "/jsp/gfx/grafik.jpg".

aber wenn ich aus der jsp zugreife ist mein pfad "http://meinserver.de/meinewebapp/jsp/" und der relative pfad für die grafik "/gfx/grafik.jpg".

Liebe Grüße
DaRolla


----------



## HLX (11. Aug 2006)

Die URL brauchst du nirgends anzugeben.

Ich sehe hier Willkür bei der Angabe des Slash vor dem ersten Pfadelement. Sollte das Zeichen nicht ein Hinweis auf das Wurzelverzeichnis (der Anwendung) sein? Im Code ganz oben ist kein Slash vor dem Pfad zur Grafik - hier unten schon. Das Root-Verzeichnis der Anwendung ist übrigens direkt oberhalb von WEB-INF, daher sollte /jsp/...immer an die richtige Stelle führen.


----------



## schraddi (15. Aug 2006)

.. probier´ das mal:

img src="/meinewebapp/jsp/gfx/sendini.jpg"

Hilft Dir das weiter? 

Gruss, schraddi


----------



## KSG9|sebastian (15. Aug 2006)

schraddi hat gesagt.:
			
		

> .. probier´ das mal:
> 
> img src="/meinewebapp/jsp/gfx/sendini.jpg"
> 
> ...



Das hilft schon weiter..aber leider nur soweit wie dir ne absolute Pfadangebe (c:\\abc.gif) weiterhilft. Sobald die Anwendung nen anderen Contextpath erhält war's das mit netten Bildern. D.h. wenn jemand auf die Idee kommt die Anwendung als App_1 zu deployen dann viel erfolg beim refactoring.
Zudem funktionierten die oben genannten Ansätze wunderbar.

/jsp/ liegt neben WEB-INF
/img/ ebenfalls

Und mittels "/" kommst du immer auf die Ebene, egal wo sich deine JSP befindet, ob in /a/b/c/d oder "direkt im root".


----------

