# Jsp und css



## carpe (26. Mrz 2009)

Hallo Leute,

Ich habe zum testen ein kleine Web Seite Programmiert , mit dem man ein Formular(wepapps/root/meinV ) an einen Servlet 
abschickt und dieser an eine JSP Datei verweisst , im Ordner wepapps/root/WEB-INF .

Mein Problem : 

wenn Ich die Datei Index.jsp im Ordner wepapps/root/meinV mit dem Browser aufrufe dann greift Sie auf die
Index.css Datei zu und die Formatierung funktioniert.Aber im Order wepapps/root/WEB-INF funktioniert die Formatierung nicht, da kann die JSP Datei nicht auf die CSS Datei zugreifen. 
Weiss Jemand warum.

Danke im voraus.


----------



## maki (26. Mrz 2009)

Der Pfad zur CSS stimmt wohl nicht (mehr).


----------



## carpe (26. Mrz 2009)

Ich habe die JSP und CSS Datei im selben Ordner webapps/root/WEB-INF und

<link rel="stylesheet" type="text/css" title="datei" href="datei.css"/>
steht in der JSP datei.
Also Ich denke daran liegt es nicht oder ....


----------



## mvitz (26. Mrz 2009)

afaik müsste da trotzdem /WEB-INF/datei.css rein

Edit: Oder es geht nicht, da alles, was im WEB-INF nach außen geschützt wird. Dann müsstest du die CSS Datei auf jedenfall außerhalb deines WEB-INF Ordners ablegen.


----------



## carpe (26. Mrz 2009)

Ich habe jetzt den absoluten Pfad hin geschrieben
<link rel="stylesheet" type="text/css" title="loginFehler" href="C:/apache-tomcat-5.5.27/webapps/ROOT/WEB-INF/loginFehler.css"/>

und es klapt aber die Bilddatei <img src=C:/apache-tomcat-5.5.27/webapps/ROOT/WEB-INF/bild.jpg">
wird nicht angezeigt,
merkwürdig.


----------



## maki (26. Mrz 2009)

>> Edit: Oder es geht nicht, da alles, was im WEB-INF nach außen geschützt wird. Dann müsstest du die CSS Datei auf jedenfall außerhalb deines WEB-INF Ordners ablegen.

Richtig habi55, es geht nicht.


----------



## carpe (26. Mrz 2009)

Es geht doch, nur die Bilddatei nicht.


----------



## maki (26. Mrz 2009)

carpe, der WebContainer darf nix direkt an einen Browser ausliefern was unter WEB-INF liegt, d.h. jede URL wie http://server:port/webappContext/WEB-INF/... wird mit einem 403 Fehler quitiert.

Direkt über das Dateisystem zu gehen ist bei Clients eines Webservers in 99,999% der Fälle keine Option...  das läuft nur bei dir, da lokal vorhanden.


----------



## rico (27. Mrz 2009)

Bilder,Stylesheets werden vom Browser extra angefordert. Da das WEB-INF Verzeichniss nach außen geschützt ist, werden die Dateien nicht gefunden. 
Am besten legst du die Sachen unterhalb deines webapp-Verzeichnisses deiner Anwendung, 
Bsp. 
	
	
	
	





```
<webapp>/images/meinbild.jpg
```
Zugreifen kannst du dann über

```
<img src="${pageContext.request.contextPath}/images/meinbild.jpg" />
```


----------



## carpe (27. Mrz 2009)

Was für einen Zweck hat es , wenn Servlets die Anfrage eines Clients an eine JSP Datei weiterleiten kann die 
vom Client nicht erreichbar ist, da dieser (JSP Datei) sich im WEB-INF Ordner befindet.
Ist mir ein Rätsel.


----------



## maki (27. Mrz 2009)

carpe hat gesagt.:


> Was für einen Zweck hat es , wenn Servlets die Anfrage eines Clients an eine JSP Datei weiterleiten kann die
> vom Client nicht erreichbar ist, da dieser (JSP Datei) sich im WEB-INF Ordner befindet.
> Ist mir ein Rätsel.


Schutz der JSP vor unberechtigtem Zugriff, ausserdem ist man so gezwungen MVC einzusetzen.


----------



## carpe (27. Mrz 2009)

ja , aber was soll ich mit der JSP Datei anfangen wenn der Clint es nicht erreichen kann.


----------



## maki (27. Mrz 2009)

Der Client kann sie nicht direkt erreichen, aber ein Servlet zB. kann das, MVC eben.


----------



## carpe (27. Mrz 2009)

was habe ich davon wenn das Servlet Anfragen an eine JSP(WEB-INF Ordner) Datei weiterleiten kann ,wenn
der Client es nicht erreichen kann .

Anders gefragt ,wozu dient die JSP Datei denn ,wenn sie vom Client nicht erreichbar ist.


----------



## maki (27. Mrz 2009)

nochmals: MVC

Kein Client kann einfach so auf eine JSP zugreifen (index und login mal ausgenommen).


----------



## mvitz (27. Mrz 2009)

carpe hat gesagt.:


> was habe ich davon wenn das Servlet Anfragen an eine JSP(WEB-INF Ordner) Datei weiterleiten kann ,wenn
> der Client es nicht erreichen kann .
> 
> Anders gefragt ,wozu dient die JSP Datei denn ,wenn sie vom Client nicht erreichbar ist.



Der 1. Vorteil ist eben, dass wenn du bestimmte Sachen vorher machen möchtest, z.B. eine DB Abfrage und die Ergebnisse darstellen, dass du das nicht in der JSP direkt machen musst, sondern im Servlet und die Daten dann einfach an die JSP weiterreichst. Würde jemand jetzt direkt auf die JSP zugreifen, so würde das nicht funktionieren, da keine Daten für die JSP verfügbar sind. --> JSP in WEB-INF, dann ist man gezwungen die Seite über ein Servlet zu erreichen und die JSP hat auf jedenfall ihre Daten.

Jetzt könnte man natürlich sagen:
"Wozu brauche ich dann die JSP, dann kann ich doch einfach alles mit dem Servlet und dessen Outputstream machen?"

Ja kann man, ist aber nicht schön. Du schreibst in deinem Servlet dann immer wieder out.println("<html>"); usw. usw. Dazu kommt, dass du dann wieder Logik (Schleifen, DB Abfrage) und die Anzeige der Daten (<form>, <p>) vermischst und es schwerer zu warten ist.

Aus diesem Grunde legt man die JSP in WEB-INF und lässt den Client das Servlet aufrufen. Das Servlet macht dann alles, was mit der Logik zu tun hat und gibt anschließend die Daten, die die JSP benötigt an die JSP weiter. Diese wird danach mit den übergeben Daten gerendert und angezeigt.

Somit kann keiner deine JSP Datei in einem inkonsistenten Zustand (ohne Daten) sehen und du trennst die Logik deiner Anwendung, von der Anzeige selbiger.


----------



## carpe (27. Mrz 2009)

Danke für die Mühe , habe es Jetzt verstanden.


----------

