通过转发和重定向传递会话属性

a.u*_*u.r 1 jsp jstl session-variables scriptlet

我试图弄清楚如何使用JSTL使用会话,因此,我首先尝试在Jsp中设置会话属性,然后将该属性传递给同一应用程序中的另一个Jsp,然后在其中进行检索。

我设置了属性并使用调度程序来到达另一个servlet,在另一种尝试中,我使用了sendRedirect将请求转发到另一个servlet。

这是第一个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>
Run Code Online (Sandbox Code Playgroud)

在另一个Jsp(“ session.jsp”)中:

<%

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

out.print(s.getAttribute("session"));  
%>
Run Code Online (Sandbox Code Playgroud)

当我使用sendRedirect时,结果为"test",这意味着该会话不是新创建的。但是,当我使用forward(dispatcher)时,结果为"new session test"

我不知道发生这种行为的原因,但是如果结果相反,这是有道理的。

Ras*_*eri 5

当您使用重定向时,服务器对客户端(用户浏览器)说,请向我发送一个新请求。然后用户浏览器请求新页面。在这种状态下,我们有2个请求。见下图:

在此处输入图片说明

但是转发请求在服务器中发生。如果您有n次转发请求,则返回一个请求。见下图:

在此处输入图片说明