zoukankan      html  css  js  c++  java
  • 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()方法。

  • 相关阅读:
    pipelinewise 学习二 创建一个简单的pipeline
    pipelinewise 学习一 docker方式安装
    Supercharging your ETL with Airflow and Singer
    ubuntu中使用 alien安装rpm包
    PipelineWise illustrates the power of Singer
    pipelinewise 基于singer 指南的的数据pipeline 工具
    关于singer elt 的几篇很不错的文章
    npkill 一个方便的npm 包清理工具
    kuma docker-compose 环境试用
    kuma 学习四 策略
  • 原文地址:https://www.cnblogs.com/AnswerXin/p/3508435.html
Copyright © 2011-2022 走看看