Struts核心知识部分小结(1)

一、Struts控制器的组件
  前端控制器 ActionServlet:
        init方法初始化Struts的配置文件(ModuleConfig)。
        接收用户的.do请求交给请求处理器
  请求处理器RequestProcessor:调用process()方法,
 创建ActionFrom,封装好请求参数数据,(执行验证)。
           创建或查找到Action,调用execute()方法。返回ActionForward。
  业务控制器Action:回调方法execute(),在这个方法中去调用业务逻辑类处理用户的请求控制器组件

执行流程
 1. struts应用程序在被web容器加载时,自动初始化ActionServlet
 2. ActionServlet初始化时,调用init()方法,在init方法中它加载struts配置文件并解析成一个ModuleConfig
 3. 用户提交一个
http://.../xxx.do请求,ActionServlet截获。调用相应的doGet或doPost,在这两个方法中都调用了一个process()方法,在process方法中要是调用RequestProcessor类的process()方法。
 4. RequestProcessor类的process()方法
     processPath(req, res)   -->/xxx
     processMapping(/xxx)    --> ModuleConfig找到ActionMapping(代表一个<action>)
     processActionForm()     -->查找或创建对应的ActionForm对象。
     processPopulate()       -->把用户提交的请求数据封装到对应的ActionForm对象。
     processValidate()       -->调用对应ActionForm对象中的validate()方法对表单数据进行验证。 前提<action>标记的validate="true"
     //processForward()        -->如果<action>标记配置了forward属性。那么它就调用这个方法进行请求转发
     processActionCreate()   -->创建或找到相应的Action实例。
     processActionPerform()  -->调用相应Action实例中的execute()回调方法来进行业务操作。
     processForwardConfig()  -->根据Action实例的execute()方法的返回值来做跳转。

二、分析Struts源代码中的控制器部分

三、ActionServlet:
  注意它在web.xml中的配置
  修改了一次struts的配置文件,就要重部署一次项目。

四、Action类: public ActionForward execute(ActionMapping mapping,ActionForm form,.)
  1.参数: ActionMapping对象-->对应配置文件中的<action>标记。
    1) <action>标记的参数:
      path: 配置此Action要处理的路径. 以/开头,不带扩展名
      type: 指定此Action类的全限定名
      name: 指定此Action类对应的ActionForm。 name属性要和<form-bean>标记name值相同
      scope: 指定和此Action类对应的ActionForm的存储范围。默认session
      //attribute: 指定存放ActionForm的名。request.setAttribute(attribute, actionForm);
      //unknown: 为true时,表示这个Action用来处理无效的URL.默认为false
      //forward: 指定要转发到的路径。这个action专门用来做请求转发。不能和type一起使用
      validate: true表示要验证表单(调用ActionForm中的validate()方法),false不验证.默认true
      input: 验证失败时的转发路径。
      parameter: 指定Action的配置参数。一般用来跟DispatchAction配合使用。
   2)ActionMapping的常用方法:
       public ActionForward mapping.findForward("逻辑名");
       public ActionForward mapping.getInputForward();
     
  2. 返回值:ActionForward对象 -->代表一个转发路径.  对应<forward>标记
    1) <forward>的常用属性:
         name: 指定转发路径的逻辑名
         path: 指定路径的URL。以/开头
         redirect: 为true,表示采用重定向。为false,表示采用请求分派。默认false
    2)在Action的execute()方法中用actionMapping.findForward("逻辑名");来获取
    3)也可以使用它的构造方法来创建
               Forward(String path);
               Forward(String name, String path, boolean redirect);
    4)如果要在转发路径上添加动态参数,怎么办?
        a. ActionForward forward = actionMapping.findForward("逻辑名");
           forward.setPath(forward.getPath() +"?参数名=" + 参数值);
           return forward;
        b. ActionForward forward = new ActionForward("xxx.jsp?参数名" + 参数值);
           return forward;
          
五. DispatchAction类的使用:对于同一组类似的业务操作,使用DispatchAction可以减少Action的数量:  如针对同一个实体的CRUD
   1. <action>标记一定要加上parameter="xxx"
   2. 用户的请求参数中一定要带上<action>标记parameter属性指定的参数:
          如xx.do?xx=xx
   3. 你写的Action类要继承自DispatchAction,且要有名字跟<action>标记parameter属性指定的参数值相同的方法。其它跟execute()一样。

六.ForwardAction:只是简单做请求转发。用得少.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值