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.
SCHWERWIEGEND: Parse error in application web.xml
java.lang.IllegalArgumentException: Invalid <url-pattern> * in servlet mapping
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 hat gesagt.:Hmm, stimmt. Habs gerade mal ausprobiert. Mit /* scheint es aber zu gehen.
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?
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
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?RaoulDuke hat gesagt.:Hmm, stimmt. Habs gerade mal ausprobiert. Mit /* scheint es aber zu gehen.
Wie sieht´s denn in der 'web.xml' aus? Ist in den <servlet>-Tags evtl. <load-on-startup> gesetzt?
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.
Also wenn ich:HLX hat gesagt.: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?RaoulDuke hat gesagt.:Hmm, stimmt. Habs gerade mal ausprobiert. Mit /* scheint es aber zu gehen.
Wie sieht´s denn in der 'web.xml' aus? Ist in den <servlet>-Tags evtl. <load-on-startup> gesetzt?
<load-on-startup>1</load-on-startup>
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
<servlet-mapping>
<servlet-name>speicherservlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
<load-on-startup>1</load-on-startup>
<servlet-mapping>
<servlet-name>speicherservlet</servlet-name>
<url-pattern>/speicherservlet</url-pattern>
</servlet-mapping>
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
}
}
<servlet-mapping>
<servlet-name>Testservlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
Ja die Speicherklasse wirft eigene Exceptions welche dann im Init() abgefangen werden.RaoulDuke hat gesagt.:Kann deine Speicher Klasse irgendwelche Exceptions werfen?
HyperHyper hat gesagt.:Ja die Speicherklasse wirft eigene Exceptions welche dann im Init() abgefangen werden.RaoulDuke hat gesagt.:Kann deine Speicher Klasse irgendwelche Exceptions werfen?
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
<servlet-mapping>
<servlet-name>speicherservlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
....
protected static Speicher singletonSpeicher;
....
...
....
singletonSpeicher = Speicher.getInstance();
public class SingletonSpeicher {
private static LinkedList requestList = new LinkedList();
public void addSpeicherObject(HttpServletRequest request)
{
requestList.add(request.getRequestURI());
}
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.
<servlet-mapping>
<servlet-name>speicherservlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
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);
}
}
<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>
<servlet-mapping>
<servlet-name>speicherservlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>speicherservlet</servlet-name>
<url-pattern>/ss/*</url-pattern>
</servlet-mapping>