JSTL を使用してセッションを使用する方法を理解しようとしているので、Jsp にセッション属性を設定し、その属性を同じアプリケーション内の別の Jsp に渡し、そこで取得することから始めました。
属性を設定し、ディスパッチャーを使用して他のサーブレットにアクセスしました。別の試みでは、sendRedirect を使用してリクエストを他のサーブレットに転送しました。
これが最初の 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"
になります。これは、セッションが新しく作成されなかったことを意味します。ただし、転送 (ディスパッチャー) を使用すると、結果は"new session test"
.
このような動作の理由はわかりませんが、結果が逆であれば意味があります。