2013-07-12 69 views
1

我想弄清楚如何使用JSTL會話,所以我開始試圖在Jsp中設置會話屬性並將該屬性傳遞給同一應用程序中的另一個Jsp並檢索它那裏。通過轉發和重定向傳遞會話屬性

我設置了屬性,並使用調度程序到另一個servlet,在另一個嘗試中,我使用sendRedirect將請求轉發到另一個servlet。

這裏是第一個JSP(其中,i設置屬性):

<%@ 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",這意味着會話不是新創建的。 但是,當我使用forward(調度程序)時,結果是"new session test"

我不知道這種行爲的原因,但如果結果相反,這樣做會有意義。

回答

4

當你使用重定向服務器說客戶端(用戶瀏覽器),請發送一個新的請求給我。然後用戶瀏覽器請求新頁面。在這種狀態下我們有2個請求。看到下面的圖片:

enter image description here

,但前進的請求在服務器發生。如果你有n次轉發請求,它返回一個請求。看到下面的圖片:

enter image description here

+0

我無法相信我錯過了這一點! 謝謝你。 –