Java tomcat无法获取ServletContext.getContextPath()
我正在尝试获取contextPath,但遇到此异常Java tomcat无法获取ServletContext.getContextPath(),java,tomcat,contextpath,Java,Tomcat,Contextpath,我正在尝试获取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
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>
utils.ServletContextHandler
您能帮我吗?您需要在某个地方设置存储上下文路径。例如,您可以执行以下操作:-
public class ServletContextHandler implements ServletContextListener {
...
public void contextInitialized(ServletContextEvent contextEvent){
MyServletContext.setContextPath(contextEvent.getServletContext().getContextPath());
}
...
}
在本例中,我创建了MyServletContext
,它基本上包含两个静态方法,允许您设置和获取存储的上下文路径:-
public class MyServletContext {
private static String contextPath;
private MyServletContext() {
}
public static String getContextPath() {
return contextPath;
}
public static void setContextPath(String cp) {
contextPath = cp;
}
}
要获取上下文路径,您需要调用
MyServletContext.getContextPath()
,而不是执行request.getContextPath()
,将上下文路径设置为存储在某个位置。例如,您可以执行以下操作:-
public class ServletContextHandler implements ServletContextListener {
...
public void contextInitialized(ServletContextEvent contextEvent){
MyServletContext.setContextPath(contextEvent.getServletContext().getContextPath());
}
...
}
在本例中,我创建了MyServletContext
,它基本上包含两个静态方法,允许您设置和获取存储的上下文路径:-
public class MyServletContext {
private static String contextPath;
private MyServletContext() {
}
public static String getContextPath() {
return contextPath;
}
public static void setContextPath(String cp) {
contextPath = cp;
}
}
要获取上下文路径,您需要调用ServletContext.getContextPath(),而不是执行
request.getContextPath()
,,ServletContext.getContextPath()仅在Servlet 2.5规范中可用。您的web.xml部署描述符使用2.3 DTD,因此它强制Servlet 2.3兼容。
如果您在Tomcat 6.0.x或更高版本上运行,请将web.xml中的DOCTYPE与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">
如果解决了问题,请告诉我。ServletContext.getContextPath()仅在Servlet 2.5规范中可用。您的web.xml部署描述符使用2.3 DTD,因此它强制Servlet 2.3兼容。 如果您在Tomcat 6.0.x或更高版本上运行,请将web.xml中的DOCTYPE与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">
如果解决了问题,请告诉我。那么,堆栈跟踪现在在哪里?由于它不在日志文件提取中,我想Tomcat会将其错误输出放在标准输出以外的另一个文件中(您在这里显示了标准输出)。这是什么:Tomcat.localhost./photo.Context?您有什么上下文:您在URL中输入了什么来执行您的appSo,这个堆栈跟踪现在在哪里?由于它不在日志文件提取中,我想Tomcat会将其错误输出放在标准输出以外的另一个文件中(您在这里显示了标准输出)。这是什么:Tomcat.localhost./photo.Context?你有什么样的上下文:你在URL中输入什么来执行你的应用是的,这是我想要做的,但是我在调用“contextEvent.getServletContext().getContextPath()”方法时遇到了这个异常在这里发布你的整个
e.printStackTrace()
。上面错误的第二行和第三行似乎不是来自ServletContextHandler
类。是的,这是我想要做的,但我在调用“contextEvent.getServletContext().getContextPath()”方法时遇到了这个异常。请将整个e.printStackTrace()
发布到这里。上面错误的第二行和第三行似乎不是来自ServletContextHandler
类。