Как я могу получить рабочий каталог внутри java-пакета, вызываемого из jsp? - PullRequest
0 голосов
/ 04 февраля 2011

извините за плохую грамматику.

Как я могу вызвать getServletContext () внутри Java-программы.

В основном я использую java-пакет внутри jsp-приложения. Хочу как-нибудь получить рабочий каталог.

System.getProperty ("user.dir") дает мне корневой каталог tomcat, который мне не нужен.

Ответы [ 2 ]

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

Вы можете создать синглтон 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() следующим образом:

ResourceLoader.getInstance().setContext(servletContextEvenet.getServletContext());

, и вы можете использовать в другом месте в вашем приложении:

ResourceLoader.getInstance().getResourceAsStream(resourceName);
0 голосов
/ 04 февраля 2011

Как я могу вызвать 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();
...