Struts2应用程序的运行过程

Step1. 当服务器启动时,服务器加载
   核心控制器StrutsPrepareAndExecuteFilter,
   该过滤器在初始化阶段依次加载如下配置文件:
         a. struts-default.xml   -  struts2框架提供的默认配置文件,
                基包struts-default位于该文件中。
         b. struts-plugin.xml    - Struts2插件配置文件
         c. struts.xml - 与特定应用相关的配置文件
   Step2.核心控制器默认接受.action请求后,
       分析请求资源路径,
       得到namespace和actionName:
       如:
          requestURI:/dang/user/login.action
          namespace:  /user
          actionName: login
   Step3.核心控制器查找配置文件,找到对应的Action类,
        并创建Action类的实例:
      如:/user  --->  <package namespace="/user">
              login  ---->  <action name="login" class="....">
              String className="com.tarena.dang.user.action.LoginAction";
              Class clz=Class.for(className);
              LoginAction action=(LoginAction)clz.newInstance();
      注意:每次请求Action时,都会创建
            单独的Action类的实例
   Step4.核心控制器将请求分发给对应的拦截器,
     以附加额外的功能。
      其中params拦截器将表单元素的值
      获取后传递给Action实例对应的属性
      (调用对应的setter方法)。
        <form>                                                                 LoginAction 类
        <input name="userName">  ---params---> loginAction.setUserName(request.getParameter("userName"));
        <input name="user.userName">
        params拦截器:
              User user=new User();
               registerAction.setUser(user);
               user.setUserName(
                 request.getParameter("user.userName"));
                
              
    Step5. 请求最终交给了对应的Action实例,
      并调用其默认的执行方法execute,
      返回result的名称
      (即视图资源对应的逻辑名称)
     Step6.处理过程原路返回到核心控制器,
        核心控制器根据execute 方法的返回值
        跳转到对应的页面(默认的方式是请求转发)

猜你喜欢

转载自jacular.iteye.com/blog/1592534