zoukankan      html  css  js  c++  java
  • Struts工作原理和Struts内部工作流程

    随着MVC模式的广泛应用,催生了MVC框架的产生。在所有的MVC框架中,出现最早应用最广的就是Struts框架。 

    Struts环境配置:…。

     

    Struts工作原理和Struts内部工作流程:

    MVC Model2:

    采用Struts的Web应用程序:当Web应用程序启动的时候,就会初始化ActionServlet, 

     [ 在初始化ActionServlet的时候就会加载struts-config.xml这个配置文件,加载成功后会把这些URL和控制器的映射关系存放在ActionMapping对象或者其它对象中 ] 

    ActionServlet:是Struts中的中央控制器,专门收集用户请求信息(一般配置为接收*.do的请求),这样所有以.do结尾的用户请求都会被ActionServlet截取处理。

     [ActionServlet中调用doGet或doPost方法,doPost/doGet再调用process,实现struts内部处理]

     [process是ActionServlet的核心流程方法]

    struts-config.xml:是Struts中的核心配置文件,在这个文件中配置了用户请求URL和控制器Action的映射关系

     [ ActionServlet就是通过struts-config.xml配置文件把用户请求发送到对应的控制器中的。] 

     [ 配置:先配ActionForm的<form-bean>,再配Action的<action-mapping>(path路径以/开头)]

    ActionMapping(<action-mapping>):保存Action与ActionForm的映射信息。

     (Map中包含键值对,<action-mapping>内包含了name---<action>---<forward>。)

     [ActionMapping通过process内部处理--->RequestProcessor获取URL--->获取配置文件中action的标签信息] 

    ActionForm:其属性字段对应JSP页面中的表单。当用户提交表单时Struts会把表单的内容保存在对应的ActionForm中。

    Action:控制器处理用户请求,每个ActionMapping对应以Action,每个Action用来处理对应ActionForm的用户请求

    (如:LoginActionForm.java 对应LoginAction.java,如果action不收集数据则action可以不用配置ActionForm)

    ActionForward:转向信息,每个Action的execute ()方法都会返回一个ActionForward对象,ActionForward对象指定转向的JSP页面

     

     

    当ActionServlet接收到用户请求的时候,就会按照下面的流程对用户请求进行处理:

    1.ActionServlet接收到用户的请求以后,会根据请求URL寻找匹配的ActionMapping对象。

     如果不存在匹配的示例,说明用户请求的URL路径信息有误,所以返回“请求路径无效”的信息,

     当匹配到ActionMapping对象的时候,就会进入下一步的操作。

    2.当ActionServlet找到匹配的ActionMapping对象的时候,会根据ActionMapping中的映射信息判断对应的ActionForm对象是否存在,

     如果不存在则创建一个新的ActionForm对象,并且把用户提交的表单内容保存到这个新的ActionForm对象中。

    3.在struts-config.xml这个配置文件中,同样可以配置表单是否需要验证,

     如果表单需要验证,就调用ActionForm中的validate()方法对用户输入的表单信息进行验证。

    4.如果ActionForm的validate()方法返回了ActionErrors对象,说明表单验证没有通过,

     这时ActionServlet会把页面返回到用户输入页面,提示用户重新输入;

     如果validate()方法返回“null”,就说明表单验证已经通过,可以进入下一步处理过程。

    5.ActionServlet可以根据ActionMapping对象中查找把用户请求转发给哪个控制器Action,

     如果对应的Action对象不存在,就创建这个对象,并调用这个Action的execute()方法。

    6.控制器Action的execute ()方法会返回一个ActionForward对象,

     ActionServlet把控制器处理的结果转发到ActionForward对象指定的JSP页面。

    7.ActionForward对象指定的JSP页面根据返回的处理结果生成动态网页,把服务器处理的结果返回给客户。

    这样,一个客户请求的整个过程就处理完毕了。

     

     一个简单的Struts应用示例:

    Struts开发步骤:

    1.创建JSP页面。 

    2.创建ActionForm:

    4.创建Action控制器:

    3.创建模型组件,JavaBean或EJB。

    5.创建资源文件,统一描述页面要显示的内容,国际化处理。

    6.在struts-config.xml文件中描述用户请求与控制器的映射关系。

    7.在JSP页面中展示控制器返回的处理结果。

     

     

    -------------------------------------------------------------------------

    struts-config.xml配置文件:

    一般主要包括以下几个部分:
      (1)data-sources
      (2)form-bean
      (3)global-forwards
      (4)action-mapping
      (5)message-resource

     

    ActionForm:

    ActionForm提供了表单字段保存功能,表单数据缓冲,数据验证的功能: 对应JSP页面中的表单。当用户提交表单时Struts会把表单的内容保存在对应的ActionForm中。

    传统表单处理:

    <input type="text" name="password">

    request.getParamete("password");

    ActionForm表单处理:

    <html:text property="password">-------ActionForm.

    创建ActionForm:

    1.每个ActionForm都要继承org.apache.struts.action.ActionForm这个类,并且为每一个表单提供一个ActionForm.

    2.ActionForm中的每个属性都要与表单中的输入项一一对应.

    3.ActionForm的每个属性都要提供getter和setter方法.Struts就是根据这些方法调用保存表单数据的.

    4.如果表单需要验证,则在ActionForm中要提供validate()方法。

     

    Struts中的控制器Action:

    在开发Action的时候,需要继承org.apache.struts.action.Action类,在子类中加入所需的业务逻辑处理,

    这些子类会返回ActionForward对象,ActionServlet接收这个对象,把页面转发到指定页面,从而把用户请求的结果发送到对应的页面。

    当完成Action代码的编写后还要在struts-config.xml中进行配置。

    org.apache.struts.action.Action:只提供一个execute()方法,一个用户请求URL只能对应一个Servlet。

    org.apache.struts.actions.DispatchAction:可以编写自己需要的方法,在不同方法中处理不同的动作,

    这时候只能通过URL调用控制器,控制器根据用户提交的参数决定调用哪个方法来处理用户的请求,这种情况下不能通过表单提交用户的请求信息。

    org.apache.struts.actions.LookupDispatchAction:增加了Struts资源文件的功能,这样在用户提交表单的时候,LookupDispatchAction可以判断用户单击的是哪个提交按钮,然后通过查询Struts资源文件确定调用哪个方法来处理用户提交的请求信息,在同一个表单中处理不同的动作。

    因为LookupDispatchAction中可以接收用户提交的表单,所以在这里可以把表单的验证工作放在ActionForm中进行处理。而LookupDispatchAction子类中的getKeyMethodMap()方法定义了提交按钮与处理方法的映射关系,LookupDispatchAction会根据这个方法找到提交按钮与处理方法的对应关系。另外,LookupDispatchAction还要在struts-config.xml中进行配置。

     

     Struts中的页面转发控制:

    Struts提供了ActionForward和ActionMapping这两个类来控制页面转发。

     

    Struts标签库:

     html标签:

    bean标签:

    logic标签:

     

    在Struts中使用validator验证框架:

    在使用ActionForm时,可以把验证用户表单输入的工作放在ActionForm的validate()方法中,在Struts中可以整合Validator验证框架进行表单的输入验证。

    框架配置:…。

     

     在Struts中使用Tiles:

    Tiles提供一个类似桌面应用程序版面管理的机制,通过配置文件可以定义版面配置,以及其中需要插入的内容网页。在Tiles中内容网页可以和配置文件相分离,通过Tiles可以随时更换内容网页,因此可以重用版面配置文件。

     框架配置:…。

  • 相关阅读:
    RecycleView实现多布局可展开列表
    ubuntu在anaconda2下安装anaconda3环境 && 在Pycharm中配置Python3
    向量的叉乘
    角动量与角动量守恒
    语言学 —— 中文的构词与规律
    动力系统 —— 液压与气压
    Keras GRU 文字识别
    造物的科学 —— 保温瓶、衣服防盗器
    循环神经网络RNN模型和长短时记忆系统LSTM
    ResNet网络结构
  • 原文地址:https://www.cnblogs.com/shipeng22022/p/4614173.html
Copyright © 2011-2022 走看看