<package name=”test” namespace=”/test” extends=”struts-default”>
<action name = “HelloWorld” class = “zjh.struts2.lx.HelloWorld” method = “ execute “>
<result name = “ success “ > /success.jsp </result>
</action>
</package>
在struts2中使用包来管理action,包的作用和java中的类包是非常类似的,它主要用于管理一组业务功能相关的action。在实际应用中,我们应该把一组业务相关的action放在同一个包下。
如果其它包要继承该包,必须通过该属性进行引用。包的namespace属性用于定义该包的命名空间,命名空间作为访问该包下Action的路径的一部分,如访问上面例子的Action,访问路径为:/test/HelloWorld.action。Namespace属性可以不配置,对本例而言,如果不指定该属性,默认的命名空间为“”(空字符串)。
通常每个包都应该继承struts-default 包,因为struts2很多核心的功能都是拦截器来实现。如:从请求中把请求参数封装到action、文件上传和数据验证行等等都是通过拦截器实现的。Struts-default定义了这些拦截器和result类型。可以这么说:当包继承了struts-default才能使用struts2提供的核心功能。Struts-default包是在struts2-core-2.x.x..jar文件中的struts-default.xml中定义。Struts-default.xml也是struts2默认配置文件。Struts2每次都会自动加载struts-default.xml文件。
包还可以通过abstract=”true”定义为抽象包,抽象包中不能包含action。
上面例子中使用到zjh.struts2.lx.HelloWorld类的代码如下:
package zjh.struts2.lx; import com.opensymphony.xwork2.ActionSupport; public class HelloWorld extends ActionSupport { private String message; public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public String execute() { this.message = "这是我的第一个struts2应用程序"; return SUCCESS; } } |
上面例子中使用到的success.jsp的代码如下:
<struts> <package name="test" namespace="/test" extends="struts-default"> <action name="HelloWorld" class="zjh.struts2.lx.HelloWorld"> <result name="success">/success.jsp</result> </action> </package> </struts>
|
注意:访问struts2中action URL路径由两部分组成:即“包的命名空间+action的名称”,例如访问本例中的HelloWorld action的URL路径为:/test/HelloWorld (注意:完整路径为:http:localhost:8080/内容路径/test/HelloWorld)。另外我们也可以加上.action后缀表示访问此Action应用。
<package name=”test” namespace=”/test” extends=”struts-default”> <action name = “HelloWorld” class = “zjh.struts2.lx.HelloWorld” method = “ execute “> <result name = “ success “ > /success.jsp </result> </action> </package> |