如何从jsp调用的java包中获取工作目录?

时间:2011-02-04 11:13:59

标签: java jsp tomcat servlets packages

抱歉语法不好。

如何在java程序中调用getServletContext()。

基本上我在jsp应用程序中使用java包。我想以某种方式得到工作目录。

System.getProperty(“user.dir”)给了我tomcat根目录,这不是我想要的。

2 个答案:

答案 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);