Struts2的深入理解与使用(一)

来源:互联网 发布:date php 格式化 编辑:程序博客网 时间:2024/06/07 20:32
唯有死磕自己,才有成长!
要深入理解一门开发技术,我觉得要从哲学的角度去体会它是什么?为什么?怎么用?

1.Strtus2是什么?

    Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大。Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts 2可以理解为WebWork的更新产品。虽然从Struts 1到Struts 2有着太大的变化,但是相对于WebWork,Struts 2的变化很小。

2.为什么(Struts的原理)?

      一个请求在Struts2框架中的处理大概分为以下几个步骤(可查看源码:https://github.com/apache/struts):
    1 客户端初始化一个指向Servlet容器(例如Tomcat)的请求
    2 这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,     例如:SiteMesh Plugin)
    3 接着FilterDispatcher(现已过时)被调用,FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action
    4 如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy
    5 ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类
    6 ActionProxy创建一个ActionInvocation的实例。
    7 ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。
    8 一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可 能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2 框架中继承的标签。在这个过程中需要涉及到ActionMapper

3.怎么用(配置Struts2de 步骤)

> 1)配置web.xml  2)配置struts.xml文件       <package name="default" namespace="/" extends="struts-default"> <action name="hello" class="action.HelloAction" ><result name="input">hello.jsp</result>   (返回字符串为input,就跳转到hello.jsp页面)<result name="success">hello.jsp</result></action><action name="houseAction" class="action.HouseAction"><result name="success">page/list.htm</result></action>      </package></span>
             注意:配置文件里的“action name”  要与form表单里的“action name”保持一致,并且提交方式一定要设置为post,method="post"

      3)创建Action类(相当于一个Servlet)   ,一共有三种方式

         1.实现Action接口,重写execute()方法

           2.继承ActionSupport类,重写execute()方法(推荐使用

           3.写一个普通的,不带参数的execute()方法,例如

     4)Action 接受参数的方法
       
   1> 在 Action 中定义属性:

                                   private String name;

                                   并添加 setter/getter 方法 在页面中使用 <input type="" name="name" />
          2> javaBean 方式定义 JavaBean :

                      1)创建User实体类User: name, password

                      2)在 Action 中定义属性:private User user;并添加 setter/getter 方法,

                      3)在页面中使用:<input type="' name="user.name" />
 
    5)在只写一个Action,内部有N个方法的前提下,如何调用Action方法呢?

                   1> 在配置中指定方法名:<action name="userAction" class="action.UserAction" method="login">(推荐使用
 
                    2> 动态方法调用:
                                配置:<action name="userAction" class="action.UserAction">
                                调用时,地址:userAction!add

                    3> 通配符方式
                                配置:<action name="*_Action_*" class="action.{1}Action" method="{2}">
                                调用时:地址:House_Action_add 将会由 HouseAction 中的 add() 处理。

                                ***2,3的缺点,配置不清晰,另外,result 需要单独配置


1 0
原创粉丝点击