zoukankan      html  css  js  c++  java
  • Struts2的工作原理及工作流程

     

    众所周知,Struts2是个非常优秀的开源框架,我们能用Struts2框架进行开发,同时能 快速搭建好一个Struts2框架,但我们是否能把Struts2框架的工作原理用语言表达清楚,你表达的原理不需要说出底层是怎么实现的,我估计大多数 的人也听不懂。当面试官问到我们Struts2的工作原理时,我们该怎么回答这个问题呢?回答什么才能让自己说的与众不同,先看看其他朋友总结的

     

    一 工作原理

    在Struts2框架中的处理大概分为以下几个步骤 
    1 客户端初始化一个指向Servlet容器(例如Tomcat)的请求 
    2 这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin) 
    3 接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action 
    4 如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy 
    5 ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类 
    6 ActionProxy创建一个ActionInvocation的实例。 
    7 ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。 
    8 一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可 能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2 框架中继承的标签。在这个过程中需要涉及到ActionMapper 

    二 工作流程

    1、客户端浏览器发出HTTP请求.
    2、根据web.xml配置,该请求被FilterDispatcher接收
    3、根据struts.xml配置,找到需要调用的Action类和方法, 并通过IoC方式,将值注入给Aciton
    4、Action调用业务逻辑组件处理业务逻辑,这一步包含表单验证。
    5、Action执行完毕,根据struts.xml中的配置找到对应的返回结果result,并跳转到相应页面
    6、返回HTTP响应到客户端浏览器
     

    看到网友的对Struts2的原理总结,我自己也总结以便后续的面试,以下是我的疑问

    1、客服端发起一个请求,通过HTTP协议指向Tomcat容器,tomcat拿到请求她干了什么?
    2、我们web.xml配置
    1   <filter>
    2         <filter-name>struts2</filter-name>
    3         <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    4 </filter>
    5  <filter-mapping>
    6         <filter-name>struts2</filter-name>
    7         <url-pattern>/*</url-pattern>
    8 </filter-mapping>

    我们从web配置文件中可以看到org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter,这个Filter这个类有什么用?
    这个 /* 是拦截所有的请求,他拦截了请求做了什么处理? <url-pattern>/*</url-pattern>
    3.我们struts.xml配置
     
    <struts>
     <package name="default" namespace="/" extends="struts-default">
            
            <action name="hello">
                <result>
                    /Hello.jsp
                </result>
            </action>
            
        </package>
     
    </struts>
    谁负责根据struts.xml配置,找到需要调用的Action类和方法呢?
     
     
    4。最后根据struts.xml中的配置找到对应的返回结果result,在返回HTTP响应到客户端浏览器


    结束语 我觉的要说清楚Struts原理,不光死记硬背资料上的写的原理,还要带着这些问题去做总结。

     
  • 相关阅读:
    素数路径Prime Path POJ3126 素数,BFS
    Fliptile POJ3279 DFS
    Find the Multiple POJ1426
    洗牌Shuffle'm Up POJ3087 模拟
    棋盘问题 POJ1321 DFS
    抓住那只牛!Catch That Cow POJ3278 BFS
    Dungeon Master POJ2251 三维BFS
    Splitting into digits CodeForce#1104A
    Ubuntu下手动安装Nvidia显卡驱动
    最大连续子序列和
  • 原文地址:https://www.cnblogs.com/printN/p/6501308.html
Copyright © 2011-2022 走看看