0

我是 java servlet 的新手,实际上处于学习阶段。我在将我的 JSP 页面字段值发送到另一个页面时遇到困难,这在会话维护方面简而言之面临问题。请帮助我在整个会话中获取值通过使用简单的建设性示例给出一些想法来很好地理解会话的使用..

提前致谢 :)

4

1 回答 1

0

以下是演示会话跟踪机制的 JSP。尝试在浏览器中启用和不启用 cookie 的情况下单击页面上的链接。您应该能够通过使用 cookie 或对 URL 进行编码来维持会话。在 Chrome 中禁用会话 cookie 很容易。

<%
  String servletPath = request.getServletPath();
  String contextPath = request.getContextPath();
  String path = contextPath + servletPath;
  String encoded = response.encodeURL(path);
  Integer count = (Integer)session.getAttribute("count");
  if(count==null)count = new Integer(0);
  session.setAttribute("count",new Integer(count.intValue() + 1));
%>
sessionId=<%=session.getId()%><br/>
isNew=<%=session.isNew()%><br/>
fromURL=<%=request.isRequestedSessionIdFromURL()%><br/>
fromCookie=<%=request.isRequestedSessionIdFromCookie()%><br/>
path=<%=path%><br/>
encoded=<%=encoded%><br/>
<a href="<%=path%>">Not encoded request</a><br/>
<a href="<%=encoded%>">Encoded request</a><br/>
count=<%=count%> 

上面的页面适用于任何 JSP 容器。如果你使用一个新的(我用 Apache Tomcat/7.0.28 测试过),那么你可以使用下面的页面。

<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<c:set var="count" value="${count + 1}" scope="session" />
<c:set var="relativePath" value="${fn:substringAfter(pageContext.request.servletPath, '/')}" />
The session id is ${pageContext.session.id}<br/>
Is the session new ? ${pageContext.session['new']}<br/>
Did the client send the session id in the URL ?   ${pageContext.request.requestedSessionIdFromURL}<br/>
Did the client send the session id in a cookie ?   ${pageContext.request.requestedSessionIdFromCookie}<br/>
<a href="${relativePath}">Not encoded request</a><br/>
<a href="${pageContext.response.encodeURL(relativePath)}">Encoded request</a><br/>
Count is ${count}
于 2012-08-31T17:09:03.160 回答