Tomcat Startet nicht , keine Fehlermeldung

HuRaHoRRe

Erfahrenes Mitglied
Hi

Ich habe aus einem Buch ein Servlet welches Error Codes usw auslesen soll,
in der server.xml habe ich eine entsprechende Zeile hinzugefügt:

Code:
<Valve className="com.asetronics.error.MissingPageValve"/>

Das servlet habe ich kompiliert, in eine jar datei kepackt und in die Server/lib kopiert.
Habe ich die Valve im server.xml nicht eingefügt startet tomcat ganz normal, ist sie jedoch drin ist nur ein bruchteil einer sekunde das Tomcat Fenster zu sehen und dann schmiert er ab.

Meine vermutung ist, das etwas mit dem Servlet nicht stimmt.
Obwohl es ja eigentlich komplett aus dem Buch übernommen wurde...

meine server.xml:

Code:
<?xml version='1.0' encoding='utf-8'?>
<Server port="8105">
  <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener"/>
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"/>
  <GlobalNamingResources>
    <Environment name="simpleValue" type="java.lang.Integer" value="30"/>
    <Resource auth="Container" description="User database that can be updated and saved" name="UserDatabase" type="org.apache.catalina.UserDatabase"/>
    <ResourceParams name="UserDatabase">
      <parameter>
        <name>factory</name>
        <value>org.apache.catalina.users.MemoryUserDatabaseFactory</value>
      </parameter>
      <parameter>
        <name>pathname</name>
        <value>conf/tomcat-users.xml</value>
      </parameter>
    </ResourceParams>
  </GlobalNamingResources>
  <Service name="Catalina">
    <Connector acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" port="8180" redirectPort="8443" maxSpareThreads="75" maxThreads="150" minSpareThreads="25">
    </Connector>
    <Connector port="8109" protocol="AJP/1.3" protocolHandlerClassName="org.apache.jk.server.JkCoyoteHandler" redirectPort="8443">
    </Connector>
    <Engine defaultHost="localhost" name="Catalina">
      <Valve className="com.asetronics.error.MissingPageValve"/>
      <Host appBase="webapps" name="localhost">
        <Logger className="org.apache.catalina.logger.FileLogger" prefix="localhost_log." suffix=".txt" timestamp="true"/>
      </Host>
      <Logger className="org.apache.catalina.logger.FileLogger" prefix="catalina_log." suffix=".txt" timestamp="true"/>
      <Realm className="org.apache.catalina.realm.UserDatabaseRealm"/>
    </Engine>
  </Service>
</Server>

und das Servlet:

Java:
package com.asetronics.error;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.IOException;
import java.io.Writer;
import java.util.Enumeration;
import java.util.HashMap;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletRequest;

import org.apache.catalina.HttpResponse;
import org.apache.catalina.Logger;
import org.apache.catalina.Request;
import org.apache.catalina.Response;
import org.apache.catalina.ValveContext;
import org.apache.catalina.valves.ValveBase;

public class MissingPageValve extends ValveBase {
    private HashMap redirects;
    private String errorPageFile;
    private String errorPage;

    public MissingPageValve() {
        super();
        redirects = new HashMap();
        redirects.put("/unleashed/boo", "/author/Intranet.html");
        errorPage = new String();
        errorPage += "<html><head>\n";
        errorPage += "<title>Seite verschoben</title>\n";
        errorPage += "</head><body><br/><br/>\n";
        errorPage += 
          "<center><h1>Seite wurde verschoben!</h1></center>\n";
        errorPage += "<table width=\"450\"><tr><td>\n";
        errorPage += "Die Seite ${requestedPage} wurde nach ";
        errorPage += 
          "<a href=\"${redirectToURL}\">${redirectTo}</a>";
        errorPage += 
          "verschoben. Aktualisieren Sie bitte Ihre Lesezeichen.\n";
        errorPage += "</td></tr></table></body></html>";
    }

    public String getErrorPageFile() {
        return errorPageFile;
    }

    public void setErrorPageFile(String errorPageFile) {
        this.errorPageFile = errorPageFile;

        try {
            File f = new File(System.getProperty("catalina.base") + 
                "/" + errorPageFile);

            errorPage = new String();

            BufferedReader br = new BufferedReader(
                                                 new FileReader(f));
            while (br.ready()) {
                errorPage += br.readLine();
            }
            br.close();
        } catch (IOException ioe) {
            String msg = "Kann Datei nicht öffnen: " +
                System.getProperty("catalina.base") + "/" + 
                                   errorPageFile;
            System.err.println(msg);
            System.err.println(ioe.toString());
        }

    }

    public void invoke(Request request, Response response,
            ValveContext context) throws IOException, 
                                         ServletException {

        ServletRequest sReq = request.getRequest();
        HttpServletRequest hsReq = (HttpServletRequest) sReq;
        String requestURI = hsReq.getRequestURI();
        String requestURL = hsReq.getRequestURL().toString();

        System.out.println();
        System.out.println(requestURI);

        context.invokeNext(request, response);

        ServletResponse sRes = (ServletResponse) response;
        HttpResponse htRes = (HttpResponse) response;
        HttpServletResponse hsRes = (HttpServletResponse) sRes;

        if (sRes.isCommitted()) return;

        if (!(response instanceof HttpResponse)) return;
        if (!(response instanceof HttpServletResponse)) return;

        int statusCode = htRes.getStatus();

        if (statusCode == 400 || statusCode == 404) {
            response.setSuspended(false);
            System.out.println("Seite nicht gefunden: " 
                               + requestURI);

            try {
                hsRes.reset();
            } catch (IllegalStateException ise) { }

            String redirectTo = (String)redirects.get(requestURI);
            hsRes.setStatus(200);

            if (redirectTo != null) {
               int pos = requestURL.indexOf(requestURI);
               String redirectToURL = requestURL.substring(0, pos) +
                                                         redirectTo;
               writeErrorPage(request, response,
                    requestURI, redirectTo, redirectToURL);
            }
        }
    }

    private void writeErrorPage(Request request, Response response,
            String requestedPage, String redirectTo, 
            String redirectToURL) throws IOException {

        HttpServletResponse hsRes = (HttpServletResponse) response;
        StringBuffer thisErrorPage = new StringBuffer(errorPage);
        replace(thisErrorPage, "${redirectTo}", redirectTo);
        replace(thisErrorPage, "${redirectToURL}", redirectToURL);
        replace(thisErrorPage, "${requestedPage}", requestedPage);

        Writer writer = response.getReporter();

        if (writer != null) {
            hsRes.setContentType("text/html");
            writer.write(thisErrorPage.toString());
        }
    }

    private void replace(StringBuffer thisErrorPage, String literal,
        String value) {

        int pos = thisErrorPage.toString().indexOf(literal);

        while (pos > -1) {
            thisErrorPage.replace(pos, pos+literal.length(), value);
            pos = thisErrorPage.toString().indexOf(literal);
        }
    }
}

Ich versuche nun schon seit Tagen eine Dynamische Error Page hinzukriegen....
Ich hoffe jemand kann mir helfen :rolleyes:
 

Neue Beiträge

Zurück