如何在java程序中调用getServletContext()。
基本上我在jsp应用程序中使用java包。我想以某种方式得到工作目录。
System.getProperty(“user.dir”)给了我tomcat根目录,这不是我想要的。
答案 0 :(得分:0)
如何致电
getServletContext()
在java程序中。
您只有在定义ServletContextListener
时才能这样:
public class ServletContextHolder implements ServletContextListener{
private static ServletContextHolder INSTANCE = null;
public static ServletContextHolder getInstance(){
return INSTANCE;
}
private ServletContext servletContext;
public ServletContext getServletContext(){
return servletContext;
}
@Override
public void contextDestroyed(final ServletContextEvent event){
servletContext = null;
INSTANCE=null;
}
@Override
public void contextInitialized(final ServletContextEvent event){
servletContext = event.getServletContext();
INSTANCE=this;
}
}
在web.xml中将其定义为侦听器。
现在,从您正在运行的网络应用程序中,将其命名为:
ServletContextHolder.getInstance().getServletContext();
答案 1 :(得分:0)
您可以通过将ResourceLoader
传递给ServletContextListener
来创建单身ServletContext
并在ResourceLoader
中初始化它。
然后,您可以使用此public class ResourceLoader {
private static ResourceLoader instance = new ResourceLoader();
private ServletContext context;
/**
*
*/
private ResourceLoader(){
}
/**
*
*/
public static ResourceLoader getInstance(){
return instance;
}
/**
* @param resourceName
* @return
*/
public InputStream getResourceAsStream(String resourceName) {
if(context == null){
throw new IllegalStateException("ResourceLoader is not initialized.");
}
return context.getResourceAsStream(resourceName);
}
/**
* @param context
*/
public void setContext(ServletContext context){
this.context = context;
}
}
加载以后需要的任何资源,如下所示:
ServletContextLister
您必须使用contextInitialized()
的{{1}}方法对其进行初始化,如下所示:
ResourceLoader.getInstance().setContext(servletContextEvenet.getServletContext());
您可以在应用程序中的任何其他位置使用:
ResourceLoader.getInstance().getResourceAsStream(resourceName);