zoukankan      html  css  js  c++  java
  • Struts2 访问request、session和application对象

    在传统的Web开发中,经常会用到Servlet API中的HttpServletRequest、HttpSession和ServletContext。Struts 2框架让我们可以直接访问和设置action及模型对象的数据,这降低了对HttpServletRequest对象的使用需求,但在某些应用中,我们可 能会需要在action中去访问HttpServletRequest对象以及其他两种对象,例如,用户登录成功后,我们应该将用户信息保存到Session中。

    Struts 2提供了多种方式来访问上述的三种对象,归结起来,可以划分为两大类:与Servlet API解耦的访问方式和与Servlet API耦合的访问方式.

    与Servlet API解耦的访问方式

    为了避免与Servlet API耦合在一起,方便Action类做单元测试,Struts 2HttpServletRequest、 HttpSession和ServletContext进行了封装,构造了三个Map对象来替代这三种对象,在Action中,直接使用 HttpServletRequest、HttpSession和ServletContext对应的Map对象来保存和读取数据。

    要获取这三个Map对象,可以使用com.opensymphony.xwork2.ActionContext类。

    ActionContext是action执行的上下文,在ActionContext中保存了action执行所需的一组对象,包括parameters、request、session、application和locale等。ActionContext类定义了如下方法,用于获取HttpServletRequest、HttpSession和ServletContext对应的Map对象。

    Ø public Object get(Object key)

    ActionContext类没有提供类似getRequest()这样的方法来获取封装了HttpServletRequest的Map对象。要得到请求Map对象,你需要为get()方法传递参数“request”。

    Map request =(Map)context.get("request");
    Ø public Map getSession()

    获取封装了HttpSession的Map对象。

    Ø public Map getApplication()

    获取封装了ServletContext的Map对象。

            List<Project> projectList = (ArrayList<Project>) projectDao.selectProjectByResource(name);    
    ActionContext context = ActionContext.getContext();
    Map request =(Map)context.get("request");
    request.put("projectListByResource", projectList);

    JSP页面使用标签进行遍历:

    <s:iterator value="#request.projectListByResource" var ="pro" status="u">
    <s:property value="#pro.pro_name"/>
    </s:iterator>

     

    除了利用ActionContext来获取request、session和application对象这种方式外,Action类还可以实现某些特定的接口,让Struts 2框架在运行时向Action实例注入request、session和application对象。与之对应的三个接口和它们的方法如下所示:

    Ø org.apache.struts2.interceptor.RequestAware

    框架利用该接口,向Action实例注入request Map对象。该接口只有一个方法,如下:

    — public void setRequest(Map request)

    Ø org.apache.struts2.interceptor.SessionAware

    框架利用该接口,向Action实例注入session Map对象。该接口只有一个方法,如下:

    — void setSession(Map session)

    Ø org.apache.struts2.interceptor.ApplicationAware

    框架利用该接口,向Action实例注入application Map对象。该接口只有一个方法,如下:

    — void setApplication(Map application)

     

     通过接口注入来获取request、session和application对象的LoginAction:

     

     

    http://blog.csdn.net/yangcp1/article/details/5326030

     

    改天这几种方式都试一试。做个实验。

  • 相关阅读:
    redux核心知识
    react性能优化要点
    react-router4的使用备注
    selenium启动Chrome配置参数问题
    Navicat15最新版本破解和破解报错总结
    Silence主题美化-部署
    vscode打开文件,中文显示乱码(已解决)
    Windows下Charles从下载安装到证书设置和浏览器抓包
    python下的selenium和chrome driver的安装
    Python 直接赋值、浅拷贝和深度拷贝解析
  • 原文地址:https://www.cnblogs.com/bukudekong/p/2437586.html
Copyright © 2011-2022 走看看