Struts2开发 --- Action及异常处理


一、Action介绍

 

在Struts2中,Action是最重要的,因为struts2是由多个Action组成的;比如要对业务进行分发都需要使用Action;

而定义Action通常需要遵循几个规范:

1.尽量继承ActionSupport,因为他为你实现了很多规范;

2.重写public String execute()throws Exception 方法,此方法是访问Action默认调用的方法(当然可以自己设定调用任意方法,此配置需要在struts.xml进行);

3.Action类中的属性是用于封装HTTP请求、页面结果数据的;在访问Action时,如果带有请求参数,则会自动调用setter方法对属性进行赋值;

了解Action接口和ActionSupport类:ActionSupport可以说是在Struts开发中最常用的类;

 

二、配置Action

 

我们在struts.xml中配置Action;

模板:

[html]
  1. <struts>  
  2. <constant name="struts.devMode" value="true"></constant>  
  3. <package name="" extends="struts-default" namespace="" >  
  4.     <action name="" class="">  
  5.          <result>1.jsp</result>  
  6.     </action>  
  7. </package>  
  8. </struts>  

 

配置Action规范:<action>元素必须在<package>中;

下面开始介绍struts.xml常用的元素;

 

1.<package>

 

package能够用几个属性:

(1)name:表示包名称,通过随意指定即可;

(2)extends:继承哪个父包,如果继承了某个父包,则会继承父包的action;通常我们需要继承 struts-default ;

(3)namespace:定义命名空间,如果不指定,则为默认的命名空间;如果为"/",则表示根命名空间;

(4)abstract:不常用,如果为true,则不能定义action;

举例:

[html]
  1. <package name="myPackage" namespace="/" extends="struts-default">  
  2.   
  3. </package>  

 

默认命名空间和根命名空间:

 

默认命名空间是一个很特殊的命名空间,如果要访问一个action,最后都会在默认命名空间中寻找;

比如/aaa/bbb.action,首先先去命名空间为"/aaa"中去找,如果找不到,则去默认命名空间中寻找bbb.action;

而根命名空间只是一个普通的命名空间;

 

2.<action>

 

<action>的属性有:

(1)name:指定了Action的名字,也是对外的URL;

(2)class:访问此Action的处理类,默认为ActionSupport,ActionSupport的返回值为SUCCESS,注意:必须要写出类的全名;

(3)method:如果不指定,则默认调用execute方法,如果指定,则调用此方法;

 

3.<result>

 

定义了Action的返回结果所对应的JSP(当然可以是任意的视图页面);

<result>的常用属性为

(1)name:Action方法返回的字符串,默认为success;

(2)type:结果类型,默认为dispatcher,此问题在下面会详细讲解;

 

代码示例:

[html]
  1. <package name="MyPackage" extends="struts-default" namespace="/" >  
  2.         <action name="loginAction" class="org.login.action.LoginAction" >  
  3.             <result name="success" type="redirect">  
  4.                 <param name="location">/result.jsp</param>  
  5.             </result>  
  6.             <result name="error" type="redirect">/result.jsp</result>  
  7.         </action>  
  8.           
  9.     </package>  

 

逻辑Action和物理Action的区别:

逻辑Action是在struts.xml中配置的action元素,物理Action是实际的Action类;

如果某个Action类存在fun1() 和fun2()方法,则可以定义两个逻辑Action,虽然处理类都是一样的;

  • 1
  • 2
  • 3
  • 下一页

相关内容