zoukankan      html  css  js  c++  java
  • struts2工作原理

     一、配置说明

    Struts2是在我们web.xml中进行配置一个过滤器,当web项目启动时,过滤器就会生效。

      下面是web.xml中的配置,所有请求都会经过struts2过滤器,而struts2会过滤出自己相关的请求,比如说.action后缀的一个请

    求struts2会进行过滤和处理,如果是.jsp、.htmlstruts2就不会进行处理了,直接放行

    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>

    二、工作原理图:

    三、工作原理详解

    1、 首先我们用户通过HttpServletRequest请求发送过来,经过一系列核心过滤器(如上图的ActionContextCleanUp、Other filters都

    是可选的过滤器,主要用于和一些框架的集成)往下执行,然后到达FilterDispatcher;

    2、 FilterDispatcher(2.0---2.1.2)是struts2最核心的一个过滤器,该过滤器是struts2 2.0---2.1.2版本的一个核心过滤器,然后再2.1.2

    版本以后都是使用的StrutsPrepareAndExecuteFilter这个过滤器。

    为什么FilterDispatcher会被StrutsPrepareAndExecuteFilter所取代呢?

           比如我们想写一个自己的过滤器,我们往往会再struts2过滤器的顶端来写,但是我们想在struts2拦截之后,即执行action之前再来

    定义我们自己的过滤器,通过FilterDispatcher是做不到的,在我们新版的struts2中使用StrutsPrepareAndExecuteFilter就可以实现了。

    3、 用户经过一系列的请求之后会到的我们的ActionMapper,这里强调一下只有是.action后缀的请求才会到达ActionMapper,ActionM

    -apper进行查找当前的.action请求有没有一个对应action处理,如果有会返回到StrutsPrepareAndExecuteFilter。

    4、 StrutsPrepareAndExecuteFilter将请求转发到ActionProxy,ActionProxy通过ConfigurationManager来读取项目中配置的struts.xml

    配置文件,来找到具体的action类。

    5、 然后通过ActionProxy代理来创建ActionInvocation(action的反向实例),经过一系列拦截器执行到我们的Action返回Result。

    6、 Result是一个字符串对象,它对应着我们的一个视图,返回视图然后再经过一系列拦截器,然后通过HttpServletResponse返回一

    个实例进行显示。

  • 相关阅读:
    《数据结构与算法之8 求和函数》
    <C Primer Plus>12 switch and break continue
    <C Primer Plus>11 A Word-Count Program
    《数据结构与算法之7 顺序查找》
    <C Primer Plus>10 The Sequence points && and ||
    <C Primer Plus>9 Introducing getchar() and putchar()
    小米校园招聘 2017 编程题:号码分身
    华为笔试题 合唱队
    识别有效的IP地址和掩码并进行分类统计
    小米Git
  • 原文地址:https://www.cnblogs.com/wangchengb/p/9022576.html
Copyright © 2011-2022 走看看