Struts2在Action中访问WEB资源
什么是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();
} }
Struts2在Action中访问WEB资源的更多相关文章
- Struts2 之 Action 类访问 WEB 资源
接着上次博客的内容我继续分享我所学到的知识,和自己在学习过程中所遇到问题以及解决方案.当然,如果读者发现任何问题均可以在下方评论告知我,先谢! 在 Action 中访问 WEB 资源 web 资源 所 ...
- 在Action 中访问web资源
1.什么是web资源: HttpServletRequest,HttpSession,ServletContext等原生的Servlet API. 2.为什么要访问web资源? B/S应用的Contr ...
- Struts2的Action中访问servletAPI方式
struts2的数据存放中心为ActionContext,其是每次请求来时都会创建一个ActionContext,访问结束销毁,其绑定在ThreadLocal上,由于每次访问web容器都会为每次请求创 ...
- struts 在Action中访问web元素(request,session等)
出发jsp: <?xml version="1.0" encoding="GB18030" ?> <%@ page language=&quo ...
- 2.struts2访问web资源(在struts2中获取session,request等等)
什么是web资源:web资源就是指request,response,session,servlet的api 为什么需要访问web资源:因为图片上传,需要获取图片的目录,就需要通过action来访问we ...
- Struts2(四):在Action中如何访问Web资源
1.什么WEB资源? HttpServletRequest,HttpServletRespone,HttpApplication,ServletContext,HttpSession等原生Servle ...
- [原创]java WEB学习笔记55:Struts2学习之路---详解struts2 中 Action,如何访问web 资源,解耦方式(使用 ActionContext,实现 XxxAware 接口),耦合方式(通过ServletActionContext,通过实现 ServletRequestAware, ServletContextAware 等接口的方式)
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- Struts2学习第三课 访问Web资源
1.什么是WEB资源? HttpServletRequest,HttpSession,ServletContext等原生的Servlet API. 2.为什么访问WEB资源? B/S的应用的Contr ...
- Struts2中访问web元素的四种方式
Struts2中访问web元素的四种方式如下: 通过ActionContext来访问Map类型的request.session.application对象. 通过实现RequestAware.Sess ...
随机推荐
- typeof和GetType的区别
http://stackoverflow.com/questions/4537945/what-is-the-difference-of-getting-type-by-using-gettype-a ...
- Android Studio安装后第一次进不去
Android Studio 安装后第一次进不去,因为检查到有更新的SDK,在下载.但是呢,没有FQ的情况下,无法下载下来,所以就卡住了. 那么解决方案就是让 Android Studio 第一次启动 ...
- sort+结构体实现二级排序
之前介绍的sort函数由于其效率较高,使用较为简单让我用起来那叫一个爽,今天再写一篇使用sort+结构体实现二级排序的方法. 还是先想个问题吧,比如我想输入5个同学的名字和身高,然后得到他们身高的降序 ...
- Effective C++学习笔记 条款07:为多态基类声明virtual析构函数
一.C++明确指出:当derived class对象经由一个base class指针被删除,而该base class带着一个non-virtual析构函数,其结果未定义——实际执行时通常发生的是对象的 ...
- Hibernate学习笔记之EHCache的配置
Hibernate默认二级缓存是不启动的,启动二级缓存(以EHCache为例)需要以下步骤: 1.添加相关的包: Ehcache.jar和commons-logging.jar,如果hibernate ...
- Java Web编程的主要组件技术——Servlet
参考书籍:<J2EE开源编程精要15讲> Servlet是可以处理客户端传来的HTTP请求,并返回响应,由服务器端调用执行,有一定编写规范的Java类. 例如: package test; ...
- AspNet WebApi OData 学习
OData介绍:是一个查询和更新数据的Web协议.OData应用了web技术如HTTP.Atom发布协议(AtomPub)和JSON等来提供对不同应用程序,服务 和存储的信息访问.除了提供一些基本的操 ...
- PNG文件结构分析 ---Png解析
PNG文件结构分析 ---Png解析 为了实现更高级的应用,我们必须充分挖掘PNG的潜力. PNG的文件结构 根据PNG文件的定义来说,其文件头位置总是由位固定的字节来描述的: 十进制数 13 ...
- 【JS】限制两个或多个单选框最多只能选择一个
$(function () { /*$("#checkbox1").click(function(){ if($(this).attr("checked") = ...
- validator的验证
通常喜欢这么写验证 <form method="post" data-ajax="false" action="/Shppping/PlaceO ...