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 ...
随机推荐
- Linux3.4内核的基本配置和编译
转载自:http://www.embedu.org/Column/Column634.htm 作者:李昕,华清远见研发中心讲师. 了解Linux3.4内核的特性及新增功能,掌握Linux内核的编译过程 ...
- LE33
MIC5207-3.3YM5 MIC5207-3.3BM5 LE33代码电源管理IC芯片全新原装 http://item.taobao.com/item.htm?spm=a230r.1.14.251. ...
- C# DataGridView控件 动态添加新行
DataGridView控件在实际应用中非常实用,特别需要表格显示数据时.可以静态绑定数据源,这样就自动为DataGridView控件添加相应的行.假如需要动态为DataGridView控件添加新行, ...
- tlProPlayer for windows
tlProPlayer tlProPlayer简介 tlProPlayer是一款定位高性能产品,支持透传,原生输出,并支持硬解码(硬件加速)的多媒体产品,兼容tlplayer所有特性.支持视频加密播放 ...
- group by的SQL语句
有一张项目表 CREATE TABLE [ProjectTable] ( [ProjectID] NVARCHAR(16) NOT NULL, [ProjectName] NVARCHAR(20) N ...
- tuxedo入门
为文件增加用户执行权限: 官网下载tuxedo111120_64_Linux_01_x86.bin su //进入root操作,防止权限不够 创建文件夹,用来做tuxedo文件的安装路径 cd /op ...
- 1651. Shortest Subchain(bfs)
1651 终于A了 看这题容易想到最短路 看到错的很多 还特意注意了好几处 后来发现 必须按给出的顺序出边 想了想 这不就是BFS 然后就是各种细节 i->i+1ori->j(a[i]== ...
- poj 2528 Mayor's posters(线段树)
题目:http://poj.org/problem?id=2528 题意:有一面墙,被等分为1QW份,一份的宽度为一个单位宽度.现在往墙上贴N张海报,每张海报的宽度是任意的, 但是必定是单位宽度的整数 ...
- UVa 557 (概率 递推) Burger
题意: 有两种汉堡给2n个孩子吃,每个孩子在吃之前要抛硬币决定吃哪一种汉堡.如果只剩一种汉堡,就不用抛硬币了. 求最后两个孩子吃到同一种汉堡的概率. 分析: 可以从反面思考,求最后两个孩子吃到不同汉堡 ...
- EF DataBase First生成model的验证
如何避免在EF自动生成的model中的DataAnnotation被覆盖掉 相信很多人刚接触EF+MVC的时候,DataBase First模式生成model类中加验证信息的时候,会在重新生成mode ...