Как получить реальный путь в JSF в SessionListener - PullRequest
1 голос
/ 26 ноября 2011

Мое требование следующее:

ИНФОРМАЦИЯ: компонент загрузки icefaces, загружает файлы в соответствующую папку и создает для каждого пользователя подкаталог в этой папке с помощью sessionId.

Требование: на sessionDestroyed для каждого пользователя, я хочу получить реальный путь, удалить текущую папку пользователя.

Я знаю, как получить реальный путьс JSF следующим образом:

ServletContext ctx = (ServletContext) FacesContext.getCurrentInstance()
                .getExternalContext().getContext();
        String deploymentDirectoryPath = ctx.getRealPath("/");

Проблема: если вы попытаетесь получить реальный путь в sessionDestroyed, вы получите исключение нулевого указателя, поэтому мне было интересно, есть ли способинициализировать переменную deploymentDirectoryPath в слушателе, чтобы я мог использовать ее в методе sessionDestroyed, или, возможно, инициализировать переменную реального пути при запуске приложения и использовать ее здесь?

, пожалуйста, сообщите, как решить эту проблему.

Ответы [ 3 ]

2 голосов
/ 26 ноября 2011

Даже если вы не опубликовали фактический код, относящийся к проблеме, следующий путь дает мне реальный путь:

public class MySessListener implements HttpSessionListener {

    @Override
    public void sessionCreated(final HttpSessionEvent se) {
        System.out.println(Thread.currentThread().getStackTrace()[1]);
        new Timer().schedule(new TimerTask() {

            @Override
            public void run() {
                HttpSession sess = se.getSession();
                sess.invalidate();
            }
        }, 10000);
    }

    @Override
    public void sessionDestroyed(HttpSessionEvent se) {
        System.out.println(Thread.currentThread().getStackTrace()[1]);
        String realPath = se.getSession().getServletContext().getRealPath("/");
        System.out.println("realPath: " + realPath);
    }
}

выход

INFO: com.bhesh.demo.web.listener.MySessListener.sessionCreated(MySessListener.java:13)
INFO: com.bhesh.demo.web.listener.MySessListener.sessionDestroyed(MySessListener.java:26)
INFO: realPath: C:\Documents and Settings\Bhesh\My Documents\NetBeansProjects\JsfMessageList\build\web\
0 голосов
/ 27 февраля 2014

Основываясь на здравом совете BalusC здесь и в других местах, можно написать функцию общего назначения, например:

  String getPath(){

ExternalContext tmpEC;      

tmpEC = FacesContext.getCurrentInstance().getExternalContext();   
String realPath=tmpEC.getRealPath("/");
return realPath;    
}
0 голосов
/ 30 сентября 2013

Вы можете получить реальный путь следующим образом: -

FacesContext.getCurrentInstance().getExternalContext().getRealPath("/");

РЕДАКТИРОВАТЬ: -

Как упомянуто BalusC в одном из его ответов, вы должны подуматьдважды перед использованием getRealPath("/"), потому что если кто-то не выбрал расширение файла войны, то getRealPath("/") может вернуть null.

Вместо этого использовать getExternalContext.getResourceAsStream.согласно, docs , этот метод допустим при запуске или завершении работы приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...