JSP设计-第10章(1)

<c:set var="sessionCounter" scope="session"
      value="${sessionCounter + 1}" />

第一次访问见面的时候不存在计数器,所以第一次会设置计数器为1(EL计算前缺省值为0)。session是针对一个用户,而application是可以多用户共享。

注意:request请求和jsp:forward配合使用。各项说明见上面一篇笔记。

<jsp:include page="included.jsp" flush="true">
<jsp:forward page= "nextpage.jsp"/>
前者页面不会转向include所指的页面,只是显示该页的结果,主页面还是原来的页面。执行完后还会回来,相当于函数调用。并且可以带参数.后者完全转向新页面,不会再回来

<jsp:forward>
重定向一个HTML文件,JSP文件,或者是一个程序段.

例子

1<jsp:forward page="/servlet/login" />

2<jsp:forward page="/servlet/login">

<jsp:param name="username" value="jsmith" />

</jsp:forward>

你能够向目标文件传送参数和值,如果你使用了<jsp:param>标签的话,目标文件必须是一个动态的文件,能够处理参数.

例题:

<%@ page contentType="text/html" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<html>
  <head>
    <title>Counter page</title>
  </head>
  <body bgcolor="white">

    <%-- Increment counters --%>
    <c:set var="sessionCounter" scope="session"
      value="${sessionCounter + 1}" />
    <c:set var="applCounter" scope="application"
      value="${applCounter + 1}" />

    <h1>Counter page</h1>

    This page has been visited <b>${sessionCounter}</b> times
    within the current session, and <b>${applCounter}</b> times
    by all users since the application was started.
  </body>
</html>
 URL复写:

Cookie:服务器在一个应答首部传递给浏览器的名称/值对。浏览器保存的时间

                     由cookie的过期时间属性来指定。
                     当浏览器向某个服务器发送一个请求时,它会检查其保存的cookie,并在请求 首部中包含从同一台服务器上接收到的所有cookie。
Session tracking:在浏览器和服务器之间不直接传送所有的状态信息,而只是传递表示
符(session ID)。浏览器发送sessionID,服务器跟踪与该会话相关联的所有信 息。传递sessionID可以通过cookie和URL复写技术,大部分容器都支持这 两种技术。
     服务器无法分辨用户是否关闭了浏览器,因此关闭浏览器意味着与先前的会话 关联的所有会话数据都保留在服务器上,直到会话超时,服务器销毁会话对象。
® 跟踪同一会话中的请求的会话ID可以有多种方法,主要有cookie和url复写。
® URL复写:把会话ID编码在URL中。
       例:counter.jsp;jsessionnid=be8d697876787876befdbde898789098980
这样,即使浏览器不支持cookie,也能够实现会话跟踪。
® 对于URL复写,服务器从请求的URI中提取出会话ID,并把该请求与相应的会话关联起来,然后在访问会话数据的时候,JSP页面所进行的处理方式就和使用cookie跟踪会话id时所使用的方式完全相同。
® 所以sesssion的实现要依靠cookie或URL复写技术。
® 如果想为不支持cookie的浏览器提供会话跟踪,就必须使用<c:url>行为对应用程序中的 所有URL进行复写。
       这意味着应用程序中的所有页面(至少是那些带有对其他页面引用的页面)都必须是 JSP页面,这样页面引用才能以动态方式进行编码,如果遗漏了一个ur,那么服务就 失去对会话的跟踪。

<c:url value=”counter.jsp”>

 
i)                 会对URL进行复写,处理过程如下: <c:url>
如果容器在收到一个含有会话ID cookie的请求时,那么容器将URL原封不动的
添加到应答中。
但对于不支持cookie或某个会话中的第一次请求,<c:url>将添加一个复写过的
URL。

ii)                还会对嵌套的<c:param>定义的查询参数进行URL编码。 <c:url>

<c: url value=”counter.jsp”>
         <c:param name=”name” value=”Hans Beergeten”/>
                     </c:url>
                     处理后结果:counter.jjsp;jsessionnid=be8d697876787876befdbde898789098980
              ?name=Hans+Beergeten
              此处将name参数进行了URL编码
              ®  如果确定不需要URL编码,可以将参数直接包含进URL,而不是通过
<c:param>实现。如:
<c:url value=” counter.jsp;jsessionnid=be8d697876787876befdbde898789098980
?name=Hans+Beergeten”/>
注意:在通过<c:url>进行URL复写后,如果想通过<c:out>输入该URL,应保 证esccapeXml属性false,即URL中的特殊字符应该保持原样,否则会进行两 次URL编码,造成错误。例:
<c: url var=curl”” value=”counter.jsp”>
         <c:param name=”name” value=”Hans Beergeten”/>
                     </c:url>
<c:out value=”${curl}” escapeXml=”false”/>

书上例题:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
 
<html>
  <head>
    <title>Counter page</title>
  </head>
  <body bgcolor="white">
 
    <%-- Increment the counter --%>
    <c:set var="sessionCounter" scope="session"
      value="${sessionCounter + 1}" />
 
    <h1>Counter page</h1>
 
    This page has been visited <b>${sessionCounter}</b> times
    within the current session.
    <p>
    Click here to load the page through a
    <a href="counter2.jsp">regular link</a>.
    <p>
    Click here to load the page through an
    <a href="<c:url value="counter2.jsp" />">encoded link</a>.
  </body>
</html>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值