1)Strust2是以WebWork为核心,采用拦截器的机制对用户请求进行处理。
2)Struts2框架结构:
3)简单来看整个Struts2的处理过程可以简单的理解为
即
3)Strust2的控制器组件是Struts2整个框架的核心,由两部分组成:
4)核心控制器SturtsPrepareAndExecuteFilter实际上是一个Servlet过滤器,需再Web.xml中配置。 5)Action是由用户定义的业务控制器,由三种实现方式:
6)Struts2使Action不再与任何Servlet API耦合,该框架可以通过ActionContext类来访问Servlet API。
ActionContext提供了读写Servlet API中
中的数据的方法
同时Struts框架还提供了能直接访问Servlet API的接口:
7)Struts 2配置文件使用package来组织Action,Struts2配置文件中的包就是由多个Action,多个拦截器,过个拦截器的引用组成的集合。
package含有name、extends、namespace、abstract三个属性
注意:struts.xml是从上往下解析的,所以父包应该再子包的前面定义,如果再同一个包中配置了两个name相同的Action,则后一个会覆盖前一个。
若没有指定命名空间(namespace="/"),则默认为默认的命名空间。
配置命名空间后,Strust2会按如下的顺序搜索Action:
指定的命名空间----->默认的命名空间-------->报错
8)Struts方法的动态调度:
使用动态方法调用的前提:
struts.xml中配置<constant name="struts.enbale.DynamicMethodInvocation" value="true"/>
actionName!methodName.action
例如:
<a href="product!edit.action?productID=1001"></a>
表示调用productAction下的edit方法来处理请求,并传递一个参数,参数名为productID,值为1001
9)通配符的使用
假若声明如下action:
<package name="product" extends="struts-default" namespace="/">
<action name="*product" class="action.ProductAction" method="{1}">
<result>/{1}.jsp</result>
</action>
</package>
若用户的请求URL为delproduct.action,则匹配模式中的第1个*为del,因此调用的方法为该action下的del方法,返回的页面为del.jsp。
10)根据result元素再struts.xml文件中的位置不同,可以将result分为
如果一个Action包含了与全局result同名的局部result,则局部会覆盖全局。
搜索顺序:指定Action局部——————>全局
11)result中含有两个属性:name、type。name默认为success、type默认为dispacher。
type常用的类型:
配置redirectAction类型需要actionName、namespace两个参数
12)Struts依靠配置<exception-mapping>元素捕获异常:需指定两个属性:exception和result。
例如:
<action name="login" class="action.loginAction"> <exception-mapping result="error" exception="java.lang.Exception"/>
<result>/ok.jsp</result> <result name="error">/error.jsp</result>
</action>
则需要在login Action中throw 相关的Exception,则会跳转到error.jsp页面。
异常映射也分全局和局部,分别是
局部:<exception-mapping>元素作为<action>元素的子元素。
全局:<exception-mapping>元素作为<global-exception-mapping>元素的子元素。
同样,前者会覆盖同名的后者。