Struts工作原理、流程

struts配置步骤:
 1:第一步导入struts包.
 2:第二步在WEB-INF/下创建一个struts-config.xml.需要使用dtd。
 3:第三步在web.xml中配置。servlet-class使用apche的actionservlet。在初始化容器的时候,加载struts-config,所以需要配置一个init-param进行初始化struts-config.
        4:第四步:在struts-config中,配置action-mapping和form-beans。

 详细讲解action-mapping和form-beans:
  在action-mapping中,配置action。在action中进行配置如下属性:
   path="/login"  --页面传上来的path
    name="loginForm" --这个是传入form-beans中。用来获取数据和验证数据。
   type="com.lovo.action.loginAction" --用哪个业务类来处理
   validate="true"  --是否验证
   input="error.jsp"  --验证失败所要跳转的页面。
          在form-bean是中配置如下属性:
   <form-bean name="loginForm"  --和action中的name必需一致。
                                   type ="com.lovo.formbean.loginForm"  --javabean
    ></form-bean>
   <forward name="success" type="/success.jsp"> --跳转页面


讲解一下struts的工作原理:
 1:首先是客户端通过一个form表单的action如:login.do,找到服务器的web.xml的url-pattern进行映射到servlet-class,需要注意的是,在这里的servlet-class是apache的actionservlet。通过它找到struts-config进行解析strust-config的配置文件。在struts-config首先找到action-mapping中的action中的path与页面上的action进行对应。根据action的不同,所找到action也不同。找到path过后,就是对应的一个javabean。也就是上面配置的form-beans。通过form-bean的name和type可以对应到该javabean,需要注意:javabean的的属性名称必需与表单种的name一致。这样我们才能通过javabean获取到表单中的数据,也可以有效的验证表单中的数据。接下来就是type属性。既然我们提交了一个请求上来,我们需要对该请求进行业务的处理,所以利用type属性可以决定用哪一个业务类来进行处理该请求的业务。在处理完业务后,可以返回一个所要跳转的页面。那就是formward进行设置name来找到action中的forward进行页面的跳转.

 

 

 

 

Struts的工作流程

  对于采用Struts框架的Web应用,在Web应用启动时就会加载兵初始化ActionServlet,ActionServlet从struts- config.xml文件中读取配置信息,把它们存放到各种配置对象中,例如Action的映射信息存放在ActionMapping对象中。

  当ActionServlet接受到一个客户请求时,将执行如下流程。

流程:

 (1)减缩和用户请求匹配的ActionMapping实例,如果不存在,就返回用户请求路径无效的信息。
 (2)如果ActionForm实例不存在,就创建一个ActionForm对象,把客户提交的表单数据保存到ActionForm对象中。
 (3)根据配置信息决定是否需要表单验证。如果需要验证,就调用ActionForm的validate()方法。
 (4)如果ActionForm的validate()方法返回null或返回一个不包含ActionMessage的ActionErrors对象,就表示表单验证成功。
 (5)ActionServlet根据ActionMapping实例包含的映射信息决定将请求转发给哪个Action。如果相应的Action实例不存在,就先创建这个实例,然后调用Action的execute()方法。
 (6)Action的execute()方法返回一个ActionForward对象,ActinoServlet再把客户请求转发给ActionForward对象只想的JSP组件。
 (7)ActionForward对象指向的JSP组件生成动态网页,返回给客户。

  对于以上流程的流程(4),如果ActionForm的validate()方法返回一个或多个ActionMessage的ActionErrors对象,就表示表单验证失败,此时ActionServlet将直接把请求转发给包含用户提交表单的JSP组件。再这种情况下,不会再创建Action对象并调用Action的execute()方法。

posted @ 2014-01-07 11:23  AnswerXin  阅读(444)  评论(0编辑  收藏  举报