2012-12-14 14 views
7

Używam wersji 2.4 z Servlet i potrzebuję uzyskać ContextPath za pośrednictwem metody init(), która jest wywoływana na początku serwera, więc nie mam żadnych Zażądaj obiektu, który mógłby wywołać getContextPath(), a ponieważ wersja Servlet nie mam również metody getContextPath() w ServletContext.Jak uzyskać ContextPath w init() Metoda Servlet wersji 2.4

Czy jest jakiś sposób, aby uzyskać ten ContextPath()?

+0

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

+0

jest to null w moim przypadku:/ – Lama

Odpowiedz

-1

Spróbuj kod:

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

To powinno działać

+1

To da prawdziwą ścieżkę do systemu plików do katalogu webapp (np. '/ var/tomcat/webapps/foo'), a nie ścieżkę kontekstu, w którym aplikacja jest wdrażana ('/foo') . Jak mówi krampstudio, Servlet 2.5 dodał 'getContextPath()' do 'ServletContext', zwracając" pierwotną "ścieżkę kontekstu dla aplikacji, ale w wersji 2.4 lub wcześniejszej można uzyskać tylko ścieżkę dla określonego żądania. –

1

jesteś w Servlet 2.4 obiektu ServeltContext nie ma metody getContextPath.

mogę zaproponować dwie opcje:

  1. ustawiona ścieżka kontekstu jako parametr apletu:

    <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. spróbować ustalić ścieżka kontekstu od t Metoda on getRealPath()

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

Zgodnie z dokumentacją:

Zwraca ciąg zawierający rzeczywistą ścieżkę dla danej ścieżki wirtualnej. Na przykład ścieżka "/index.html" zwraca bezwzględną ścieżkę pliku na system plików serwera będzie obsługiwany przez żądanie dla "http: //host/contextPath/index.html", gdzie contextPath jest ścieżka kontekstu tego kontekstu serwletu.

2

jedną aplikację można opublikowane w różnych ścieżkach context tak ścieżka kontekstu (liczbę pojedynczą), ma znaczenie tylko w kontekście konkretnego żądania. Serwlet 2.5 dodał getContextPath() do ServletContext, określony w celu zwrócenia "podstawowej" ścieżki kontekstowej dla tej aplikacji internetowej, ale nie ma niezależnego od kontenera sposobu uzyskania dostępu do tych informacji we wcześniejszych wersjach specyfikacji.

Możliwe, że istnieją sztuczki, które działają w przypadku niektórych kontenerów, na przykład na serwerze Tomcat metoda ServletContext.getResource() zwraca adresy URL ze schematem niestandardowym w postaci jndi://hostname/context/....W ten sposób może być w stanie używać

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

uzyskać ścieżkę kontekstowe na Tomcat (lub ewentualnie getResource("/WEB-INF/web.xml") i odciąć ogon, jak getResource() jest określona, ​​aby powrócić null jeśli zapytać go do pliku, który nie istnieje) . Będziesz musiał eksperymentować z różnymi pojemnikami, aby znaleźć podobne sztuczki, które na nich działają.

Powiązane problemy