Action
来源:互联网 发布:描绘网络的 电影 编辑:程序博客网 时间:2024/06/10 16:13
Struts2的Action
为方便起见,struts2中也为我们提供了一个基本的Action父类—-ActionSupport。
struts2不要求我们自己设计的Action类继承任何的struts基类或struts接口,但是我们为了方便实现我们自己的action,大多数情况下都会继承ActionSupport类,并重写此类里的public String execute() throws Exception方法。因为此类中实现了很多的实用借口,提供了很多默认方法,这些默认方法包括国际化信息的方法、默认的处理用户请求的方法等,这样可以大大的简化Acion的开发。
Action接口与ActionSupport类的区别
Action接口有:
public static final Java.lang.String SUCCESS =”success”;
public static final java.lang.String NONE = “none”;
public static final java.lang.String INPUT = “input”;
public static final java.lang.String LOGIN = “login”;
public abstract java.lang.String execute() throws java.lang.Exception;
而Actionsupport这个工具类在实现了Action接口的基础上还定义了一个validate()方法,重写该方法,它会在execute()方法之前执行,如校验失败,会转入input处,必须在配置该Action时配置input属性。 另外,Actionsupport还提供了一个getText(String key)方法还实现国际化,该方法从资源文件上获取国际化信息.
Action配置中的各项默认值
<action name=“login" class=“com.lovo.aciton.LoginAction" method="execute" > <result name="success">/hello.jsp</result></action>
如果没有为action指定class,默认是ActionSupport。
如果没有指定result的name属性,默认值为success。
如果没有为action指定method,默认执行action中的execute() 方法。
Action通配符配置方式
<action name="user_*" class="com.lovo.action.UserAction" method="{1}“ > <result name="success"></result> <result name="input">/addUser.jsp</result></action>
UserAction中有以下两个处理方法:
public String add() throws Exception{}public String update() throws Exception{}
Jsp中如果请求提交项是:user_add.action那就执行add();
如果是user_update.action那就执行update()
动态请求Action方法
第一种方式:指定method属性;
第二种方式:通配符方式(官网推荐使用);
第三种方式:感叹号方式(官网不推荐使用) 用这种方式需要先开启一个开关
<constant name=“struts.enable.DynamicMethodInvocation” value=“true” />
请求url形如: /工程名/action配置name!Action方法名.action
Action中result的各种转发类型
<action name=“login" class=“com.lovo.aciton.LoginAction" method="execute" > <result name="success">/hello.jsp</result></action>
struts2中提供了多种结果类型,常用的类型有: dispatcher(默认值)、 redirect 、 redirectAction 、 plainText
下面是redirectAction 结果类型的例子,如果重定向的action在同一个包下:
<result type="redirectAction">helloworld</result>
如果重定向的action在别的命名空间下:
<result type="redirectAction"> <param name="actionName">helloworld</param> <param name="namespace"> /包的namespace </param></result>
plainText:显示原始文件内容,例如:当我们需要原样显示jsp文件源代码 的时候,我们可以使用此类型。
<result name="source" type="plainText "> <param name="location">/xxx.jsp</param> <param name="charSet">UTF-8</param><!-- 指定读取文件的编码 --></result>
多个Action共享全局result配置
当多个action中都使用到了相同视图,这时我们应该把result定义为全局视图。struts1中提供了全局forward,struts2中也提供了相似功能:
<package ……> <global-results> <result name="message">/message.jsp</result> </global-results></package>
配置时为Action的属性注入值
Struts2为Action中的属性提供了依赖注入功能,在struts2的配置文件中,我们可以很方便地为Action中的属性注入值。注意:属性必须提供setter方法。
public class HelloWorldAction{ private String savePath; public String getSavePath() { return savePath; } public void setSavePath(String savePath) { this.savePath = savePath; }}
<package name="itcast" namespace="/test" extends="struts-default"> <action name="helloworld" class="cn.itcast.action.HelloWorldAction" > <param name="savePath">/images</param> <result name="success">/hello.jsp</result> </action></package>
上面通过节点为action的savePath属性注入“/images”
指定需要Struts 2处理的请求后缀
前面我们都是默认使用.action后缀访问Action。其实默认后缀是可以通过常量”struts.action.extension“进行修改的,例如:我们可以配置Struts 2只处理以.do为后缀的请求路径:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"><struts> <constant name="struts.action.extension" value="do"/></struts>
如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开。如:
<constant name="struts.action.extension" value="do,Go"/>
Action中如何操作作用域对象
方法一:通过Action实现下面三个接口
RequestAware可以得到一个Map形式的request
SessionAware可以得到一个Map形式的Session
ServletRequestAware可以得到一个真正的HttpServletRequest对象
Action中如何操作作用域对象
方法二:
使用ActionContext对象
在业务方法中添加如下代码:
ActionContext ctx = ActionContext.getContext(); ctx.getApplication().put("app", "应用范围");//往ServletContext里放入app ctx.getSession().put("ses", "session范围");//往session里放入ses ctx.put("req", "request范围");//往request里放入req
方法三:
使用ServletActionContext对象
在业务方法中添加如下代码:
HttpServletRequest request=ServletActionContext.getRequest();ServletContext servletContext = ServletActionContext.getServletContext(); HttpServletResponse response = ServletActionContext.getResponse();
Struts2之装载表单提交数据
Struts2装载表单数据有两种方式:
1、Field-Driven(属性驱动)
2、Model-Driven(模型驱动)
之前我们都采用的第一种方式,即在Action中书写属性,并提供相应的get/set方法。
注意:
1、如果属性是简单数据类型(如:基本数据类型、字符串、日期等),提交项的名称与对应属性名保持一致;
2、如果属性是Bean对象类型,那么提交项的名称应为Bean对象名称.属性名。
Model-Driven(模型驱动)
ModelDriven主要用于在Action直接封装Bean对象(与属性驱动的第二个用途一样)。
实现方式:Action需要实现ModelDriven接口,重写getModel方法。
- ACTION
- Action
- action
- action
- action
- *.action
- action
- Action
- ACTION
- action
- Action
- ACTION
- Action
- action
- <action>
- Action
- Action
- Action
- reactor模式
- ROS_tf_2016_1_25
- 用开源项目ExpandableTextView打造可以下拉扩展的TextView
- Hibernate与 MyBatis的比较
- System.out.println与System.err.println的区别
- Action
- mybatis与hibernate区别
- Java设计模式之适配器模式
- CSS网页布局教程:绝对定位和相对定位
- 支付宝VR红包简陋破解方法。(红包图片处理)
- 考研总结
- 合并安装文件源
- 从零开始打造自己的框架 - 类的自动加载
- ftp 给定路径 下载改路径下的所有文件