2013-07-12 3 views
1

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

Я установил атрибут и использовал диспетчер, чтобы перейти к другому сервлету, в другой попытке я использовал sendRedirect для перенаправления запроса на другой сервлет.

Вот первый Jsp (где установлен атрибут):

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 

<html> 
<body> 

<c:set var="session" scope="session" value="test"></c:set> 
<% 
response.sendRedirect("session.jsp"); // I know I could use the JSTL tag forward 
%> 

</body> 
</html> 

В другом Jsp ("session.jsp"):

<% 

HttpSession s = request.getSession(); 
if(s.isNew()) 
    out.print("new session "); 

out.print(s.getAttribute("session")); 
%> 

При использовании sendRedirect результат "test", что означает, что сеанс не был вновь создан. Однако, когда я использую форвард (диспетчер), результат равен "new session test".

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

ответ

4

при использовании перенаправления сервер говорит клиенту (браузеру пользователя), который отправляет мне новый запрос. затем пользовательский браузер запрашивает новую страницу. в этом состоянии у нас есть 2 запроса. см следующая картина:

enter image description here

но вперед запрос произошло на сервере. если у вас есть n время назад, запрос возвращает один запрос. см следующая картина:

enter image description here

+0

Я не могу поверить, что я пропустил эту точку! Спасибо человеку. –