tomcat не может получить ServletContext.getContextPath () - PullRequest
1 голос
/ 22 февраля 2011

Я пытаюсь получить contextPath, но получаю это исключение

ServletContextHandler.contextInitialized()HERE MY PRINT
 2011-02-22 02:45:38,614 ERROR main tomcat.localhost./photo.Context - Error listenerStart
 2011-02-22 02:45:38,615 ERROR main tomcat.localhost./photo.Context - Context startup failed due to previous errors

это мой ServletContextListener класс

public class ServletContextHandler implements ServletContextListener {
  private final static Logger logger = Logger.getLogger(ServletContextHandler.class);

  public ServletContextHandler(){}

  public void contextInitialized(ServletContextEvent contextEvent){
    try{
    //LOG DEBUG
    logger.debug("Server.init()-> set context path");
    System.out.println("ServletContextHandler.contextInitialized()HERE MY PRINT");
    System.out.println("ServletContextHandler.contextInitialized() " + contextEvent.getServletContext().getContextPath());
    }catch(Exception e){
      e.printStackTrace();
    }
  }

  public void contextDestroyed(ServletContextEvent contextEvent){
  }

}

, а это мой web.xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/j2ee/dtds/web-app_2_3.dtd">

<web-app>
     <listener>
        <listener-class>
            utils.ServletContextHandler
        </listener-class>
    </listener>
</web-app>

Можете ли вы помочь мне, пожалуйста?

Ответы [ 2 ]

1 голос
/ 23 февраля 2011

ServletContext.getContextPath () доступен только из спецификации Servlet 2.5.Ваш дескриптор развертывания web.xml использует 2.3 DTD, поэтому он обеспечивает совместимость с сервлетом 2.3.Если вы работаете на Tomcat 6.0.x или более поздней версии, замените DOCTYPE в вашем web.xml ссылкой на схему 2.5:

<web-app xmlns="http://java.sun.com/xml/ns/javaee"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
   version="2.5">

Дайте мне знать, если это решит проблему.

0 голосов
/ 22 февраля 2011

Вам нужно будет где-то установить путь к хранилищу контекста.Например, вы можете сделать что-то вроде этого: -

public class ServletContextHandler implements ServletContextListener {

  ...

  public void contextInitialized(ServletContextEvent contextEvent){
     MyServletContext.setContextPath(contextEvent.getServletContext().getContextPath());
  }

  ...
}

В этом примере я создал MyServletContext, который в основном содержит 2 статических метода, которые позволяют вам установить и получить путь к хранимому контексту: -

public class MyServletContext {
    private static String   contextPath;

    private MyServletContext() {
    }

    public static String getContextPath() {
        return contextPath;
    }

    public static void setContextPath(String cp) {
        contextPath = cp;
    }

}

Чтобы получить путь к контексту, вместо выполнения request.getContextPath(), вы вызываете MyServletContext.getContextPath().

...