什么是WEB资源?

这里所说的WEB资源是指:HttpServletRequest, HttpSession, ServletContext 等原生的 Servlet API。

为什么需要访问WEB资源?

B/S 的应用的 Controller 中必然需要访问 WEB 资源: 向域对象中读写属性, 读写 Cookie等等操作均需要用到上述原生的ServletAPI

访问方法

和 Servlet API 解耦的方式:

只能访问有限的 Servlet API 对象, 且只能访问其有限的方法(读取请求参数, 读写域对象的属性, 使 session 失效...).

> 使用 ActionContext

使用示例:

public class ActionTest {

	@SuppressWarnings("unchecked")
public String execute() {
// 0、获取ActionContext对象
// ActionContext是Action的上下文,可以从中获取到当前Action需要的相关信息
ActionContext context = ActionContext.getContext(); // 1、获取application域对应的Map对象
// 通过调用上下文对象context的getApplication()方法获取
Map<String, Object> applicationMap = context.getApplication();
applicationMap.put("applicationKey", "applicationValue"); // 2、session
Map<String, Object> sessionMap = context.getSession();
sessionMap.put("sessionKey", "sessionValue"); // 3、request
// ActionContext中并没有提供获取getRequest方法来获取requestMap的方法
// 而是需要调用get方法,并且传入‘request’字符串作为参数来获取
Map<String, Object> requestMap = (Map<String, Object>) context.get("request");
requestMap.put("requestKey", "requestValue"); // 4、获取请求参数对应的map
// 键:请求参数名,值:请求参数的值对应的字符串数组
Map<String, Object> parameters = context.getParameters();
System.out.println(((String[]) parameters.get("name"))[0]);
return null;
} }  

> 实现 XxxAware 接口

使用示例:

public class ActionAwareTest implements ApplicationAware, SessionAware, RequestAware, ParameterAware {

	private Map<String, Object> applicationMap;

	private Map<String, Object> sessionMap;

	private Map<String, Object> requestMap;

	private Map<String, String[]> parameters;

	@Override
public void setApplication(Map<String, Object> map) {
this.applicationMap = map;
} @Override
public void setSession(Map<String, Object> map) {
this.sessionMap = map;
} @Override
public void setRequest(Map<String, Object> map) {
this.requestMap = map; } @Override
public void setParameters(Map<String, String[]> map) {
this.parameters = map; } public String execute() {
return null; } }

> 选用的建议:

若一个 Action 类中有多个 action 方法, 且多个方法都需要使用域对象的 Map 或 parameters, 则建议使用 Aware 接口的方式

    

     session 对应的 Map 实际上是 SessionMap 类型的! 强转后若调用其 invalidate() 方法, 可以使其 session 失效!

和 Servlet API 耦合的方式:

可以访问更多的 Servlet API 对象, 且可以调用其原生的方法.

> 使用 ServletActionContext

获取方法:

/**
* ServletActionContext 可以从中获取到一切Servlet API相关的方法
* @author Administrator
*
*/
public class ServletActionContextTest { public String execute(){
//获取原生request对象
HttpServletRequest request=ServletActionContext.getRequest();
//获取原生session对象
HttpSession session=request.getSession();
//获取原生application对象
ServletContext application=ServletActionContext.getServletContext(); return null;
}
}

> 实现 ServletXxxAware 接口.

获取方法:

/**
* 通过实现ServletXxxAware接口的方式由Struts2负责注入相关对象
* ServletRequestAware:用来注入request对象
* ServletContextAware:用来注入application对象
* @author Administrator
*
*/
public class ServletAwareActionTest implements ServletRequestAware, ServletContextAware { private HttpServletRequest request; private ServletContext application; private HttpSession session; @Override
public void setServletContext(ServletContext servletContext) {
this.application = servletContext; } @Override
public void setServletRequest(HttpServletRequest request) {
this.request = request;
this.session = request.getSession();
} }

最新文章

  1. IE6读取不到样式文件bug
  2. EasyUI DataGrid 实用例子(2015-05-22)
  3. 解决开启SQL Server sql Always on Group 事务日志增大的问题
  4. Implement Stack using Queues
  5. 怎么给OCR文字识别软件重编文档页面号码
  6. 微信朋友圈分享页面(JS-SDK 1.0)
  7. Java基础知识强化14:Java死亡竞赛题目解析
  8. jquery Tab默认情况下自动切换
  9. CSS3动画之透视
  10. Core Bluetooth下实现两个设备进行互联
  11. 改动EditPlus默认模板
  12. asp.net URL DES加密 什在URL中的使用
  13. C语言-学生博客汇总
  14. 修改应用进程open file值
  15. ubuntu中可以ping通IP地址但是ping不通域名的问题(www.baidu.com)
  16. 2月第3周业务风控关注|上海网信办复测23个被约谈APP 涉及1号店、小红书等
  17. libffi-dev : 依赖: libffi6 (= 3.2.1-4) 但是 3.2.1-4kord 正要被安装
  18. wifidog 源码初分析(4)-转
  19. Hibernate_day03讲义_使用Hibernate完成一对多的关系映射并操作
  20. Scala入门系列(二):条件控制与循环

热门文章

  1. java web 下实现文件下载
  2. ubuntu set host name
  3. apk反编译(5)用apktool重新生成一个未签名的apk
  4. Oracle过程包加密
  5. SqlServer中获取数据库中每个表的行数
  6. Hibernate4.2.2使用Annotation配置
  7. Junit单元测试的实例
  8. How to install JDK (Java Development Kit) on Linux
  9. bzoj2800
  10. 最简单的视音频播放示例3:Direct3D播放YUV,RGB(通过Surface)