jacksun1978

导航

 

 

1、业务控制器

    业务控制器组件指用户实现的action类的实例。业务控制器组件不会对用户的请求进行任何实际处理,而是调用业务模型组件处理。这也是为什么称action为控制器的原因。

 

2、多视图支持

    struts2返回逻辑视图名时,逻辑视图未与任何的视图技术关联,只是返回一个字符串。如果需要在struts2中使用其他视图,可以在struts.xml中的<action>的<result>中指定type属性即可。如果没有指定,模式的是jsp视图。

 

3、struts2标签库

    如果web应用使用的servlet2.3规范,web应用不会自动加载struts2框架的标签文件,需要在web.xml中指定。

    如果web应用使用的是servlet2.4规范,不需要指定,web应用会自动加载。

 

4、Action

4.1、Action方位Servlet API

struts2提供了一个ActionContext类,通过此类Action可以访问Servlet API。

 

4.2、默认Action处理类

在struts.xml中,如果action没有指定class属性,因为该action所在的package直接或者间接地继承了struts-defalut包,所以默认的action处理类就是ActionSupport。可以通过<default-action-ref>改变默认的处理类。

 

4.3动态方法调用

 

在Action中,可以包含多个业务处理逻辑,不同的请求调用同一个Action的不同的方法。此时可以通过动态方法调用来处理这种请求。

动态方法调用指表单元素的action并不直接等于某个Action的名字,而是以如下形式来指定form的action属性:

action=”action!methodName.action”

 

例如:

document.forms[0].action=”login!register.action”,意思是将该表单提交给login Action的register方法处理。

对于动态调用的方法,与execute方法只是方法名不同,返回值和参数与execute方法应该绝对相同。

 

4.4 为action元素指定method方法

 

可以将一个Action处理类映射成多个逻辑Action。

例如:

<action name=”login” class=”com.cc.action.LoginAction” method=”login”>

<action name=”regist class=”com.cc.action.LoginAction” method=”regist”>

 

虽然都是调用LoginAction处理类,但是指定不同的method,映射成多个逻辑action。

 

4.5 使用通配符

 

使用通配符是另外一种形式的动态方法调用。。

在配置<action>元素时,需要指定name,class和method属性。其中name使用通配符,class和method属性使用表达式。

例如:

<action name=”*Action” class=”com.cc.action.LoginAction” method=”{1}”>

上面的配置定义了一系列逻辑action。只要用户的请求是*Action.action的形式,都可以通过该处理类处理。如果用户的请求是loginAction.action,那么通过该Action的login方法来处理。

 

另外一个例子:

<action name=”*Action” class=”com.cc.action.{1}ControlAction”>

上面的配置也定义了一系列逻辑action。因为没有指定method属性,所以总是默认使用execute方法来处理。

凡是请求符合*Action.action的形式,都匹配到不同的Action处理类中处理。例如用户的请求时RegistAction.action,则将请求发送到RegistControlAction类中处理。

 

如果需要,struts2允许同时在class和method属性中使用表达式,例如:

<action name=”*_*" class=”com.cc.action.{1}Action method=”{2}>

如果用户请求为Book_save.action,那么{1}表达式的值为Book,{2}表达式的值为save。

 

表达式不但可以使用在<action>元素的class 和method属性中,还可以使用在<action>的子元素<result>元素中

 

除非用户请求的URL与Action的name属性完全相同,否则如果在struts.xml中,有多个通配符都可以匹配客户的请求,是按照定义的先后顺序来决定由哪个Action来处理客户请求。

 

4.6配置默认action

 

struts2框架允许定义一个默认action,当用户的请求的URL在框架中找不到一个对应的action时,系统将使用默认的action。

 

配置默认action通过<default-action-ref>元素来完成。

 

例如:

<default-action-ref name=”simpleViewResultAction”/>

<action name=”simpleViewResultAction” class=”com.cc.action.SimpleViewResultAction”>

</action>

 

5、处理结果视图

5.1 struts2内建支持的结果类型

 

chain:Action链式处理的结果类型。

chart:整合JFreeChart的结果类型

dispatcher:用户JSP整合的结果类型

freemarker:

httpheader:

jasper:

jsf:

redirect:用于直接跳转到其他URL的结果类型

redirectAction:用于直接跳转到其他Action的结果类型。

stream:

tiles:

velocity:

xslt:用于与XML/XSLT整合的结果类型。

plainText:用于显示某个页面原始代码的结果类型。

 

5.2 redirect结果类型

redirect结果类型与dispatcher结果类型相对,dispatcher表示将请求转发”Forward“到指定的jsp资源。而redirect表示将请求重定向"redirect”到指定的视图资源。转发与重定向的区别是重定向会丢失所有的请求参数、请求属性,也包括action的处理结果。

 

6、struts2的异常处理

struts2提供了一种声明式异常处理机制。声明式异常处理可以让开发者不需要在action方法中通过try..catch方法捕捉异常,而是在struts.xml中进行定义。

在struts.xml中,声明式异常是通过<exception-mapping>元素来完成的,该元素有两个属性,一个是exception,一个是result。

根据<exception-mapping>元素出现的位置不同,可分为局部异常映射和全局异常映射。

posted on 2012-06-29 16:05  jacksun1978  阅读(739)  评论(0编辑  收藏  举报