struts控制器概述

来源:互联网 发布:mac可以玩腾讯的游戏 编辑:程序博客网 时间:2024/06/05 07:20

struts控制器组件

struts控制器主要做这些事:
1、接收用户请求。
2、根据用户请求,调用合适的模型组件来执行相应的业务逻辑。
3、获取业务逻辑执行结果
4、根据当前状态以及业务逻辑执行结果,选择合适的视图组件返回给用户。

 

一、org.apache.struts.action.ActionServlet类是Struts框架的核心控制器组件,所有的用户请求都先由ActionServlet来处理,然后在由它把请求转发给其他组件。

 

二、RequestProcessor类:对于多应用模块的Struts应用,每个子应用模块都有各自的RequestProcessor实例.在ActionServlet的process()方法中,一旦选择了正确的子应用模块,就会调用子应用模块RequestProcessor实例的的process()方法来处理请求.在ActionServlet调用这个方法时,会把当前的request和response对象传给它.Struts框架只允许应用中只存在一个ActionServlet实例,但是可以存在多个RequestProcessor类,每个子应用都有单独的RequestProcessor类.

 

三、Action类是用户请求和业务逻辑之间的桥梁.每个Action充当客户的一项业务代理.在RequestProcessor类预处理请求时,在创建了Action的实例后,就调用自身的processActionperform()方法,该方法再调用Action类的execute()方法.Action类的execute()方法再调用模型组件的业务方法,完成用户请求的业务逻辑处理,然后根据执行结果把请求转发给合适的Web组件.

 

四、ActionForward类
Action类的execute()方法返回一ActionForwad对象.ActionForward对象代表了Web资源的逻辑抽象.这里的资源可以是JSP页/Java Servlet或Action.从execute()方法中返回ActionForward对象有两种方法:
一是在execute()方法中,动态创建一个ActionForward实例,
return new ActionForward("Failure","/security/error.jsp","true");以上ActionForward构造方法的第一个参数代表ActionForward实例的逻辑名,第二个参数指定转发路径,第三个参数指定是否进行重定向.(true:重定向;false:请求转发)
二是在Struts配置文件中配置<forward>元素.

  1.     <action name="loginActionForm" 
  2.             parameter="reqCode" 
  3.             path="/login" 
  4.             scope="request" 
  5.             validate="false"
  6.             type="com.eRedLab.eRedCIP.frame.web.LoginAction">
  7.               <forward name="Failure" path="/security/error.jsp" />
  8.     </action>

配置了<forward>元素后,在Struts框架初始化时就会创建存放<forasrd>元素配置信息的ActionForward对象.在Action的execute方法中只需调用Actionmapping实例的findForward()方法,来获得特定的ActionForward实例:return mapping.findForward("Failure");

 

五、Token解决重复提交
绝提的Token处理逻辑由org.apache.struts.util.TokenProcessor类来完成。

 

六、内置的Struts Action类
有一些常用的Action类Struts 已经帮你写好了,如:
org.apache.struts.actions.ForwardAction
org.apache.struts.actions.IncludeAction
org.apache.struts.actions.DispatchAction
org.apache.struts.actions.LookupDispatchAction

 

http://chenyubo.javaeye.com/blog/220761
http://jackyrong.javaeye.com/blog/239028

原创粉丝点击