Struts 2读书笔记-----Action访问Servlet API
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
方法名 |
功能描述 |
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范围设置属性值。
- ActionContext ctx = ActionContext.getContext();
- //获得Session
- Map session = ctx.getSession();
- //获得Application
- 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 |
- <span style="font-size:13px;"> private HttpServletResponse response;
- //重写实现ServletResponseAware接口
- public void setServletResponse(HttpServletResponse response) {
- this.response = response;
- }</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整合开发》
最新文章
- [Django]用户权限学习系列之Permission权限基本操作指令
- C# 对多个文件进行zip压缩
- SqlServer基础之(触发器)
- ACM知识点
- Android基础面试题
- 让background-color 无效
- SOAP 格式设置选项
- ecshop发票不能使用出现flow.php on line 723等报错
- 华东交通大学2016年ACM“双基”程序设计竞赛 1004
- jQuery模拟鼠标点击事件失效的问题
- iOS开发UI篇—Quartz2D简单使用(一)
- @property中有哪些属性关键字?/ @property 后面可以有哪些修饰符?
- Windows下FFmpeg快速入门 <;第二篇>;
- Fault Diagnosability Infrastructure Overview
- Zxing中文乱码解决方法
- Struts2--DomainModel接收参数---使用广泛!!!
- Java 加载、链接、初始化
- Python开发简单爬虫(二)---爬取百度百科页面数据
- opencv2.4.13+python2.7学习笔记--OpenCV中的图像处理--图像轮廓特征和几何矩
- hibernate设置二级缓存时报错java.lang.NoClassDefFoundError: org/hibernate/engine/jndi/JndiNameException