tomcat - alles umleiten zu einem Servlet

Status
Nicht offen für weitere Antworten.

HyperHyper

Mitglied
Weis jemand wie ich Tomcat so konfigurieren kann, das alle Anfragen immer nur zu einem Servlet weitergeleitet werden? Möchte dort die URI auslesen und diese auch auswerten.
 

RaoulDuke

Bekanntes Mitglied
Code:
  <servlet-mapping>
    <servlet-name>servlet</servlet-name>
    <url-pattern>*</url-pattern>
  </servlet-mapping>
 

HyperHyper

Mitglied
Danke für die Antwort. Ich habs mal ausprobiert aber leider funktioniert es nicht. Ich kann das Servlet nun überhaupt nicht mehr aufrufen. Mein Tomcat 5.0 bringt dann folgende Fehlermeldung:

Code:
SCHWERWIEGEND: Parse error in application web.xml
java.lang.IllegalArgumentException: Invalid <url-pattern> * in servlet mapping


Ich habe jetzt noch den Apache 2.2 installiert. Ich möchte gerne das Anfragen wie:

http://meinedomain.de/index.jsp
http://meinedomain.de/irgendwas/test.html
http://meinedomain.de/irgend/was/dokument.png

zu meinem Servlet "speichernservlet" umgeleitet werden. Dort möchte ich die URI dann auslesen und selber handhaben was danach mit der Anfrage geschieht.
 

HyperHyper

Mitglied
RaoulDuke hat gesagt.:
Hmm, stimmt. Habs gerade mal ausprobiert. Mit /* scheint es aber zu gehen.
Also mit "/*" gehts, allerdings habe ich dann das Problem, das es nun wieder viele verschiedene geladene Servlet-Klassen gibt (siehe hier). Das ist leider nicht erwünscht. Gibts noch ne andere möglichkeit?
 

RaoulDuke

Bekanntes Mitglied
HyperHyper hat gesagt.:
Also mit "/*" gehts, allerdings habe ich dann das Problem, das es nun wieder viele verschiedene geladene Servlet-Klassen gibt (siehe hier). Das ist leider nicht erwünscht. Gibts noch ne andere möglichkeit?

Ich verstehe dein Problem, auch das aus dem anderen Thread, nicht. Ich hab meinem Servlet jetzt mal eine init() Methode gegeben und lasse init() eine Meldung ausgeben wenn es aufgerufen wird. Und egal über welche URL ich das Servlet aufrufe, init() wird genau ein einziges mal aufgerufen und dann nie wieder.

Es gibt also nur ein einziges Servlet das über verschiedene URIs angesprochen werden kann.
 

HyperHyper

Mitglied
Ich versteh das Problem aus dem anderen Beitrag eigentlich auch nicht :wink:

Ich habe mal nun mit dem "/*" Eintrag gearbeitet, und jedesmal wenn ich von einem anderen Browser zugreife auf meinen Tomcat wird die Init() neu gestartet. Liegts vielleicht daran das ich in meinem Servlet statische Instanzvariablen benutze?
 

RaoulDuke

Bekanntes Mitglied
Kannst du mal den Code vom Servlet posten?

Wenns ein Grösseres ist, dann nimm doch einfach mal allen Code raus den wir hier erstmal nicht brauchen.
 

HyperHyper

Mitglied
Code:
package xyz.project.speichersystem;

import org.apache.log4j.*;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.SingleThreadModel;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;




public class SpeicherServlet extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
	 private static final String CONTENT_TYPE ="text/html; charset=UTF-8";
	 private static Logger log = Logger.getRootLogger();
	 private static int speicherMaximumSize;
	 protected static Speicher singletonSpeicher;
	
	 

	 public void init( ) throws ServletException
	 {
		 
		 
		 log.info("Initialisiere Speicher...");
		 
		 try
		 { 
			 
			
			 singletonSpeicher = Speicher.getInstance();
			 // lege die Grösse des Speichers fest
			 singletonSpeicher.setSpeicherMaximumSize(speicherMaximumSize);
			
			 
		 }
		 
		 catch (SpeicherException x)
		 {
			 log.error("Fehler beim erzeugen des singletonSpeicher aufgetreten: ", x);
			 System.exit(1);
		 }
		
		 
		 log.info("Speicher wurde erfolgreich initialisiert!");
		 
		 
	 } 
	 
	 
	 
	
	public SpeicherServlet() {
		super();
	}   	

	
  
	public synchronized void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
	        // füge den aktuellen Request meinem Speicher hinzu (wird dort ausgewertet)
		    	singletonSpeicher.addSpeicherObject(request);
		    	// zeige den Inhalt vom Speicher an
		    	singletonSpeicher.showContent();
		
	}  	
	
	
	
	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// weiterleiten an doGet
		doGet(request,response);
	}  	  	    
	
	

	
	
	public void readXMLConfig()
	{
		
		// liest nur eine XML-Datei ein und legt dadurch den speicherMaximumSize fest
		
	} 


} // .EOF
 

HLX

Top Contributor
HyperHyper hat gesagt.:
RaoulDuke hat gesagt.:
Hmm, stimmt. Habs gerade mal ausprobiert. Mit /* scheint es aber zu gehen.
Also mit "/*" gehts, allerdings habe ich dann das Problem, das es nun wieder viele verschiedene geladene Servlet-Klassen gibt (siehe hier). Das ist leider nicht erwünscht. Gibts noch ne andere möglichkeit?

Wie sieht´s denn in der 'web.xml' aus? Ist in den <servlet>-Tags evtl. <load-on-startup> gesetzt?
 

RaoulDuke

Bekanntes Mitglied
Wie sieht´s denn in der 'web.xml' aus? Ist in den <servlet>-Tags evtl. <load-on-startup> gesetzt?

Das sollte eigentlich nichts ändern. Mit load-on-startup wird das Servlet beim Start des Tomcat initialisiert, ohne beim ersten Aufruf. In beiden Fällen dürfte init() nur einmal durchlaufen werden.
 

HLX

Top Contributor
HyperHyper hat gesagt.:
Also mit "/*" gehts, allerdings habe ich dann das Problem, das es nun wieder viele verschiedene geladene Servlet-Klassen gibt. Das ist leider nicht erwünscht. Gibts noch ne andere möglichkeit?

RaoulDuke hat gesagt.:
Wie sieht´s denn in der 'web.xml' aus? Ist in den <servlet>-Tags evtl. <load-on-startup> gesetzt?

Das sollte eigentlich nichts ändern. Mit load-on-startup wird das Servlet beim Start des Tomcat initialisiert, ohne beim ersten Aufruf. In beiden Fällen dürfte init() nur einmal durchlaufen werden.

Reden wir von verschiedenen Servlet-Klassen oder verschiedenen Servlet-Instanzen?
 

RaoulDuke

Bekanntes Mitglied
Lies doch mal den Thread ganz durch. ;)

Also, so wie ich das bisher verstanden habe hat HyperHyper ein einziges Servlet, auf das alle Anfragen der Webapplikation gemappt werden. Und er hat jetzt den Effekt das bei jeder Anfrage, die immer an das gleiche Servlet gehen sollte, die init() Methode des einen Servlets aufgerufen wird.

Es sollte dementsprechende also eine Servlet Klasse geben von der genau eine Instanz existieren sollte.
 

HyperHyper

Mitglied
HLX hat gesagt.:
HyperHyper hat gesagt.:
RaoulDuke hat gesagt.:
Hmm, stimmt. Habs gerade mal ausprobiert. Mit /* scheint es aber zu gehen.
Also mit "/*" gehts, allerdings habe ich dann das Problem, das es nun wieder viele verschiedene geladene Servlet-Klassen gibt (siehe hier). Das ist leider nicht erwünscht. Gibts noch ne andere möglichkeit?

Wie sieht´s denn in der 'web.xml' aus? Ist in den <servlet>-Tags evtl. <load-on-startup> gesetzt?
Also wenn ich:
Code:
<load-on-startup>1</load-on-startup>

hinzufüge, dann wird beim starten vom Tomcat meine Init() gleich 2x ausgeführt (Zeilen 12-13 und 30-31)!

Code:
26.09.2006 14:15:15 org.apache.coyote.http11.Http11Protocol init
INFO: Initializing Coyote HTTP/1.1 on http-8080
26.09.2006 14:15:15 org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 2423 ms
26.09.2006 14:15:15 org.apache.catalina.core.StandardService start
INFO: Starting service Catalina
26.09.2006 14:15:15 org.apache.catalina.core.StandardEngine start
INFO: Starting Servlet Engine: Apache Tomcat/5.0.28
26.09.2006 14:15:15 org.apache.catalina.core.StandardHost start
INFO: XML validation disabled
0    [main] INFO  root  Initialisiere Speicher...
30   [main] INFO  root Speicher wurde erfolgreich initialisiert!
26.09.2006 14:15:17 org.apache.catalina.core.StandardHost getDeployer
INFO: Create Host deployer for direct deployment ( non-jmx ) 
26.09.2006 14:15:17 org.apache.catalina.core.StandardHostDeployer install
INFO: Processing Context configuration file URL file:C:\Programme\Apache Software Foundation\Tomcat 5.0\conf\Catalina\localhost\admin.xml
26.09.2006 14:15:17 org.apache.struts.util.PropertyMessageResources <init>
INFO: Initializing, config='org.apache.struts.util.LocalStrings', returnNull=true
26.09.2006 14:15:17 org.apache.struts.util.PropertyMessageResources <init>
INFO: Initializing, config='org.apache.struts.action.ActionResources', returnNull=true
26.09.2006 14:15:18 org.apache.struts.util.PropertyMessageResources <init>
INFO: Initializing, config='org.apache.webapp.admin.ApplicationResources', returnNull=true
26.09.2006 14:15:20 org.apache.catalina.core.StandardHostDeployer install
INFO: Processing Context configuration file URL file:C:\Programme\Apache Software Foundation\Tomcat 5.0\conf\Catalina\localhost\balancer.xml
26.09.2006 14:15:20 org.apache.catalina.core.StandardHostDeployer install
INFO: Processing Context configuration file URL file:C:\Programme\Apache Software Foundation\Tomcat 5.0\conf\Catalina\localhost\manager.xml
26.09.2006 14:15:20 org.apache.catalina.core.StandardHostDeployer install
INFO: Installing web application at context path /SpeicherSystem from URL file:C:/Programme/Apache Software Foundation/Tomcat 5.0/webapps/SpeicherSystem
0    [main] INFO  root  Initialisiere Speicher...
10   [main] INFO  root Speicher wurde erfolgreich initialisiert!
26.09.2006 14:15:20 org.apache.catalina.core.StandardHostDeployer install
INFO: Installing web application at context path /jsp-examples from URL file:C:\Programme\Apache Software Foundation\Tomcat 5.0\webapps\jsp-examples
26.09.2006 14:15:20 org.apache.catalina.core.StandardHostDeployer install
INFO: Installing web application at context path  from URL file:C:\Programme\Apache Software Foundation\Tomcat 5.0\webapps\ROOT
26.09.2006 14:15:20 org.apache.catalina.core.StandardHostDeployer install
INFO: Installing web application at context path /servlets-examples from URL file:C:\Programme\Apache Software Foundation\Tomcat 5.0\webapps\servlets-examples
26.09.2006 14:15:21 org.apache.catalina.core.StandardHostDeployer install
INFO: Installing web application at context path /tomcat-docs from URL file:C:\Programme\Apache Software Foundation\Tomcat 5.0\webapps\tomcat-docs
26.09.2006 14:15:21 org.apache.catalina.core.StandardHostDeployer install
INFO: Installing web application at context path /webdav from URL file:C:\Programme\Apache Software Foundation\Tomcat 5.0\webapps\webdav
26.09.2006 14:15:21 org.apache.coyote.http11.Http11Protocol start
INFO: Starting Coyote HTTP/1.1 on http-8080
26.09.2006 14:15:21 org.apache.jk.common.ChannelSocket init
INFO: JK2: ajp13 listening on /0.0.0.0:8009
26.09.2006 14:15:21 org.apache.jk.server.JkMain start
INFO: Jk running ID=0 time=10/170  config=C:\Programme\Apache Software Foundation\Tomcat 5.0\conf\jk2.properties
26.09.2006 14:15:21 org.apache.catalina.startup.Catalina start
INFO: Server startup in 6729 ms
 

RaoulDuke

Bekanntes Mitglied
Also ich krig das so oder so nicht reproduziert. Wird jetzt bei jedem Aufruf einer URL das Init durchlaufen, oder was passiert genau?
 

HyperHyper

Mitglied
Also ich habe in der web.xml nun folgendes stehen:

Code:
<servlet-mapping>
    <servlet-name>speicherservlet</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>

Egal welche URL ich nun übergebe, die Init() wird jedesmal aufgerufen. Habe ich in der web.xml die Zeile:
Code:
<load-on-startup>1</load-on-startup>
...stehen, dann wird beim starten vom Tomcat das Init() sogar 2x ausgeführt!





Habe ich nun folgenden Eintrag in der web.xml stehen:
Code:
  <servlet-mapping>
    <servlet-name>speicherservlet</servlet-name>
    <url-pattern>/speicherservlet</url-pattern>
  </servlet-mapping>

Dann wird Init() nur einmal aufgerufen, und zwar wenn der erste Request reinkommt. Allerdings kann ich dann so nicht alle Requests auf mich umleiten. Dies ist auch die Ausgangssituation meiner Frage.




Habe mal zum Test ein ganz simples Servlet angelegt:
Code:
package servlettestpackage;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class for Servlet: Testservlet
 *
 */
 public class Testservlet extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
    /* (non-Java-doc)
	 * @see javax.servlet.http.HttpServlet#HttpServlet()
	 */
	public Testservlet() {
		super();
	}   	
	
	
	public void init( ) throws ServletException
	 {
		System.out.println("gestartet!!!");
	 }
	
	
	/* (non-Java-doc)
	 * @see javax.servlet.http.HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		System.out.println("Ein Request wurde empfangen!");
	}  	
	
	/* (non-Java-doc)
	 * @see javax.servlet.http.HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
	}   	  	    
}

...und dazu folgende web.xml erzeugt:
Code:
	<servlet-mapping>
		<servlet-name>Testservlet</servlet-name>
		<url-pattern>/*</url-pattern>
	</servlet-mapping>
..und siehe da - es funktioniert! Init() wird nur 1x aufgerufen und dann auch nie mehr wieder. Ich vermute es liegt an den "statischen Instanzvariablen" im Servlet "SpeicherServlet" (das von ein paar Postings weiter oben).
 

RaoulDuke

Bekanntes Mitglied
Die statischen Variablen im Servlet sollten kein Problem sein. Ich wüsste jedenfalls keinen Grund warum die bewirken könnten das init() mehrfach aufgerufen wird. Was genau macht denn deine Speicher Klasse? Vielleicht solltest du den Code auchmal hier posten.
 

HyperHyper

Mitglied
Die Speichernklasse ist nur ein kleines Singleton welches die Requests auswertet und in eine LinkedList speichert. Ich habe mal sämtlichen Code auskommentiert und teste nun woran es liegen könnte.
Allmählich habe ich das Gefühl das Eclipse mich verarscht! Manchmal deployed der nicht korrekt.
Ich teste mal alles jetzt Schritt für Schritt!
 

RaoulDuke

Bekanntes Mitglied
HyperHyper hat gesagt.:
RaoulDuke hat gesagt.:
Kann deine Speicher Klasse irgendwelche Exceptions werfen?
Ja die Speicherklasse wirft eigene Exceptions welche dann im Init() abgefangen werden.

Das hat vermutlich mit dem Problem jetzt nix zutun, aber bist du sicher das es eine gute Idee ist in einem Servlet ein System.exit() aufzurufen? Willst du den ganzen Tomcat abschiessen nur weil dein Servlet nicht startet? Ich glaub das ist ne schlechte Idee sowas zu machen.
 

HyperHyper

Mitglied
Hast recht, ich werd den Befehl entfernen.

So ich denke ich hab nun rausgefunden was diese doppelten Inits() auslöst - es sind meine Singleton-Klassen!
Hier mal die Klasse "singletonSpeicher":


Code:
package xyz.project.speichersystem;

import java.io.ObjectStreamException;
import java.util.LinkedList;
import javax.servlet.http.HttpServletRequest;



public class SingletonSpeicher {
	
	private static SingletonSpeicher INSTANCE = new SingletonSpeicher();
	
	private SingletonSpeicher() 
	{
	}

	
	

	public static synchronized SingletonSpeicher getInstance() throws SingletonSpeicherException
	{
		return INSTANCE;
	}
	
	public Object clone() throws CloneNotSupportedException
    {
		throw new CloneNotSupportedException(); 
    }
	

	private Object readResolve() throws ObjectStreamException
	{
		return INSTANCE;
	}

	
	public void addSpeicherObject(HttpServletRequest request)
	{
     // Mache irgendeine Aktion
  
  }
	
} // .EOF


Wenn ich nun dieses Mapping habe:
Code:
<servlet-mapping> 
    <servlet-name>speicherservlet</servlet-name> 
    <url-pattern>/*</url-pattern> 
  </servlet-mapping>

dann läuft mein System amok. Das Init() wird ziemlich oft aufgerufen wenn ich nun eine URL an mein Servlet übergebe.

Weis jetzt jemand zufällig warum diese Klasse dafür sorgt das Init() mehrfach aufgerufen wird?
 

HyperHyper

Mitglied
Also nach mehrmaligem testen bin ich nun zu der Erkenntnis gelangt, das meine Singleton-Klasse schuld an diesem Dilemma ist! Sobald ich diesen Befehl einbaue:
Code:
....
protected static Speicher singletonSpeicher;
....
...
....
singletonSpeicher = Speicher.getInstance();
ist schluss mit lustig und die ständigen Init()-Aufrufe fangen wieder an zu nerven. Das heisst wohl ich muss meine Singleton-Klasse überarbeiten (ob das geht?).
 

RaoulDuke

Bekanntes Mitglied
Kann ich so noch nix zu sagen. Was passiert denn genau in

public void addSpeicherObject(HttpServletRequest request)

?

Es ist eventuell keine gute Idee den ganzen Request zu speichern. Hol dir lieber aus dem Request die Informationen die du speichern willst schon vorher raus und übergib z.B. nur die URI an deinen Speicher.
 

HyperHyper

Mitglied
Bisher findet dort noch nicht viel statt. Ist ein reiner Test. Bevor ich nicht dieses Problem gelöst habe, kann ich eh nicht weitermachen.

Code:
public class SingletonSpeicher {
  
  private static LinkedList requestList = new LinkedList();


public void addSpeicherObject(HttpServletRequest request) 
   { 
     requestList.add(request.getRequestURI());
  
  }


Der Sinn warum ich das Singleton nehme ist der, das nämlich nur eine einzige Datenstruktur existiert welche jetzt z.B. die Requests speichert, auch wenn mehrere Requests gerade gleichzeitig eintreffen und somit mehrere Servlet-Threads existieren.
Also wenns nicht mit nem Singleton geht, würde ich auch eine andere Alternative dankend annehmen.
 

RaoulDuke

Bekanntes Mitglied
Ich kann das Verhalten auch weiterhin nicht reproduzieren.

Aber im Prinzip brauchst du eigentlich kein Singleton, deine LinkedList und vieles andere ist doch sowieso schon static, da kannste auch gleich die Zugriffsmethoden static machen und dann über die static Methoden drauf zugreifen.
 

HyperHyper

Mitglied
Glaub ich werd das wohl so machen müssen. Dachte ein Singleton käme eleganter rüber.
Ich versteh es auch nicht warum das nicht klappt jetzt. Scheint ein Problem mit "static" zu sein.
 

RaoulDuke

Bekanntes Mitglied
Also ich hab deine Speicher Klasse kopiert und ausprobiert, und ich kann damit genau wie schreibst die Request URIs speichern und wieder ausgeben, und mein init() wird trotzdem nur ein einziges Mal aufgerufen. Ein generelles Problem ist das also nicht.

Vielleicht machst du mir mal ein Eclipse Projekt bei dem das Problem auftritt und schickst mir das als zip, dann guck ich mal ob es sich hier aus so verhält.
 

HyperHyper

Mitglied
So ich hab das ganze mal ausgiebig getestet und ich glaub ich weis nun woher der Fehler kommt! Und zwar kommt es auf die Schreibweise an, wie ich mein Projekt mit dem Browser ansteuere.

Unter Tomcat wird mein Projekt in das Verzeichnis "../webapps/SpeicherSystem/" deployed. Rufe ich nun im Browser die folgenden URLs auf:

http://localhost:8080/SpeicherSystem/test
http://localhost:8080/SpeicherSystem/
http://localhost:8080/SpeicherSystem/wfklsdfj
http://localhost:8080/SpeicherSystem/moooo

..wird Init() nur einmal ausgeführt und ansonsten läuft alles rund.

Rufe ich nach diesen 4 URLs nun diese URL auf:

http://localhost:8080/speichersystem/test

dann wird Init() plötzlich erneut aufgerufen. Es kommt also auf die Gross/Kleinschreibung des Verzeichnisses drauf an, in welchem das Servlet nun liegt. Anders kann ich mir das nicht erklären.

Ein weiteres Hauptproblem dürfte Eclipse 3.2 sein. Das deployment funktioniert total fehlerhaft. Ziemlich oft übernimmt es nicht die neuesten Dateien. Ich deploy immer indem ich auf den Button "publish to the server" klicke.
Da mein Projektname leider nicht klein geschrieben ist (SpeicherSystem), gibts da irgendeine möglichkeit in Eclipse einzustellen das wenn ich deploye das Verzeichnis wo dabei angelegt wird, dann komplett in Kleinbuchstaben gehalten ist?

Werd wohl ein ANT-Skript schreiben müssen (hat jemand zufällig eines?).
 

HLX

Top Contributor
HyperHyper hat gesagt.:
Ein weiteres Hauptproblem dürfte Eclipse 3.2 sein. Das deployment funktioniert total fehlerhaft. Ziemlich oft übernimmt es nicht die neuesten Dateien. Ich deploy immer indem ich auf den Button "publish to the server" klicke.

Eclipse 3.2. scheint hier in der Tat nicht richtig zu funktionieren. I.d.R. hilft ein Neustart des Tomcat - lästig aber funktioniert.
 

HyperHyper

Mitglied
Also ich habe nachgeschaut und es ist nur die Applikation "SpeicherSystem" vorhanden. Allerdings interessiert das Tomcat nicht das wenn ich "http://localhost:8080/speichersystem/test" eintippe, diese URL gar nicht geben dürfte. Tomcat nimmt diese URL ebenfalls an.
 

RaoulDuke

Bekanntes Mitglied
Das kann eigentlich nicht. Das ist case-sensitive, ich habs extra bei mir nochmal ausprobiert. Was sagt denn das Tomcat Manager Webinterface? Da kannst du doch sehen welche Applikationen alle aktiv sind.
 

KSG9|sebastian

Top Contributor
Eclipse WTP ist ein fall für sich:

Schau mal im Tomcat-Temp-Verzeichnis nach. Oftmals werden die Anwendungen auf dem webapps-Verzeichnis nach tmp kopiert. Und die Anwendungen in tmp sind die welche im Browser laufen. Und gelöscht werden die Apps aus dem tmp Verzichnis nicht immer, v.a. nicht wenn diverse jars noch geladen sind (struts-jar ist mein ganz persönlicher Freund..grr).
 

HyperHyper

Mitglied
So ich hab mal im Tomcat-Manager reingeschaut und siehe da - es waren 2 Anwendungen, nämlich "SpeicherSystem" und "speichersystem" aufgelistet. Habe beide entfernt und neu deployed, und man glaubt es kaum - es waren wieder beide vorhanden. :? Wenn ich nun in das .../webapp/ -Verzeichnis reinschaue ist allerdings nur das Verzeichnis "SpeicherSystem" vorhanden.
Hab sowohl vom Eclipse aus, aber auch manuell deployed und das Ergebniss war jedesmal dasselbe (1 Verzeichniss und 2 Einträge im Manager).

Denk mal das ein Konfigurationsfehler vorliegt.

Im /tomcat5.0/temp/ -Verzeichnis ist nichts drinnen.


Nachtrag:
Nachdem ich die Datei "SpeicherSystem.war" entfernt hatte und nur noch das Verzeichnis "speichersystem" vorhanden war, ist im Manager auch nur noch ein Eintrag vorhanden.
 

HyperHyper

Mitglied
Hätte noch eine Frage zum Mapping. Und zwar wird bei diesem Mapping JEDE Anfrage weitergeleitet an mein Servlet.
Code:
<servlet-mapping> 
    <servlet-name>speicherservlet</servlet-name> 
    <url-pattern>/*</url-pattern> 
  </servlet-mapping>

Das schlechte daran ist das Webseiten welche dort vorhanden sind, nicht angesprochen werden können. Wie kann ich nun einen Filter einbauen, damit meine vorhandenen Webseiten nicht ebenfalls weitergeleitet werden?

Diese beiden Seiten sollen rausgefiltert werden:
/speichersystem/index.jsp
/speichersystem/hilfe.jsp
 

HyperHyper

Mitglied
Also ich glaub der erste Filter könnte was taugen, da dieser zuverlässig z.B. meine "index.jsp" herausfiltert. Allerdings weis ich nicht wie ichs in der Methode "doFilter" anstellen soll, das nun zu "index.jsp" weitergeleitet wird und nicht zu meinem Servlet.

Hier mal der Filter im Überblick:
Code:
package xyz.project.speichersystem; 

import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
import java.io.*;

/**
* Simple trace filter which prints
* output on web-server console.
*/
public class TraceFilter implements Filter {

  /**
  * Initialize simple trace filter
  * @param filter config
  */
  public void init(FilterConfig config) throws ServletException {
  }

  /**
  * Deinitialize simple trace filter  
  */
  public void destroy() {
  }

  /**
  * Handle the tracing (do filter operation)
  * @param servlet request
  * @param servlet response
  * @param filter chain
  */
  public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
  
    // print remote hostname
    System.out.println("Remote host = " + ((HttpServletRequest) request).getRemoteHost());
  
    
    // hier müsste der Filter nun zu z.B. "index.jsp" weiterleiten. Tut er aber nicht,
    // er leitet immer noch zum Servlet "speicherservlet" weiter.
    
    chain.doFilter(request,response);
  }
}

Der Eintrag in der "web.xml":
Code:
<filter>
		<filter-name>TraceFilter</filter-name>
		<filter-class>xyz.project.speichersystem.TraceFilter</filter-class>
	</filter>

	<filter-mapping>
		<filter-name>TraceFilter</filter-name>
		<url-pattern>/index.jsp</url-pattern>
	</filter-mapping>



<servlet-mapping> 
    <servlet-name>speicherservlet</servlet-name> 
    <url-pattern>/*</url-pattern> 
  </servlet-mapping>
 

HyperHyper

Mitglied
Ich schaus mir grad an, ist aber ziemlich schwer zu konfigurieren. In der web.xml muss das Mapping auf /* stehen, damit alle Requests auch so weitergeleitet werden, damit ich die URL rausziehen kann.

Code:
<servlet-mapping> 
    <servlet-name>speicherservlet</servlet-name> 
    <url-pattern>/*</url-pattern> 
  </servlet-mapping>

Das schwierige ist nun beim URLRewrite einen Filter zu basteln, welcher einzelne URLs wie z.B. "index.jsp" nicht an das Servlet weiterleitet.
 

HyperHyper

Mitglied
So nach Stunden der Qualen (hab echt jeden Sch**** ausprobiert) bin ich dann ENDLICH auf die einfachste Lösung gekommen.

Code:
<servlet-mapping> 
    <servlet-name>speicherservlet</servlet-name> 
    <url-pattern>/ss/*</url-pattern> 
  </servlet-mapping>

Aufrufe der Art:
http://localhost:8080/speichersystem/ss/test
http://localhost:8080/speichersystem/ss/irgendwas.html

werden wie gewohnt ans Servlet weitergeleitet.

Und Aufrufe dieser Art:
http://localhost:8080/speichersystem/index.html
http://localhost:8080/speichersystem/admin.jsp

werden NICHT mehr an dieses elende §$&!)$% Servlet weitergeleitet.

Eigentlich total simpel, aber sowas übersieht man halt viel zu leicht (hätte wohl gestern doch nicht soviel auf der Wiesn bechern sollen :lol: ). :bae:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Tomcat Application Path bestimmen Allgemeines EE 0
TheWhiteShadow JSF plugins für tomcat webapp Allgemeines EE 0
X Tomcat checkParachute Allgemeines EE 3
C Servlet Tomcat/Jersey findet REST-Service nicht Allgemeines EE 3
J Global JNDI Tomcat Allgemeines EE 0
N WebService WAR-File auf Tomcat-Server Allgemeines EE 1
C WebSocket in Tomcat wirft 404 Allgemeines EE 0
S Eclipse mit Tomcat und Jersey Allgemeines EE 7
S Fehlersuche in Eclipse/Tomcat -> Error-log?? Allgemeines EE 2
S Tomcat und 404 -> von jetzt auf gleich Allgemeines EE 4
L JNDI auf Tomcat mit EE Allgemeines EE 4
E Servlet Tomcat Method Signature Resolution Allgemeines EE 7
J Logging und Monitoring unter Tomcat Allgemeines EE 2
aze Tomcat:Error Pages werden nicht angezeigt Allgemeines EE 4
D JSF JSF 2.0 + ICEFaces + Tomcat 7 Allgemeines EE 3
R Sessionmanagement und Tomcat Allgemeines EE 6
W Tomcat Support mit SLA? Allgemeines EE 3
P Tomcat lädt falsche Datei obwohl richtig angegeben Allgemeines EE 11
N Tomcat funktioniert nach shutdown/startup nicht mehr korrekt Allgemeines EE 9
B Tomcat, JNDI und datasource - Konfiguartion Allgemeines EE 2
JimPanse Tomcat Fehler nach redeploy Allgemeines EE 5
A Java Tomcat findet Website nicht Allgemeines EE 8
S Anfängerfrage Eclipse/Tomcat Allgemeines EE 4
H Installer für Tomcat-Anwendung Allgemeines EE 5
A Tomcat in Eclipse Allgemeines EE 11
T Tomcat: Sessions bleiben zu lange erhalten Allgemeines EE 13
C Tomcat Zugriff auf lokale Dateien Allgemeines EE 2
A Tomcat, Exceptions beim redeploy Allgemeines EE 4
P Hilfe: Tomcat periodischer Absturz Allgemeines EE 5
MQue Tomcat reload Allgemeines EE 4
neurox Tomcat stoppen Allgemeines EE 1
S Unterschied zwischen Tomcat und Application Server? Allgemeines EE 3
MQue Tomcat PermGen Allgemeines EE 7
MQue Tomcat Methodenaufruf Allgemeines EE 3
P Eclipse Tomcat Plugin funktioniert nicht mit externem TC-Server? Allgemeines EE 4
MQue TCP- Verbindung nach Tomcat- Start (global) starten Allgemeines EE 4
reibi Tomcat Proxy eintragen Allgemeines EE 2
P CXF Project auf Tomcat laufen lassen - wie? Allgemeines EE 35
R (TOMCAT] Installation Tomcat auf WinXP Allgemeines EE 8
S Tomcat + Eclipse Allgemeines EE 6
T Security Manager in Tomcat Allgemeines EE 2
S Unterschiedliche Pfade bei Tomcat Allgemeines EE 4
ps EJB3 in Tomcat. das hat selbst mich erstaunt Allgemeines EE 18
B Tomcat Manager - .war Datei hochladen. Einfache Frage Allgemeines EE 5
G Probleme im Tomcat - loading WebappClassLoader Allgemeines EE 3
O ApplicationServer vs. Tomcat Allgemeines EE 5
G Verbindung zu Tomcat Allgemeines EE 15
B Tomcat -> Funktions User Credentials hinterlegen Allgemeines EE 7
B fmt:setBundle => Wo liegt die Properties-Datei im Tomcat? Allgemeines EE 3
U Tomcat Compilierproblem Allgemeines EE 2
A Tomcat -- JSP: komisches Problem Allgemeines EE 11
W Speicher-Problem bei WebApp unter Tomcat, Struts, Hibernate Allgemeines EE 3
M Gelegentlicher Absturz Tomcat Anwendung: PermGen Space Allgemeines EE 6
R Error ServletContextListener auf Tomcat 6 Allgemeines EE 2
Y myFaces 1.2 und Tomcat 5.x / 6.0 Allgemeines EE 9
S tomcat session timeout - und was danach? Allgemeines EE 1
A Tomcat startet nicht, Einstellungsfehler? Allgemeines EE 3
S Auf Datei ausserhalb des Tomcat zugreifen Allgemeines EE 4
S JSP / Tomcat / Eclipse / Unable to compile class for JSP Allgemeines EE 4
E JBoss mit existierendem Tomcat nutzen? Allgemeines EE 4
M JSP: Tomcat: Serverfehler 500 nur beim IE. Allgemeines EE 2
G JSF 1.2 unter Netbeans 6 mit Tomcat 6.0 ->Navigationsprob Allgemeines EE 6
O eclipse - tomcat: Problem bei einfachem Webservice Allgemeines EE 16
L Tomcat Service mit JPDA debugging starten Allgemeines EE 2
J Tomcat: "Unable to get connection, DataSource invalid&q Allgemeines EE 8
A web.xml für Servlet in Tomcat 5.5 erstellen Allgemeines EE 2
F Tomcat: zentraler Class-Ordner? Allgemeines EE 2
A web.xml für Servlet in Tomcat erstellen Allgemeines EE 6
T Tomcat: JNDI + JDBC Problem Allgemeines EE 3
N Zugriff auf Webapp nur für localhost definieren (Tomcat) Allgemeines EE 2
byte Tomcat Deployment Problem (HTTP Status 503) Allgemeines EE 8
H Tomcat, MySQL Allgemeines EE 4
B tomcat verbergen Allgemeines EE 3
M classNotFoundexception vom tomcat Allgemeines EE 10
B Liferay + Tomcat Allgemeines EE 4
K tomcat: session-unabhängiges speichern Allgemeines EE 3
G Tomcat übersetzt nichts mehr Allgemeines EE 6
M tomcat beim booten mit starten Allgemeines EE 4
F Serverdienst in Tomcat implementieren Allgemeines EE 14
J Tomcat mit eigener Session-Implementierung Allgemeines EE 15
V tomcat 6 webserver oder was ist sein Sinn? Allgemeines EE 3
G eigener Tomcat-Connector f. propiet. Protokoll via TCP/IP Allgemeines EE 2
J wsdl-tomcat-AXIS Allgemeines EE 2
G Tomcat unter Eclipse starten Allgemeines EE 9
F Tomcat mit 128 MB Ram Allgemeines EE 9
C Unable to query Tomcat Manager: couldn't connect to host Allgemeines EE 2
A Cronjob mit Tomcat starten ? Allgemeines EE 4
B Connection Poll ohne TomCat Allgemeines EE 5
N Tomcat GWT-Anwendung - An beliebiger Stelle schreiben Allgemeines EE 2
E Tomcat Einstellungen Allgemeines EE 10
B Servlet-Api.jar auf JBoss? (Migration von Tomcat zu JBoss) Allgemeines EE 4
H Eine kurze Verständnisfrage zum Tomcat Allgemeines EE 2
S Hibernate, Tomcat und Eclipse treiben mich zum Wahnsinn. Allgemeines EE 2
F webanwendung läuft nicht auf Tomcat Allgemeines EE 2
M Tomcat, Hibernate, MySQL und die EOFException Allgemeines EE 7
Y Tomcat Thread-Handling Allgemeines EE 2
K Tomcat als Client nutzen Allgemeines EE 2
L Tomcat auf Windows Server 2003 Allgemeines EE 10
T Sysdeo Eclipse Tomcat Plug-in Allgemeines EE 4
H Tomcat in jbuilder mit startup.bat starten Allgemeines EE 5

Ähnliche Java Themen

Neue Themen


Oben