三种方式:
1.只需要类中有一个固定的方法:
? 1 2 3 <code class = "hljs cs" > public String execute(){ return "..." }</code> ? 1 2 3 4 <code> 不需要实现或者继承任何接口或者父类。 当客户端发出的请求和该action匹配到时就会自动执行 execute()方法。 注意: execute方法一定要返回String类型的对象,每一个字符串都可以对应一个跳转的页面.(字符串是可以自己随便定义的,字符串对应哪一个跳转的页面也是自己定义,在struts.xml文件中定义) </code>2.实现指定的一个接口:com.opensymphony.xwork2.Action
这个接口中只有一个抽象方法 public abstract String execute()throws Exception;
? 1 2 <code>同时还有 5 个String类型的静态属性:ERROR SUCCESS INPUT NONE LOGIN </code> ? 1 2 3 4 5 <code class = "hljs java" > public static final String SUCCESS = "success" ; public static final String NONE = "none" ; public static final String ERROR = "error" ; public static final String INPUT = "input" ; public static final String LOGIN = "login" ;</code>3.继承一个指定的父类:com.opensymphony.xwork2.ActionSupport
二、像之前写完servlet类一样,写完action类后需要在struts.xml文件中进行配置.
在struts.xml配置action的目的和作用:通知struts2框架我们写的这个类是一个Action,将来struts2框架中要给这个类创建对象,调用方法以及这个Action加入更多丰富的功能。 例如:
? 1 2 3 4 5 6 7 8 9 <code class = "hljs applescript" >< package extends = "struts-default" name= "test" namespace= "/test" > <result>/index.jsp</result> </action> <result name= "myFirstAction" >/success.jsp</result> <result name= "myError" >/error.jsp</result> </action> </ package ></code> ? 1 2 <code> 1 )配置中< package >标签及其属性的介绍: </ package ></code> ? 1 <code class = "hljs scala" >< package extends = "struts-default" name= "test" namespace= "/test" ></ package ></code> ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 <code>< package >:一个struts.xml文件中可以配置多个< package >标签,一个< package >标签里面可以配置多个标签,一个标签里面可以配置多个<result> name= "test" 表示给当前 package 起一个名字为test 作用: 1 .唯一标识当前这个 package 。 2 .方便 package 与 package 之间通过这个名字来实现继承的关系.(像类和类之间的继承一样,要通过父类的名字来继承) extends = "struts-default" 表示当前这个 package 继承了另外一个名字叫做struts- default 的 package ,这个 package 在struts2的核心jar包中的struts- default .xml文件中定义的,里面定义了很默认的配置. 注意:我们在struts2中定义的所有 package ,都会是直接或者间接的继承了struts- default 这个 package .(像java中所有类都是直接或间接的继承了Object类一样) namespace= "/test" 表示当前 package 的命名空间为/test,将来这个 package 里面的所有的action在被访问的时候,路径里面都要加上这个命名空间. 2 )配置中标签属性及其子标签介绍: name= "test1" 表示当前配置这个action的名字为test1,这个名字是随便起的,可以和action类的名字相同或者不同.同时将来浏览器中的地址栏里面就是要出现这个名字来访问当前这个action类 class = ".." 表示当前配置的action对应的是哪一个java类,我们可以配置一个action,但是这个action可以没有对应任何java类。就像上面配置的MyTest的例子. <result> 标签表示将来这个action访问完了之后有哪些跳转. <result name= "myError" >/error.jsp</result> 表示当前这个action如果返回的字符串是myError,那么页面就跳转到/error.jsp中 注意:每一个action被访问完之后都会有一个字符串类型的返回值,即使访问任何一个java类对应action的时候,这个action也会默认返回字符串:success(前提是这个Action类直接或间接实现Action接口) <result name= "success" >/index.jsp</result> 等价于 <result>/index.jsp</result> <result>标签中的name属性默认值就是success </result></result></action></result></action></action></ package ></ pack