struts 的请求响应流程

 

Jpetstore把所有同一类的动过都对应到了一个相应Action,然后动态的调用FormBean的不同方法来处理不同的动作。也就是通过对struts-config.xml的配置信息的读取来决定调用的方法。 

例如:

"/shop/searchProducts"和"/shop/switchSearchListPage" 请求都对应到了同一个formbeancatalogBean)。

<action path="/shop/searchProducts"  访问路径type="org.apache.struts.beanaction.BeanAction" Action完整类名

            name="catalogBean"  对应的formbean

scope="session"  生命周期为整个session

            validate="false"> 不需要验证

      <forward name="success" path="/catalog/SearchProducts.jsp"/>返回结果后的跳转路径

    </action>

    <action path="/shop/switchSearchListPage" type="org.apache.struts.beanaction.BeanAction"

            name="catalogBean" scope="session" parameter="switchProductListPage"

            validate="false">

      <forward name="success" path="/catalog/SearchProducts.jsp"/>

    </action>

从上面的代码中,可以知道,BeanAction把控制交给了orderBean这个formBean对象的searchProducts方法,方法名取"path"参数的以"/"分隔的最后一部分。
其实,struts-config.xml3中映射方式:1Path中最后一个/后的方法名2parameter=”*’直接跳转;3Parameter中含具体的方法名;

比如一下例子:

<action path="/shop/viewOrder" type="com.ibatis.struts.BeanAction"
    name="orderBean" scope="session"
    validate="false">
    <forward name="success" path="/order/ViewOrder.jsp"/>
  </action>

<action path="/shop/viewOrder" type="com.ibatis.struts.BeanAction"
    name="orderBean" parameter="viewOrder" scope="session"
    validate="false">
    <forward name="success" path="/order/ViewOrder.jsp"/>
  </action>

<action path="/shop/viewOrder" type="com.ibatis.struts.BeanAction"
    name="orderBean" parameter="*" scope="session"
    validate="false">
    <forward name="success" path="/order/ViewOrder.jsp"/>
  </action>

 <servlet-name>action</servlet-name>

<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>

...

  <servlet-mapping>

    <servlet-name>action</servlet-name>

    <url-pattern>*.shtml</url-pattern>

  </servlet-mapping>

定义了一个servlet来捕获所有*.shtml请求,并交付给相应的formbean进行处理。

关于formbean的一些理解:

accountBean.java中我们可以看出,formBean中携带了关于account的所有数据,包括每个数据的get()set()方法,除此之外,它还有很多关于account的操作,比如增删改等等。可以看得出,formBean几乎囊括了全部的account涉及到的功能和数据,并且这一个实例化的对象在各层次之间进行参数和功能的传递,因此它完成javaBean的使命,“Write once, run anywhere, reuse everywhere”,即“一次性编写,任何地方执行,任何地方重用”。 

你可能感兴趣的:(struts 的请求响应流程)