speicherplatz

Status
Nicht offen für weitere Antworten.

maxxi

Bekanntes Mitglied
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

Bekanntes Mitglied
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

Top Contributor
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

Bekanntes Mitglied
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 ...
-->
<!-- The contents of this file will be loaded for each web application -->
<Context>
<!-- Default set of monitored resources -->
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<!-- Uncomment this to disable session persistence across Tomcat restarts -->
<!--
<Manager pathname="" />
-->
<!-- Uncomment this to enable Comet connection tacking (provides events
on session expiration as well as webapp lifecycle) -->
<!--
<Valve className="org.apache.catalina.valves.CometConnectionManagerValve" />
-->
</Context>
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?
 
Zuletzt bearbeitet:

maxxi

Bekanntes Mitglied
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

Top Contributor
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

Bekanntes Mitglied
<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?
 
Zuletzt bearbeitet:

maxxi

Bekanntes Mitglied
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?
 
Zuletzt bearbeitet:

maxxi

Bekanntes Mitglied
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>!
 
Zuletzt bearbeitet:

maxxi

Bekanntes Mitglied
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
 
M

maki

Gast
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

Bekanntes Mitglied
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.
 
M

maki

Gast
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.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben