一、package中的name,extends,namespace
跟java中的package一样,在java中是对相同的名的java类进行package区分,而这里是对相同名的action进行区分。
如:
<package name="front" extends="struts-default" namespace="/front">
<action name="hello">
<result type="dispatcher">/hello.jsp</result>
</action>
</package>
<package name="back" extends="struts-default" namespace="/back">
<action name="hello">
<result type="dispatcher">/hello.jsp</result>
</action>
namespace可以来确定哪个命名之下的action,extends可以继承其他的package的配置,namespace可以不写,也可以写成namespace=“ ”,这是就相当于可以接受任何namesapce情况的连接,只要该链接的action存在,即可访问。
也就说namespace为空的解决了其他package不能处理的action
二、action 中的name, class,method
如一中的action他是直接执行了默认的action类,我们可以自己定义action类来执行自己需要的操作,并且返回值,根据返回的result来确定下次执行的页面
<action name="hello" class="com.thridProject.action.HelloAction">
<result type="dispatcher">/hello.jsp</result>
</action>
这个时候我们可以在后台写自己的HelloAction.java的源文件了
在实现HelloAction的时候有三种方法;
1)只要这个Class类中存在execute方法并且该方法的返回值是一个String类型,Struts2就能把这个类当成是一个Action实现方法(Struts1与Struts2的区别)
package com.thridProject.action;
public class HelloAction {
public String execute(){
return "success";
}
}
2)实现的类继承ActionSupport类,并且实现execute方法:
package com.thridProject.action;
import com.opensymphony.xwork2.ActionSupport;
public class HelloAction extends ActionSupport {
/**
*
*/
private static final long serialVersionUID = 1L;
public String execute(){
return "success";
}
}
3)第三种方法是继承Action 接口,并且实现Action接口的execute方法。不过一般开发我们只用第二种方法.
在这个地方我们可以稍微注意下,在jsp路径的问题上,最好使用绝对路径,并且MyEclipse会自动的帮你生成basepath
method指定在调用该类时执行哪个方法,默认会调用execute方法,但是我们可以给他指定方法,只要方法的返回值是个String类型就可以。这个时候Struts.xml的配置为:
<package name="default" extends="struts-default" namespace="/">
<action name="hello" class="com.thridProject.action.HelloAction" method ="add">
<result type="dispatcher" name="success">/hello.jsp</result>
</action>
</package>
java类型的代码为:
package com.thridProject.action;
import com.opensymphony.xwork2.ActionSupport;
public class HelloAction extends ActionSupport {
/**
*
*/
private static final long serialVersionUID = 1L;
public String add(){
return "success";
}
}
当然方法也可以是其他的名字,都是一样的道理。
当然方法的调用可以是使用动态的方法调用,这个时候不需要再Struts.xml的action配置中写上method,我们可以在写url是动态的指定格式为:
http://loacalhost:8080/ThridProject/hello!add