有时我们需要用到Request, Response, Session,Page, ServletContext这些我们以前常用的对象,那么在Struts2中怎么样使用到这些对象呢,通常有三种方式。

*** 完全解耦合的方式

*** 使用ServletActionContext中静态方法直接访问Servlet的API

*** 使用接口注入的方式



一、完全解耦合的方式

如果使用该种方式,Struts2框架中提供了一个类,ActionContext类,该类中提供一些方法,通过方法获取Servlet的API。

一些常用的方法如下:

 //private ActionContext context ;//该方法还可以取得值栈(getValueStack()),使用push(obj)往值栈中放数据    

    private Map request;  

    private Map session ;    

    private Map application ;  

    public LoginAction1(){  

       request = (Map)ActionContext.getContext().get("request");   //获取request  

       session = ActionContext.getContext().getSession();          //取得session  

       application = ActionContext.getContext().getApplication();   //取得application  

       request.put("r1","r1");  

       session.put("i1","i1");  

       application.put("a1","a1");  

       return SUCCESS;

     } 



二、使用ServletActionContext中静态方法直接访问Servlet的API

Struts2中提供了一个静态类,它里面的方法可以获取到我们的HttpServletResponse, HttpServletRequest。

ServletActionContext具体的方法如下

        * getPageContext();

        * getRequest()

        * getResponse();

        * getServletContext(); //也就是application对象

注意这里没有getSession(),我们可以通过request对象获取session对象

private HttpServletRequest request;  

private HttpSession session;  

private ServletContext application;  

public LoginAction(){  

request = ServletActionContext.getRequest(); //获取request对象 

session = request.getSession();  //由request获取session

application = session.getServletContext();  //由session获取application

}  



三、使用接口注入的方式

虽然Struts2提供了ActionContext来访问Servlet API,但是这种方式毕竟不能直接获取Servelt API实例,为了在Action中直接访问Servlet API,Struts2还提供了一系列接口。

ServletContextAware   实现此接口后,可以取得ServletContext

ServletRequestAware   实现此接口后,可以取得HttpServletRequest

ServletResponseAware 实现此接口后,可以取得HttpServletResponse

SessionAware         实现此接口后,可以取得HttpSession,注意,这里有点特殊,取得的是一个Map<String,Object> session,拦截器负责将session中存储的键值进行解析,并一一对应. 

所以我们通常的做法是:

public class BaseAction implements ServletResponseAware, ServletRequestAware,

   SessionAware {

protected HttpServletResponse response;

protected HttpServletRequest request;

protected Map<String, Object> session;

//省略了get和set方法



//下面就可以直接使用上面 response,request和session



}

} 

了让BaseAction能有验证的功能,并且不能被实例化,开发中我们会这样做:

public abstract class BaseAction extends ActionSupport implements ServletResponseAware, ServletRequestAware, SessionAware 

然后让我们每个模块的Action来继承这个BaseAction类,然后我们就可以在Action中直接使用Servelt的API了。

Struts2访问Servlet API的三种方式的更多相关文章

  1. Struts2访问Servlet API的几种方式

    struts2提供了三种方式访问servlet API:大致分为两类 1. ActionContext:  public static ActionContext getContext() :获得当前 ...

  2. struts2的action访问servlet API的三种方法

    学IT技术,就是要学习... 今天无聊看看struts2,发现struts2的action访问servlet API的三种方法: 1.Struts2提供的ActionContext类 Object g ...

  3. Action访问Servlet API的三种方法

    一.为什么要访问Servlet API ? Struts2的Action并未与Servlet API进行耦合,这是Struts2 的一个改良,从而方便了单独对Action进行测试.但是对于Web控制器 ...

  4. 1:3访问 servlet API 的两种方式(request,session等内置对象)

    1:解耦方式 2:耦合方式: ========================================== ========================================== ...

  5. 配置Struts2及Struts2访问servlet api的方式

    Struts2的起源与背景 在很长的一段时间内,在所有的MVC框架中,Struts1处于绝对的统治地位,无论是从市场的普及范围,还是具体的使用者数量. 其他MVC框架都无 法与其相比,作为一一款优秀的 ...

  6. 【深入Struts2】获取ServletAPI的三种方式

    一:获取servletAPI的三种方法 在传统的Web开发中,经常会用到Servlet API中的HttpServletRequest.HttpSession和ServletContext.Strut ...

  7. Servlet实现的三种方式

    实现Servlet的三种方式:一个实现,两个继承 /*========================================== * servlet的执行过程: * 1.创建servlet对 ...

  8. 详细理解servlet实现的三种方式和生命周期

    阅读目录 开发servlet的三种方式 理解实现servlet接口的方式,理解servlet生命周期 Servlet接口有五个方法 继承GenericServlet 继承HttpServlet 现在很 ...

  9. struts2访问servlet API

    搭建环境: 引入jar包,src下建立struts.xml文件 项目配置文件web.xml. web.xml: <?xml version="1.0" encoding=&q ...

随机推荐

  1. SharePoint 2013 Custom MasterPage

    <%@Master language="C#"%> <%@ Register Tagprefix="SharePoint" Namespace ...

  2. 开始学习es6(一) 搭建个es6的开发环境

    1.开始学习es6 如果想在浏览器跑es6  需要给es6个环境 因为一直用vue-cli全家桶 这样虽然方便 但如果用es6需要跑起个vue全家桶 于是想到可以用gulp搭建个开发环境 首先需要1. ...

  3. 关于 ajax 动态返回数据 css 以及 js 失效问题(动态引入JS)

    ajax 毕竟是异步的 所以动态加载出来的数据 难免遇到 css 或者 js 失效的问题,所以要动态加载 css ji等文件了 1.公共方法 load //动态加载 js /css function ...

  4. 标准C程序设计七---103

    Linux应用             编程深入            语言编程 标准C程序设计七---经典C11程序设计    以下内容为阅读:    <标准C程序设计>(第7版) 作者 ...

  5. C语言标准库

    共15个,请查看,在linux下的目录位/usr/share/include assert.h ctype.h errno.h float.h limits.h locale.h math.h set ...

  6. CAR_TUNE_VALUE 校準

    CAR_TUNE_VALUE 是用來校準 流過電池上的電流 與 系統偵測到的電流 的一致性, 假電 若您是使用假電, 請拔除零件, 僅留下必要元件,如thermal電阻,ID 電阻, 減少量測 fue ...

  7. yii框架缓存知识总结(转载)

    缓存是用于提升网站性能的一种即简单又有效的途径.稍微有点规模的网站都会通过存储相对静态的数据至缓存以备所需,这样我们可以省去从数据库查询然后生成这些数据的时间,通过减轻数据库的压力从而提升网站的性能. ...

  8. DBGridEH如何去表头?设置哪个属性

  9. 《从零开始搭建游戏服务器》项目管理工具Maven

    简介 什么是Maven?Maven是一个项目管理和综合工具,提供了开发人员构建一个完整的生命周期框架. Maven使用标准的目录结构和默认构建生命周期,在多个开发团队环境时,Maven可以设置按标准在 ...

  10. 洛谷——P1126 机器人搬重物

    P1126 机器人搬重物 题目描述 机器人移动学会(RMI)现在正尝试用机器人搬运物品.机器人的形状是一个直径1.6米的球.在试验阶段,机器人被用于在一个储藏室中搬运货物.储藏室是一个N*M的网格,有 ...