# speicherplatz



## maxxi (25. Nov 2009)

Hello,

ich würde gerne ein jsp-Datei in einem von mir bestimmten Verzeichnis abspeichern. Genauso die Session-Daten. z. B.:

index.jsp soll in C:\projekt\ und
alle Session-Daten in C:\projekt\session\ liegen

Jetzt habe ich eine Datei tomcat/conf/server.xml gefunden. Dort gibt es ein XML-Element Host. Muss ich dort irgenwas ändern?


----------



## maxxi (25. Nov 2009)

Also ich habe jetzt in der server.xml


> <Host name="localhost"  appBase="webapps"
> unpackWARs="true" autoDeploy="true"
> xmlValidation="false" xmlNamespaceAware="false">


ungeändert in:


> <Host name="localhost" appBase="C:\x">


Das funktioniert.
Datei C:\x\y\index.jsp
aufrufen mit: http ://localhost:8080/y/index.jsp

Jetzt habe ich aber gelesen, dass man das nicht in der server.xml machen soll. Außerdem kann ich nicht mehr auf http ://localhost:8080 zugreifen.

Wie gehts denn noch anders?


----------



## HLX (26. Nov 2009)

Auf localhost:8080 kannst du nicht mehr zugreifen, weil der Tomcat durch die geänderte appBase die Anwendung 'ROOT' nicht mehr findet.

Du solltest daher das geänderte Verzeichnis über den Kontext (d.h. bezogen auf die Anwendung) bekannt geben. Dies geht z.B. in der 'server.xml' mit einem <Context>-Tag für deine Anwendung, innerhalb des <host>-Tags:
[XML]<Host appBase="webapps" ...>
    <Context docBase="C:\MyApp" path="/MeineAnwendung">
</Host>[/XML]
==> Die Anwendung wird hier unter C:\MyApp angelegt und ist über http://localhost:8080/MeineAnwendung anzusprechen.

Alternativ kannst du diese Angaben auch in einer Datei context.xml machen.

Mehr dazu auch hier:
Tomcat-Docs: Context


----------



## maxxi (26. Nov 2009)

> Alternativ kannst du diese Angaben auch in einer Datei context.xml machen.


Nachdem ich gelesen habe, dass man das in der server.xml nicht machen soll, dachte ich mir, ich muss das in der context.xml machen. Die schaut folgendermaßen aus:


> <?xml version='1.0' encoding='utf-8'?>
> <!--
> Licensed to ...
> -->
> ...


Leider sagt mir das überhaupt nichts. 


> The contents of this file will be loaded for each web application


Was bedeutet denn das z. B.?

Sollte ich jetzt in dieser Datei einen Context hinzufügen, oder soll ich das in der web.xml machen?


----------



## maxxi (26. Nov 2009)

Also ich glaube, die web.xml dient nur zur Angabe von Defaultwerten. Demnach müsste ich den neuen Context wohl im context.xml eintragen. Jetzt ist nur noch die Frage, wie. Leider verstehe ich das, was jetzt schon im context.xml steht, nicht.


----------



## HLX (26. Nov 2009)

In der Context.xml kannst du nur das vorhandene <Context>-Element überschreiben. Dann gelten die Einstellungen für alle Anwendungen auf dem Server. Wenn du indiviuelle Kontexteinstellungen haben willst, d.h. ROOT etc. wie gehabt, jedoch deine Anwendung an einem anderen Ort abgelegt, legst du am besten eine individuelle Kontext-Datei an.

Individuelle Kontext-Dateien werden im Tomcat-Verzeichnis 'conf\Catalina\localhost' abgelegt. Sie tragen den Namen ihres Kontext (z.B. MeineAnwendung.xml für den Kontext /MeineAnwendung).

Zur Änderung des Speicherorts kommt kommt lediglich folgender Eintrag in die Datei:
[XML]<Context docBase="C:\MyApp"/>[/XML]


----------



## maxxi (26. Nov 2009)

> <Context docBase="C:\MyApp"/>


Kann mir nicht vorstellen, dass das alleine reicht. Was passiert dann mit meinen ganzen Standardeinstellungen von web.xml? Muss das nicht auch noch irgendwie da rein in meinen neuen Context? Also so irgendwie:
[XML]<?xml version='1.0' encoding='utf-8'?>
<Context docBase="C:\MyApp">
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>[/XML]
Und muss ich in der server.xml keinen Eintrag machen, dass dann unter conf/Catalina/localhost/ eine neue Context-Datei ist?


----------



## HLX (26. Nov 2009)

Nein, das hat damit nichts zu tun. Probier´s einfach mal aus.


----------



## maxxi (26. Nov 2009)

wunderbar! Die web.xml muss man interessanterweise wirklich nicht in die eigene Context-Datei eintragen.

Habe jetzt folgenden Stand:

C:\xampp\tomcat\conf\Catalina\localhost\x.xml:



> <?xml version='1.0' encoding='utf-8'?>
> <Context docBase="C:/xampp/htdocs/x" />



C:\xampp\htdocs\x\index.jsp:



> <%@page import="java.util.*" %>
> <%
> Date oDate=new Date();
> %>
> Heute: <%= oDate %>



Nach Start von XAMPP (Tomcat) rufe ich das Script auf mit: http ://localhost:8080/x/index.jsp

Jetzt würde ich noch gerne einen virtuellen Host x einführen. 

Ich möchte also meinen aktuellen Stand irgendwie kombinieren mit:



> <Host name="x" appBase="C:/xampp/htdocs">
> </Host>


Aber wo muss der jetzt rein? Auch in meine Context-Datei x.xml?


----------



## maxxi (26. Nov 2009)

Ich glaube, das wird so nicht funktionieren. Man kann zwar ein <Context> in ein <Host> stecken, jedoch nicht umgekehrt.

Entsprechend http://tomcat.apache.org/tomcat-5.5-doc/config/context.html:


> inside a Host element in the main conf/server.xml


muss ich das nun wohl doch in der server.xml definieren. Mist, ich dreh mich im Kreis :lol:

OK. Also jetzt ist die Frage, wie definiere ich richtig ein <Context> im einem <Host>!


----------



## maxxi (26. Nov 2009)

Mit herumprobieren habe ich es jetzt wohl geschafft. Alle vorhergehenden Einstellungen habe ich wieder rückgängig gemacht. In der server.xml habe ich jetzt einen host hinzugefügt:



> <Host name="x" appBase="C:/xampp/htdocs/x" >
> <Context path="" docBase="."/>
> </Host>


Damit kann ich meine jsp-Datei aufrufen mit: http://x:8080/index.jsp

Allerdings wäre es toll, wenn mir noch jemand erklären würde, was ich eigentlich gemacht habe. Der <Host> ist mir klar, der <Context> aber überhaupt nicht. Warum muss hier path leer und docBase . sein? ???:L


----------



## maki (26. Nov 2009)

> Allerdings wäre es toll, wenn mir noch jemand erklären würde, was ich eigentlich gemacht habe.


Wäre es nicht toller wenn du die Doku lesen würdest?

Links zu genau deinen Fragen hast du ja schon bekommen...
Ansonsten gibt es mehr als genug Infos im Netz über Servlets & java WebApps, es gibt keinen Grund sich die absoluten Grundlagen nicht anzueignen.


----------



## maxxi (26. Nov 2009)

Die Doku hatte ich gelesen. Das war ein Horror. Datte ich nichts verstanden. Die ganzen Begriffe, wie "Document Base", "Context Root", "Context Path" haben mich voll durcheinander gebracht. Außerdem scheint es eine Menge Regeln zu geben, wann man was wie definieren darf bzw. wann man was auf gar keinen Fall machen darf, weil sonst ein Fehler gemeldet wird. Echt ein Horror für einen JSP-Anfänger.


----------



## maki (26. Nov 2009)

> Echt ein Horror für einen JSP-Anfänger.


Suche dir doch ein Tutorial (Google zB nach JSP Tutorial), persönlich bin ich der Meinuing Servlets sind viel wichtiger für Anfänger als JSPs.
Java WebApp sind sehr Komplex am Anfang, mit Trial & Error lässt es sich nicht erlernen sondern frustriert nur, man braucht die theor. Grundlagen, sonst wird das nix.


----------

