我试图弄清楚如何使用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(调度程序)时,结果为"new session test"
。
我不知道这种行为的原因,但如果结果发生逆转则有意义。
答案 0 :(得分:5)
当您使用重定向时,服务器会说客户端(用户浏览器),请为我发送新请求。然后用户浏览器请求新页面。在这种状态下我们有2个请求。见下图:
但是在服务器中发生了转发请求。如果您有时间转发请求,则返回一个请求。见下图: