Session

1、通过Session来让同一个会话域(Session scope)的应用来持有一个对象。
  例如我们创建了一个类Status,用来保存一些信息。怎么让JSP页面,handler(一个类文件)持有同一个Status实例呢?
  在JSP中,可以通过以下方法来持有:
 ① Status status = (Status)request.getSession(false).getValue(WebKey.STATUS);
  这里先用request.getSession(false),来得到与这个应用相同的Session,然后通过Session类的getValue(String name),来得到name指向的对象实例。

  在handler中,可以通过以下方法来持有Status的类实例:
 ② Status status = getStatus(request);

  这里主要的就是getStatus方法了,这个方法是handler里面的方法。是用来让JSP和handler持有同一个Status实例的。看如下的实现:
 ③  protected Status getStatus(HttpServletRequest request)
         throws SessionExpiredException
         {
         HttpSession session = request.getSession(false);
         if(session == null)
                  throw new SessionExpiredException();
         Status status = (Status)session.getValue("status");
         if(status == null)
                  throw new SessionExpiredException();
         else
             return status;
         }
  通过上面的三项,可以看到,持有同一个应用的Session,实际上,都是通过request.getSession( true | false );这个方法,这是因为request对象表示的就是HTTP的请求,而Session也是请求内容的一部分。
  Status status = (Status)session.getValue("status");(getValue在2.2以后,已经被getAttribute方法替代)中的"status",又是何时通过setAttribute方法设置的呢?这个就是我们打开的第一JSP页面创建的(显式创建),例如,我们在第一个页面中有如下代码:
     Status status = new Status();
         status.setUser(user);
         status.setStyle("shrj");
         session.putValue(WebKey.STATUS, status);
         session.putValue("style","shrj");
   那么,我们就可以在getStatus方法中通过Status status = (Status)session.getValue("status");方法,让JSP页面和Handler处理类持有同一个Status实例。
  是不是所有的类,只要包含有HttpServletRequest参数,都可以通过session来让这个类与JSP页面持有同一个Status实例呢?
  从上面的描述中,抽出持有同一个Session的方法:
 ① JSP要向我们的Handler发送一个HttpServletRequest请求(这个要看我们的配置文件或from中的method值)
 ② 我们写的方法(getStatus(HttpServletRequest request))要持有这个JSP页面发送的HttpServletRequest请求。
 ③ 通过HttpServletRequest实例得到Session。
  持有同一个对象实例:
 这个就要通过Session实例的setAttribute(java.lang.String name, java.lang.Object value)这个方法,来通过一个name值为Session来绑定这个对象。然后通过这同一个Session实例,利用getAttribute(java.lang.String name)方法来得到这个name指定的对象。
 
 ① Status status = new Status();
     session.setAttribute("status", status);
 ② HttpSession session = request.getSession(false); 
 ③ Status status = (Status)session.getAttribute("status");
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

收获de季节

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值