关于request和session的生命周期

最近在重温jsp,之前呢已经看过一遍,有些东西忘了。而在做java web开发时,request,session又是用的比较多的。尤其是页面的跳转传值问题,或多或少地会用到request和session,由于有些东西现在知道,过一段时间会忘,现将request和session的生命周期总结如下:

首先是session,比如我们在实现一个购物车功能时,在某一页面(这里称为页面A)选择了一些购物的商品,添加到购物车。那么当我们选择完成后点击我的购物车时会跳转到一个购物车页面(这里称为页面B),这和页面A是两个不同的页面,那么怎么讲页面A选取的商品添加到页面B呢。这里一种解决方案就是session。直接上一个demo了:

A.jsp页面:

<body>
    <h1>A界面</h1>
    <%
        session.setAttribute("name","苹果");//这是jsp文件,如果是Servlet的话,先得获得Session,HttpSession hs=request.getSession(true);
     %>

  </body>

B.jsp页面:

<body>
    <h1>B界面</h1>
    <%
    String name1=(String)session.getAttribute("name");
     %>
     <p>Session的值为:<%=name1 %></p>
 </body>

上面就达到了一个传值得目的,当然,我们谈的是session的生命周期,Tomcat里,默认的session生命周期是30min,也就是你不操作界面的时间,你一刷新界面的话,session会重新计时的,那么session的默认时间可以改么,答案是肯定的。可以在Tomcat目录下的conf文件下的web.xml进行修改,如下图所示,默认是30min,修改的话改个数值就行了:

恩 默认的可以设置,那么我们每个应用程序的session可以自己设置生命周期呢,答案是可以的。比如在A.jsp界面加句话就行了。

A.jsp页面:
<body>
    <h1>A界面</h1>
    <%
        session.setAttribute("name","苹果");//这是jsp文件,如果是Servlet的话,先得获得Session,HttpSession hs=request.getSession(true);

        session.setMaxInactiveInterval(5);
     %>
  </body>

这里session.setMaxInactiveInterval(5);设置的是有效时间5秒,这里是以秒为单位的。

那么比如我从A界面跳转到B界面,B界面会显示Asession传过来的session内容,但是如果我5秒内没有动过B界面,那么再次刷新A界面时, 将不会再获得session内的值了,因为这个session失效了。好了session生命周期相关先介绍到这里。

下面介绍request,request有两个方法:getParameter()和getAttribute(),详情请见博客:http://blog.csdn.net/jcy1009015337/article/details/53768512

现在有两个界面test1.jsp,test2.jsp,当我们在浏览器中输入http://127.0.0.1:8080/UserManageSys/test2.jsp时,一个request就产生了,也就是生命周期的开始。test1.jsp的request中,我们可以设置一些值,比如我在test1.jsp是这样设置的:

<body>
    <h1>test1界面</h1>
    <%
        request.setAttribute("name", "jingchenyong");
     %>
     <a href="test2.jsp"></a>
  </body>

上面setAttribue是在request中设置值的。那么问题来了,就像购物一样,我们需要从test1.jsp界面跳转访问test2.jsp界面,是否test2.jsp界面中的request也保存test1.jsp中的request值呢,那么下面我们接着讨论。一般来说有两种处理方式实现跳转,一种是response.sendRedirect,另一种是request.getRequestDispatcher("xxx.jsp").forward(request,response);

用第一种方法,那么test1.jsp中的request不会传递到test2.jsp。

用第二种方法,request的生命周期将延续下去,当采用forward如果到达JSP页面,那么之前从第一个JSP页面中发送出来的request的消息将仍然存在,新的页面同样能够取得该request里所包含的一些信息,比如之前的JSP发送request中所包含的参数信息.事实上,它们是同一个request。

这里注意一下:第二种方法中,如果在页面中通过setAttribute()设置一个Object值到request中,那么再另一个页面中可以通过getAttribute()来获得值,这里值是Object类型的。

下面是test1.jsp和test2.jsp页面的代码:

test1.jsp

<body>
    <h1>test1界面</h1>
    <%
        request.setAttribute("name", "jingchenyong");
        request.getRequestDispatcher("test2.jsp").forward(request,response);
     %>
     <a href="test2.jsp"></a>
</body>

 

test2.jsp

<body>
    <hr>test2界面</hr>
    <%
    String name=(String)request.getAttribute("name");
     %>
     <p>值为:<%=name %></p>
</body>

转载于:https://my.oschina.net/u/3708595/blog/1581259

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值