2012-12-14 4 views
7

Ich bin mit der Version 2.4 von Servlet zu bekommen und ich brauche die ContextPath durch die init() Methode zu erhalten, die auf Serverstart aufgerufen wird, so dass ich keine Anfrage Objekt, die getContextPath() aufrufen könnte und weil die Servlet-Version habe ich getContextPath() Methode in der ServletContext entweder nicht.Wie ContextPath in init() Methode der Servlet-Version 2.4

Gibt es eine Möglichkeit, diese ContextPath() irgendwie zu bekommen?

+0

[ServletContext.getServletContextName()] (http://docs.oracle.com/javaee/1.4/api/javax/servlet/ServletContext.html#getServletContextName()) - ServletConfig.getServletContext(). GetServletContextName() –

+0

das ist in meinem Fall null:/ – Lama

Antwort

-1

diesen Code Versuchen:

class demo extends HttpServlet { 
     public void init(ServletConfig config) { 
      String path = config.getServletContext().getRealPath("/"); 
     } 
} 

Es sollte funktionieren

+1

Das wird den richtigen Dateisystempfad zum Webapp-Verzeichnis geben (zB '/ var/tomcat/webapps/foo'), nicht den Kontextpfad, in dem die App bereitgestellt wird ('/foo') . Wie Krampstudio sagt, hat Servlet 2.5 '' getContextPath() 'zu' ServletContext' hinzugefügt, wobei der "primäre" Kontextpfad für die Anwendung zurückgegeben wird, aber in 2.4 oder früher können Sie nur den Pfad für eine bestimmte Anfrage erhalten. –

1

Sie sind direkt im Servlet 2.4 das Objekt ServeltContext hat nicht die Methode getContextPath.

kann ich zwei Möglichkeiten vorschlagen:

  1. Stellen Sie den Kontextpfad als Parameter des Servlets:

    <servlet>

    <servlet-name>initServlet</servlet-name> 
    
    <servlet-class>net.cirrus-it.InitServlet`</servlet-class> 
    
    <init-param> 
         <param-name>contextPath</param-name> 
         <param-value>/myApp</param-value> 
    </init-param> 
    

    </servlet>

  2. versuchen zu bestimmen, der Kontextpfad von t er Methode getRealPath()

http://tomcat.apache.org/tomcat-5.5-doc/servletapi/javax/servlet/ServletContext.html#getRealPath(java.lang.String)

Nach der Dokumentation:

Gibt einen String den echten Pfad für einen bestimmten virtuellen Pfad enthält. Zum Beispiel gibt der Pfad "/index.html" den absoluten Dateipfad unter zurück. Das Dateisystem des Servers würde durch eine Anfrage für "http: //host/contextPath/index.html" bedient, wobei contextPath der Server ist Kontextpfad dieses ServletContext.

2

Eine Webapplikation kann an mehreren verschiedenen Kontextpfaden veröffentlicht, so der Kontextpfad (Singular) in Zusammenhang mit einer bestimmten Anforderung nur dann sinnvoll ist. Servlet 2.5 fügte getContextPath() zu ServletContext hinzu, um den "primären" Kontextpfad für diese Webanwendung zurückzugeben, aber es gibt keine Container-unabhängige Möglichkeit, auf diese Information in früheren Spezifikationsversionen zuzugreifen.

Es kann Tricks geben, die für bestimmte Container funktionieren. Beispielsweise gibt die Methode ServletContext.getResource() bei Tomcat URLs mit einem benutzerdefinierten Schema im Format jndi://hostname/context/... zurück.So können Sie in der Lage sein

ctx.getResource("/").getPath() 

zu verwenden, um den Kontextpfad auf Tomcat zu bekommen (oder möglicherweise getResource("/WEB-INF/web.xml") und den Schwanz abschneiden, als getResource() angegeben null zurück, wenn Sie es für eine Datei fragen, die nicht existiert) . Sie müssen mit verschiedenen Containern experimentieren, um ähnliche Tricks zu finden, die an diesen arbeiten.

Verwandte Themen