02_Action
- action:代表一个Struts2的请求
- Action:能够处理action请求的类
- 属性名必须与JavaBeans属性名相同
- 属性的类型可以是任意类型,从字符串到非字符串(基本数据类型)之间的转换可以自动发生
- 必须有一个无参的构造器
- 至少有一个供Struts在执行这个action时可以调用的方法
- 同一个Action类可以拥有多个action方法
- Struts2会为每一个HTTP请求创建一个Action实例,即Action不是单例的,是线程安全的。
- 什么是web资源:
- HttpRequest、HttpSession、ServletContext等原生Servlet API
- 为什么要访问web资源:
- B\S模式的Controller应用程序中必然需要访问web资源:向域对象中读写属性、读写cookie、获取realPath... ...
- 如何访问web资源:
- 与Servlet API解耦的方式访问:
- 特点:只能访问有限的Servlet API,也只能调用有限的方法(读取请求参数、读取域对象的属性、使session失效...)
- 实现方式:
- 使用ActionContext
- 实现XxxAware接口
- 好处:为了防止与Servlet API耦合在一起,action方便做单元测试,Struts2对HttpRquest、HTTPSession、ServletContext进行了封装,构造了三个Map对象来替代这三个对象,可以直接使用其对应的Map对象来保存和读取数据
- 与Servlet API耦合的方式访问:
- 特点:可以访问更多的Servlet API,且能调用其原生的方法
- 实现方式:
- 使用ServletActionContext
- 实现ServletXxxAware接口
- 什么是ActionContext:
- ActionContext是Action执行的上下文对象, 在ActionContext中保存了Action执行所需要的所有action对象,包括request、session、parameters、application等
- 访问web资源:
- 获取ActionContext对象:ActionContext actionContext = ActionContext.getContext();
- 通过map集合来获取application和session、request对象:
- Map<String, Object> applicationMap = actionContext.getApplication();
- Map<String, Object> sessionMap = actionContext.getSession();
- Map<String, Object> requestMap = (Map<String, Object>) actionContext.get("request");
- Struts2.3:
- Map<String,Object> parameters = actionContext.getParameters();
- 打印结果:只打印Value
- 注意:getParameters的返回值为Map<String,Object>而不是Map<String,String[]>
- 注意:parameters只可以读不可以写,但是写的话不报错
- Struts2.5:
- Map<String, Parameter> parameters = actionContext.getParameters();
- 打印结果:键值对都打印
- 注意:parameters只可以读不可以写,写的话会报错
- 注意:使用Map集合的值只可以为Parameter对象,不可以为Object
- 注意:如果需要获取值,可以使用parameters.get(Key)获取
- Struts2.3:
- 通过实现Aware接口,如applicationAware、requestAware、sessionAware、parametersAware接口
- 定义私有的map集合
- 在set方法中赋值即可
- Struts2.5:
- 与2.3唯一区别:在2.5版本中不支持使用ParameterAware接口,同样,不可以赋值
- 注意:在Aware和ActionContext两种方式中,如果一个Action类中的多个action方法都需要使用域对象中的map或parameters,则建议使用Aware接口的方式
- 注意:session实际上是sessionMap类型的!如果强转后调用其invalidate()方法,可以使session失效
- 通过ServletActionContext来获取到当前Action 对象所需要用到的一切Servlet API相关的对象
- 使用方式:
- 获取 HttpServletRequest:ServletActionContext.getRequest();
- 获取 HttpSession:ServletActionContext.getRequest().getSession();
- 获取 ServletContext:ServletActionContext.getServletContext();
- 通过实现ServletXxxWare接口的方式可以由Struts2注入Servlet 相关的对象
- 使用方式
- ServletRequestAware:注入HTTPServletRequest对象(比较常用)
- ServletResponseAware:注入HttpServletResponse对象
- ServletContextAware:注入HttpServletContext对象(比较常用)
- 打开jar包struts2-core,找到org.apache.struts2 包下面的default.properties,打开后会找到关于struts扩展名的配置,其默认的扩展名为action或者为空
- 如何自定义扩展名:
- 在struts2的配置文件中添加一个常量:
- 在struts2的配置文件中添加一个常量:
- 注意:在给命名空间命名后,同一个package中的action跳转不需要带/xx
- 概述:ActionSupport即为默认的Action类,若某个action节点没有配置class属性,则ActionSupport为待执行的Action类,execute为默认执行的方法
- ActionSupport的五个常量;LOGIN、SUCCESSS、INPUT、ERROR、NONE
- 继承ActionSupport类的好处:ActionSupport类帮我们实现了多个常用接口,而我们只需要继承这个类就可以调用这些接口中的方法
- 概述:
- result是action节点的子节点,是一个action方法执行后,可能去的目标。
- 一个action可以配置多个result
- result的name属性值对应着action方法可能有的返回值
- result一共有两个属性值:name和type,type代表结果的响应类型
- type的值:红色为常用型
- chain:转发到action
- dispatcher:默认值
- freemarker:
- httpheader:
- redirect:重定向
- redirectAction:重定向到action
- stream:主要是文件的上传和下载
- velocity:
- xslt:
- plainText:
- postback:
- 注意:重定向到action的时候,可以直接使用redirect便捷的重定向到action,但是转发的时候只能使用chain
- 注意:在重定向到一个action时,且该action返回值为'success'时,其返回值最好不要为“success”,即不要重复
- 概念:一个web工程可能有多个action声明,为了减少重复配置的问题,可以使用Struts2提供的通配符映射机制,将多个相似的映射关系简化为一个
- 通配符映射规则:
- 若找到多个匹配,则有精确匹配先映射精确匹配
- 若指定action不存在,则通配符会将其与任意一个包含通配符*的action进行匹配
- {0}表示匹配整个URI
- 若struts2找到的带有通配符的匹配不止一个,则按先后顺序执行
- *可以匹配零个至多个字符,但不能匹配“/”,若有需要则使用**表示,使用“\”进行转义
- 概念:通过URL动态的调用方法而忽略配置文件中的方法配置
- 调用方法:
- 找到struts-core中的org.apache.struts包下面的default.properties,找到搜索Dynamic,找到
并复制 - 在struts.xml文件中使用constant配置:
- 在.action之前通过action名!方法名进行调用:Product!save.action
- 找到struts-core中的org.apache.struts包下面的default.properties,找到搜索Dynamic,找到
- 注意:此写法会暴露所调用方法,存在安全隐患,在2.3以后版本已不支持,此处仅做了解
02_Action的更多相关文章
随机推荐
- ICC_lab总结——ICC_lab5:布线&&数字集成电路物理设计学习总结——布线
字丑,禁止转载! 这里将理论总结和实践放在一起了. 布线的理论总结如下所示: 下面是使用ICC进行实践的流程: 本次的布线实验主要达成的目标是: ·对具有时钟树布局后的设计进行可布线性检查 ·完成布线 ...
- python 异常 反射
异常 反射 一.异常处理: AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x IOError 输入/输出异常:基本上是无法打开文件 ImportError ...
- SpringMVC(四):@RequestMapping结合org.springframework.web.filter.HiddenHttpMethodFilter实现REST请求
1)REST具体表现: --- /account/1 HTTP GET 获取id=1的account --- /account/1 HTTP DELETE 删除id=1的account ...
- Struts(九):值栈(OGNL)
引言 在我们开发过程中,往往会使用一个对像传递到一个具体的action中,之后到跳转页面中访问对应对象的具体的参数. 比如:我们搭建一个struts2项目: 回顾下如何搭建strut2: 1.下载的s ...
- 初学Java Web(9)——学生管理系统(简易版)总结
项目开始时间:2018年4月8日14:37:47 项目完成时间:2018年4月9日10:03:30 技术准备 这个项目是自己用于巩固 J2EE 相关知识的练手项目,非常简单,但是相关的功能却非常实用, ...
- Spring之事务管理
事务管理对于企业应用至关重要.它保证了用户的每一次操作都是可靠的,即便出现了异常的访问情况,也不至于破坏后台数据的完整性. 就像银行的自助取款机,通常都能正常为客户服务,但是也难免遇到 ...
- 完成 bass 库的频谱显示效果图
效果如图所示,比 bass 官方自带的例子效果要好那么一点点(峰值有滞留)...
- C# webBrowser 控件赋值
string body = PostWebRequest(txtURL.Text, textBox2.Text); if (webBrowser1.ReadyState != WebBrowserRe ...
- 认识JQuery,JQuery的优势、语法、多库冲突、JS原生对象和JQuery对象之间相互转换和DOM操作,常用的方法
(一)认识JQuery JQuery是一个JavaScript库,它通过封装原生的JavaScript函数得到一套定义好的方法 JQuery的主旨:以更少的代码,实现更多的功能 (二)JQue ...
- python day two,while
一.运算符号 算数运算符:+ .-.*././/(取整除).%(去余).** 比较运算符:>.< .>=.<=.== 赋值运算符:=.+=.-=./=.%=.**= 逻辑预算符 ...