1

我试图弄清楚如何使用 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>

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

<%

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

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

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

我不知道这种行为的原因,尽管如果结果相反,这将是有道理的。

4

1 回答 1

5

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

在此处输入图像描述

但转发请求发生在服务器中。如果您有 n 时间转发一个请求,它会返回一个请求。见下图:

在此处输入图像描述

于 2013-07-12T16:11:26.767 回答