一、Action介绍
在Struts2中,Action是最重要的,因为struts2是由多个Action组成的;比如要对业务进行分发都需要使用Action;
Struts2相比Struts1,采用低侵入式设计,即一个普通的Java类也可以作为一个Action,不一定要继承或实现Action接口;
而定义Action通常需要遵循几个规范:
1.可以选择继承ActionSupport;
2.重写public String execute()throws Exception 方法,此方法是访问Action默认调用的方法(当然可以自己设定调用任意方法,此配置需要在struts.xml进行);
3.Action类中的属性是用于封装HTTP请求、页面结果数据的;在访问Action时,如果带有请求参数,则会通过params拦截器对Action同名的属性进行赋值;
Action和ActionSupport:用于规范action类的处理;
二、配置Action
我们在struts.xml中配置Action;
模板:
<struts>
<constant name="struts.devMode" value="true"></constant>
<package name="" extends="struts-default" namespace="" >
<action name="" class="">
<param name="name">xiazdong</param>
<result>1.jsp</result>
</action>
</package>
</struts>
配置Action规范:<action>元素必须在<package>中;
下面开始介绍配置action时的常用元素;
1.<package>
package能够用几个属性:
(1)name:表示包名称,通过随意指定即可;
(2)extends:继承哪个父包,如果继承了某个父包,则会继承父包的action;通常我们需要继承 struts-default ,此package定义了内建拦截器;
(3)namespace:定义命名空间,如果不指定,则为默认的命名空间;如果为"/",则表示根命名空间;
(4)abstract:不常用,如果为true,则不能定义action;
举例:
<package name="myPackage" namespace="/" extends="struts-default">
</package>
默认命名空间和根命名空间:
默认命名空间是一个很特殊的命名空间,如果要访问一个action,最后都会在默认命名空间中寻找;
比如/aaa/bbb.action,首先先去命名空间为"/aaa"中去找,如果找不到,则去默认命名空间中寻找bbb.action;
而根命名空间只是一个普通的命名空间;
访问某个action时的URL 通常为: http://localhost:8080/ApplicationName/Namespace/ActionName.action;
命名空间的查找规则:
比如 http://localhost:8080/StrutsProject/a/b/c/d/aa.action;
1.查找是否存在/a/b/c/d 命名空间
如果不存在,则跳到步骤2
如果存在则查找是否存在aa.action
如果不存在该action,则到默认命名空间中查找是否存在aa.action;
如果存在即可;
2.查找是否存在/a/b/c 命名空间