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()方法。

  • 相关阅读:
    网易2019校招C++研发工程师笔试编程题
    牛客网 数串
    ps aux 状态介绍
    阿里在线测评解析
    Ubuntu 18.04安装 Sublime
    file '/grub/i386-pc/normal.mod' not found.解决方案
    解决Windows10与Ubuntu系统时间不一致问题
    进程与线程的区别
    大端模式和小端模式
    2016湖南省赛----G
  • 原文地址:https://www.cnblogs.com/AnswerXin/p/3508435.html
Copyright © 2011-2022 走看看