Получение текущей сессии возражает в Java

Действительно ли я могу получить доступ к объекту сессии из функции, где объект запроса не присутствует?

Я знаю в Java, мы получаем доступ к сессии как это:

HttpSession session = request.getSession(true);

Но что, если мы хотим получить доступ к сессии, когда объект запроса не присутствует?

Действительно ли это возможно? существует ли альтернативный способ получить объект сессии?

Править

У меня есть сервлет

public class ABC extends HttpServlet
{
    public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException
    {
             ..........
             ...........
        myFun1(x,y,z);  
    }

      private void myFun1(int x, int y,long z)
      {
            .........
            myFun2(a,b);    
       }

      private void myFun2(int a,String b)
      {
            .........

            //      Need Session here
       }

}
10
задан BalusC 30 July 2010 в 19:08
поделиться

4 ответа

Это зависит от того, что вы подразумеваете под «когда объект запроса отсутствует». Вы могли бы иметь локальную переменную потока, которая устанавливает «текущий запрос для этого потока» в начале сервлета или того, что вы выполняете (вы не разъяснили это). Тогда вы могли бы получить «текущий запрос в этом потоке» откуда угодно и получить сеанс таким образом. (Или аналогичным образом вы можете установить текущий сеанс вместо текущего запроса в локальной переменной потока.)

Это не очень красиво, и у вас есть проблемы, если вы хотите сделать что-то в другом потоке. Передача запроса или сеанса в качестве зависимости обычно более чистая.

6
ответ дан 3 December 2019 в 23:10
поделиться

В целом, если вы хотите получить доступ к сеансу http из места, где объект запроса недоступен, тогда у вас может быть дизайн проблемы в вашем приложении, и вам нужно переосмыслить проблемы, разбиение на слои и т. д.

6
ответ дан 3 December 2019 в 23:10
поделиться

Если вы реализуете технологию JSF в своем приложении, вы можете получить доступ ко всему, позвонив;

FacesContext.getCurrentInstance();

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

Однако реализация JSF, вероятно, будет немного излишней только для этой цели, поскольку вам, вероятно, придется внести много изменений в свои уровни конфигурации и представления, чтобы приспособиться к этому.

Тем не менее, если вы все же решите пойти по этому пути, вы также можете подумать об использовании MyFaces , который является фантастическим API для тех, кто использует JSF в своих приложениях.

1
ответ дан 3 December 2019 в 23:10
поделиться

объект запроса передачи является решением,

public class ABC extends HttpServlet
{
    public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException
    {
             ..........
             ...........
        myFun1(x,y,z,req);  
    }

      private void myFun1(int x, int y,long z,HttpServletRequest req)
      {
            .........
            myFun2(a,b,req);    
       }

      private void myFun2(int a,String b,HttpServletRequest req)
      {
            .........

            //      Need Session here
       }

}
1
ответ дан 3 December 2019 в 23:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: