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

Jsp 通过转发和重定向传递会话属性,jsp,jstl,session-variables,scriptlet,Jsp,Jstl,Session Variables,Scriptlet,我试图弄清楚如何使用JSTL使用会话,因此我首先尝试在Jsp中设置会话属性,并将该属性传递给同一应用程序中的另一个Jsp,然后在那里检索它 我设置了属性并使用dispatcher访问另一个servlet,在另一次尝试中,我使用sendRedirect将请求转发到另一个servlet 下面是第一个Jsp(我在其中设置属性): 在另一个Jsp(“session.Jsp”)中: 当我使用sendRedirect时,结果是“test”,这意味着会话不是新创建的。 但是,当我使用forward(d

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

我设置了属性并使用dispatcher访问另一个servlet,在另一次尝试中,我使用sendRedirect将请求转发到另一个servlet

下面是第一个Jsp(我在其中设置属性):


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


当我使用sendRedirect时,结果是“test”,这意味着会话不是新创建的。 但是,当我使用forward(dispatcher)时,结果是
“新会话测试”


我不知道这种行为的原因,但如果结果被逆转,这是有意义的。

当您使用重定向时,服务器会告诉客户端(用户浏览器),请为我发送一个新的请求。然后用户浏览器请求新页面。在此状态下,我们有两个请求。见下图:

但服务器中发生了转发请求。如果你有n个时间转发一个请求,那么它将返回一个请求。见下图:


当您使用重定向时,服务器会告诉客户端(用户浏览器),请为我发送新请求。然后用户浏览器请求新页面。在此状态下,我们有两个请求。见下图:

但服务器中发生了转发请求。如果你有n个时间转发一个请求,那么它将返回一个请求。见下图:

<%@ 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>
<%

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

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