Действительно ли я могу получить доступ к объекту сессии из функции, где объект запроса не присутствует?
Я знаю в 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
}
}
Это зависит от того, что вы подразумеваете под «когда объект запроса отсутствует». Вы могли бы иметь локальную переменную потока, которая устанавливает «текущий запрос для этого потока» в начале сервлета или того, что вы выполняете (вы не разъяснили это). Тогда вы могли бы получить «текущий запрос в этом потоке» откуда угодно и получить сеанс таким образом. (Или аналогичным образом вы можете установить текущий сеанс вместо текущего запроса в локальной переменной потока.)
Это не очень красиво, и у вас есть проблемы, если вы хотите сделать что-то в другом потоке. Передача запроса или сеанса в качестве зависимости обычно более чистая.
В целом, если вы хотите получить доступ к сеансу http из места, где объект запроса недоступен, тогда у вас может быть дизайн проблемы в вашем приложении, и вам нужно переосмыслить проблемы, разбиение на слои и т. д.
Если вы реализуете технологию JSF в своем приложении, вы можете получить доступ ко всему, позвонив;
FacesContext.getCurrentInstance();
Поскольку это полученный одноэлементный экземпляр, вы можете получить к нему доступ в любом месте вашего презентационный слой.
Однако реализация JSF, вероятно, будет немного излишней только для этой цели, поскольку вам, вероятно, придется внести много изменений в свои уровни конфигурации и представления, чтобы приспособиться к этому.
Тем не менее, если вы все же решите пойти по этому пути, вы также можете подумать об использовании MyFaces , который является фантастическим API для тех, кто использует JSF в своих приложениях.
объект запроса передачи является решением,
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
}
}