Action访问Servlet API

Struts2中的Action并没有和任何Servlet API耦合,这样框架更具灵活性,更易测试。

对于Web应用的控制器而言,不访问ServletAPI是几乎不可能的。Web应用中通常需要访问的ServletAPI就是HttpServletRequest、HttpSession和ServletContext,这三个接口分别代表JSP中内置对象中的request、session、application。

Struts 2提供了一个ActionContext类,Struts 2的action可以通过该类来访问Servlet API

         ActionContext类提供了一个静态方法getContext(),该方法返回一个ActionContext的实例。该实例提供了一些访问Servlet API的方法。     

方法名

功能描述

getContext()

静态方法,获取系统的ActionContext实例

getSession()

返回一个Map对象,该对象存入HttpSession实例。

setSession(Map session)

直接传入一个Map实例,将该map实例总得key、value对应转换成session的属性名、属性值

getApplication()

返回一个Map对象,该对象存入ServletContext实例

setApplication()

直接传入一个Map实例,将实例中的key、value对应转换成application的属性名、属性值

getParameters()

获得所有请求参数。类似于调用HttpServletRequest对象的getParameterMap方法

ActionContext将在Action类中通过ActionContext访问Servlet API,该Action中示范了向request、session、application范围设置属性值。

  1. ActionContext ctx = ActionContext.getContext();
  2. //获得Session
  3. Map session = ctx.getSession();
  4. //获得Application
  5. Map application = ctx.getApplication();

struts 2即可以彻底与Servlet API 分离,从而可以允许该脱离Web容器运行,也就可以脱离Web容器来测试Action;又允许用简单的方式来操作request、session、application范围的属性。

Action 直接访问Servlet API

虽然Struts 2 提供了ActionContext来访问Servlet API,但这种访问毕竟不是直接获得Servlet API的实例。Struts 2 提供了几种接口,Action可以直接访问Servlet API

 

实现接口名称

接口描述

ServletContextAware

实现该接口的Action可以直接访问Web应用的ServletContext实例

ServletRequestAware

实现该接口的Action可以直接访问用户请求的HttpServletRequest实例

ServletResponseAware

实现该接口的Action可以直接访问服务器响应的HttpServletResponse


  1. <span style="font-size:13px;">        private HttpServletResponse response;
  2. //重写实现ServletResponseAware接口
  3. public void setServletResponse(HttpServletResponse response) {
  4. this.response = response;
  5. }</span>

通过上面可知,实现ServletResponseAware接口,只需要实现如下方法:

public void setServletResponse(HttpServletResponse response);

类似的,如果一个Action实现了ServletRequestAware,则需要实现如下方法:

public void setServletRequest(HttpServletRequest request);

类似的,如果一个Action实现了ServletContextAware,则需要实现如下方法:

public void setServletContext(ServletContext  context);

即使我们在struts 2 的Action类中获得了httpServletRespose对象,也不要尝试直接在Action中对客户端生成响应。

使用ServletActionContext访问Servlet API

为了能够直接访问Servlet API,struts 2 还提供了一个ServletAction工具类,这个类包含了如下几个静态方法

返回值

方法名

功能描述

HttpServletRequest

getRequest()

获得Web应用的HttpServletRequest对象

HttpServletResponse

getResponse()

获得Web应用的HttpservletResponse对象

ServletContext

getServletContext()

获得Web应用的ServletContext对象

PageContext

getServletContext()

获得Web应用的ServletContext对象

借助于ServletActionContext工具类的帮助,Action能以更加简单的方式来访问Servlet API。

读李刚《轻量级java EE企业应用实战(第三版)—struts 2+Spring 3+Hibernate整合开发》

Struts 2读书笔记-----Action访问Servlet API的更多相关文章

  1. Struts2笔记--Action访问Servlet API

    Web应用中通常需要访问的Servlet API就是HttpServletRequest.HttpSession和ServletContext,这三个接口分别代表JSP内置对象中的request.se ...

  2. struts2 笔记01 登录、常用配置参数、Action访问Servlet API 和设置Action中对象的值、命名空间和乱码处理、Action中包含多个方法如何调用

    Struts2登录 1. 需要注意:Struts2需要运行在JRE1.5及以上版本 2. 在web.xml配置文件中,配置StrutsPrepareAndExecuteFilter或FilterDis ...

  3. 笔记01 登录、常用配置参数、Action访问Servlet API 和设置Action中对象的值、命名空间和乱码处理、Action中包含多个方法如何调用

    Struts2登录 1. 需要注意:Struts2需要运行在JRE1.5及以上版本 2. 在web.xml配置文件中,配置StrutsPrepareAndExecuteFilter或FilterDis ...

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

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

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

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

  6. Struts2学习笔记(五)——Action访问Servlet API

    在Strut2中访问Servlet API有三种方式: 1.通过ActionContext访问Servlet API,推荐使用这种,但是这种方案它获取的不是真正的事Servlet API. 步骤: 1 ...

  7. Action访问Servlet API

    访问Servlet API 1.通过ActionContent类访问Servlet API ActionContext中访问Servlet API的几个常用的方法: (1)Map getApplica ...

  8. 关于Struts2自动装配和访问Servlet API

    自动装配 1.根据属性的getter和setter获取值  index.jsp <s:form action="hello" method="POST"& ...

  9. Action访问Servlet的API

    Action访问Servlet的API_,主要访问如下: 1.>获取request对象 2.>获取请求参数 3.>获取response对象,可用于传递cookie 3.>获取作 ...

随机推荐

  1. Java---Java的面试题(一)

    1.什么是Java虚拟机?为什么Java被称作是"平台无关的编程语言"? Java虚拟机是一个可以执行Java字节码的虚拟机进程.Java源文件被编译成能被Java虚拟机执行的字节 ...

  2. Quartz表达式详解(转载)

    1.   CronTrigger时间格式配置说明 CronTrigger配置格式: 格式: [秒] [分] [小时] [日] [月] [周] [年] 序号 说明 是否必填 允许填写的值 允许的通配符 ...

  3. js “+” 连接字符串&amp;数字相加 数字相加出现多位小数 函数调用单引号双引号嵌套和转义字符的使用

    一.机制 JavaScript中,加号不仅表示相加还表示字符串连接 当加号两边存在字符串时,加号代表连接,实际上是将两侧都转为了字符串,如 "1" + 1 = "11&q ...

  4. 轻量级的jquery

    话不多说,直接上源代码 一.tool.js 封装一些共用方法,以及相关的浏览器兼容细节,供Base.js调用 //浏览器检测,一旦加载即执行 (function() { window.sys = {} ...

  5. ActiveMQ, RabbitMQ和ZeroMQ 选型关注点

    选择MQ时,主要关注的特性,可能就以下几个: 通信模式(是否满足业务场景): ActiveMQ: queue(producer/consumer), topic(publisher/subsriber ...

  6. 动态多条件查询分页以及排序(一)--MVC与Entity Framework版url分页版

    一.前言 多条件查询分页以及排序  每个系统里都会有这个的代码 做好这块 可以大大提高开发效率  所以博主分享下自己的6个版本的 多条件查询分页以及排序 二.目前状况 不论是ado.net 还是EF ...

  7. C#操作SQLite 报错 (Attempt to write a read-only database)

    解决办法:找到SQLite数据库所在的文件夹,单击右键,属性->安全,为Users用户组添加写入权限.

  8. SQLite 数据库

    内容来源:高成珍.钟元生<Android编程经典案例解析> SQLite 数据库是Android 中内嵌的轻量级关系型数据库,本质上只是一个文件.SQLite 内部只支持NULL,INTE ...

  9. POJ 2135 最小费用最大流

    题目链接 Farm Tour Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 18961   Accepted: 7326 D ...

  10. Nginx详解三:Nginx基础篇之yum安装

    Nginx快速搭建 Mainline version ----开发版:具有最新功能的版本,用于测试.研究.学习,不用于企业生成环境 Stable version----稳定版:官方认可,且通过测试的 ...