在Action 中访问web资源
1、什么是web资源:
HttpServletRequest,HttpSession,ServletContext等原生的Servlet API.
2、为什么要访问web资源?
B/S应用的Controller 中必然需要访问web资源:如域对象中读写属性,读取Cookie,获取realPath...
3、如何访问?
1、和Servlet API 解耦的方式:只能访问有限的Servlet API 对象,且只能访问有限的方法(读取请求的参数,读写域对象的属性,使Session对象失效等等)
-->使用ActionContext:为了避免与Servlet API 耦合在一起,方便Action 做单元测试,Struts2对HttpServletRequest,HttpSession和ServletContext进行了封装,构造了三个Map对象来替代者三个对象,在Action中可以直接使用HttpServletRequest,HttpServletSession,ServletContext对应的Map对象来保存和读取数据。
ActionContext是Action执行的上下文对象,在ActionConetxt中保存了Action执行所需要的所有对象,包括 parameters,request,session,application等等
获取HttpSession对应的Map对象:--public Map getSession()
获取ServletContext对应的Map对象:--public Map getApplication()
获取请求参数对应的Map对象:--public Map getParameters()
获取HttpServletRequest对应的Map对象:--publiic Object get(Object Key):ActionContext类中没有提供类似getRequest()这样的方法来获取HttpServletRequest对应的Map对象。要得到HttpServletRequest对应的Map对象,可以通过get()方法 传递参数request的方法来实现。键:请求参数的名称,值:请求参数的值对应的字符串数组
值得注意的是 1、getParameters 的返回值为在Map<String,Object>,而不是Map<String,String[]>
2、parameters 这个Map只能读,而不能写入。如果写入,不会出错,但是也不起任何作用
-->实现XxxAware接口:通过依赖注入的方式,实现对应的API的访问。实现AppcationAware接口,然后实现接口的方法后,就可以在Action中使用Appcation对应的Map对象了。其他的Aware接口还有ParametersAware、RequestAware、SessionAware等等接口
--> 选用建议:如果在Action类中有多个Action方法使用了域对象的Map或Parameter,则推荐使用通过实现XxxAware接口的方式
--> Session对应的Map 实际上是SessionMap类型的。强转后若调用其invalidate(),可以使其失效
2、和Servlet API 耦合的方式:可以访问更多的Servlet API 对象,且可以调用其原生的方法。直接访问Serlvet API 将使Action和Servlet环境耦合在一起,测试时需要有Serlvet容器。不便于对于Action的单元测试
-->使用ServletActionContext:
1、直接获取HttpServletRequest对象:--ServletActionContext.getRquest()
2、直接获取ServletSession对象: -- servletActionContext.getRequest().getSeesion()
3、直接获取ServletContext对象:--servletActionContext.getServletContext()
-->实现ServletXxxAware接口:通过实现ServletRequestAware,ServletContextAware等接口的方式
3、既然可以有非耦合的方式可以访问 Servlet API 了,为什么还需要耦合的方式来访问Serlvet API 呢?--因为,非耦合的方式只能访问Map,有时候需要访问原生的API,比如getRealPath(),这个方法只能通过访问原生的Servlet API 才能使用这个方法。
4、关于Struts2请求的扩展名问题
1、org.apache.struts2包下得default.properties中配置了Struts2应用中的一些常量;
2、sturts.action.extension 定义了当前struts2应用可以接受请求的扩展名。
3、可以在strust.xml 文件中以常量配置的方式修改 default.properties 所配置的常量。如:
<constant name="struts.action.extension" value="action,do,"></constant> 这样的配置,可以将当前strust2应用的扩展名修改为可以接受以 .action,.do和没有后缀的所有请求。
5、在手工完成字段的验证,显示错误信息,国际化等情况下,推荐继承 ActionSupport
6、struts.xml中result:
1、result是action节点的子节点;
2、result 代表action 方法执行后,可能去的一个目的地;
3、一个action 节点可以配置多个result 子节点;
4、result 的name属性对应着action方法可能有的一个返回值
5、reslut 共有两个属性,一个是name,另一个是type。该属性值在result-default包里的result-types节点的name属性中定义,默认的是dispatcher 转发,常用的四种 dispatcher 转发、redirect 重定向、redirectAction 重定向 Action 、chain 转发到一个Action 、Stream 文件下载
7、通配符映射匹配:一个web应用可能有成千上百个action声明,可以利用struts2提供的通配符映射机制把多个彼此相似的映射关系简化为映射关系。通配符有以下几种映射关系:
1、若找到多个匹配,没有通配符的那个将胜出。
2、若指定的动作不存在,strust将会尝试吧这个URI与任何一个包含着通配符*的动作名及进行匹配
3、被通配符匹配到的URI字符串的子串可以用{1}{2}...,{1}用来匹配第一个子串,{2}用来匹配第二个子串
4、{0}匹配整个URI
5、若struts找到的带有通配符的匹配不止一个,则按照先后顺序进行匹配
6、* 可以匹配零个或多个字符,但不包括 / 字符 ,如果想把 / 字符包括在内,需要使用 ** ,如果需要对某个字符进行转义,需要使用 \
在Action 中访问web资源的更多相关文章
- Struts2在Action中访问WEB资源
什么是WEB资源? 这里所说的WEB资源是指:HttpServletRequest, HttpSession, ServletContext 等原生的 Servlet API. 为什么需要访问WEB资 ...
- Struts2 之 Action 类访问 WEB 资源
接着上次博客的内容我继续分享我所学到的知识,和自己在学习过程中所遇到问题以及解决方案.当然,如果读者发现任何问题均可以在下方评论告知我,先谢! 在 Action 中访问 WEB 资源 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 等接口的方式)
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- JSP中的内置对象和Struts中的Web资源的详解
JSP中的内置对象有如下几种: request :继承于HttpServletRequest, HttpServletRequest继承ServletRequest, 获得的Request对象的方法: ...
- 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 ...
随机推荐
- win7下 安装 Flask
参考: http://my.oschina.net/935572630/blog/375758 一 环境版本: os: win7 x64 python: 2.7.10 x64 二 安装步骤: 由于fl ...
- grub4dos
default 1 timeout 5 gfxmenu (hd0,0)/grub/message configfile #####以上不在第一分区无法加载 title HITSZ_COMMAND co ...
- 【HOW】如何允许编辑用户配置文件属性
在自定义用户配置文件属性后会发现,通过属性本身的配置页面,只能允许用户修改自己的属性,而管理员无法修改其他用户的属性.若要允许管理员在用户信息页面修改用户配置文件属性,可通过如下操作实现: 1. 进入 ...
- div,li,span自适应宽度换行问题
<ul class="news"> <li><span class="lbl">右对齐,换行显示的解决方法</s ...
- java ==与equal
java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型.byte,short,char,int,long,float,double,boolean 他们之间的比较,应用双等号(== ...
- 移动端使用rem适配及相关问题
移动端适配方案,说多也很多.可以使用百分比布局,但百分比与em都是基于父元素进行计算的,在实际应用中不是很方便.使用rem不仅可以设置字体大小,块大小也可以设置.而且可以良好的适配各种终端,所以这方案 ...
- For Your Dream
队名:Braveheart 队员介绍: 队长:李洋洋 队员:姚欢,杨仁波,张波,乔闯 项目名称:数据沈航 总体任务: 收集整理学校的数据,为每个想要了解沈航的人展现一份我们收集来的信息 项目分组: ( ...
- Ax 导出EXCEL给范围内的每个单元格加边框
1. 首先在Class\SysExcelRange加画边框的方法 思路用EXCEL录宏的功能得到给一批单元格画格子的VBA代码,在AX将对象转为COM对象,基本VBA代码也能装为AX内能用的内容. p ...
- 【转】C#大文件读取和查询--内存映射
笔者最近需要快速查询日志文件,文件大小在4G以上. 需求如下: 1.读取4G左右大小的文件中的指定行,程序运行占用内存不超过500M. 2.希望查询1G以内容,能控制在20s左右. 刚开始觉得这个应该 ...
- MSMQ消息队列 用法
引言 接下来的三篇文章是讨论有关企业分布式开发的文章,这三篇文章筹划了很长时间,文章的技术并不算新,但是文章中使用到的技术都是经过笔者研究实践后总结的,正所谓站在巨人的肩膀上,笔者并不是巨人,但也希望 ...