zoukankan      html  css  js  c++  java
  • Struts2获得Session和Request对象

     在Struts1.*中,要想访问request、response以及session等Servlet对象是很方便的,因为它们一直是作为形参在各个方法之间进行传递的,而在Struts2中我们就很难看到它们的芳踪了,因为我们获得表单中的值都是通过预先设置好了的get方法来得到的,那么如果有些参数我们必须通过request.getParametre或者session.getAttribute来得到,那么应该怎么做呢?按照Max的教程上的说法,可以分为两种:IoC方式和非IoC方式,如何理解这两种方式的区别呢?IoC是Spring里面的特征之一,字面意思是反转控制,说白了就是依赖注入,比方说类A依赖类B,那么就主动的给A注入一个类B的对象,下面看一下这两种方法的具体实现。
    1.非Ioc方式
    这种方式主要是利用了com.opensymphony.xwork2.ActionContext类以及org.apache.struts2.ServletActionContext类,具体的方法如下所示。
    获得request对象:

    获得session对象:
    在Struts2中底层的session都被封装成了Map类型,我们称之为SessionMap,而平常我们所说的session则是指HttpSession对象,具体的获得方法如下所示。

     

     得到这个SessionMap之后我们就可以对session进行读写了,如果我们想得到原始的HttpSession可以首先得到HttpServletRequest对象,然后通过request.getSession()来取得原始的HttpSession对象。一般情况下SessionMap已经可以完成所有的工作,我们不必再去碰底层的session了。
    2.IoC方式
    这种方式相对来说变化就比较少了,具体流程如下所示。
    获得request对象:
    第一步:让action实现ServletRequestAware接口
    第二步:在action中声明一个HttpServletRequest类型的实例变量
    第三步:在action中实现ServletRequestAware接口的setServletRequest方法,实现方式很简单,如下所示。
             private HttpServletRequest request;
            public void setServletRequest(HttpServletRequest request) {
                this.request = request;
        }
    获得Session对象(注意,此时的session是SessionMap类型):
    第一步:让action实现SessionAware接口
    第二步:在action中声明一个HttpServletRequest类型的实例变量
    第三步:在action中实现SessionAware接口的setSession方法,实现方式很简单,如下所示。
             private Map session;
    publicvoid setSession(Map session) {
                this. session = session;
        }

  • 相关阅读:
    web服务器-Apache
    nginx优化
    nginx下载限速
    nginx-URL重写
    HDU 5358 First One 求和(序列求和,优化)
    HDU 5360 Hiking 登山 (优先队列,排序)
    HDU 5353 Average 糖果分配(模拟,图)
    UVALive 4128 Steam Roller 蒸汽式压路机(最短路,变形) WA中。。。。。
    HDU 5348 MZL's endless loop 给边定向(欧拉回路,最大流)
    HDU 5344 MZL's xor (水题)
  • 原文地址:https://www.cnblogs.com/hainange/p/6153191.html
Copyright © 2011-2022 走看看