1、Struts2的系统架构:

2、架构中不同Key的作用介绍:

  • servlet Filters:过滤器链,client的全部请求都要经过Filter链的处理。
  • Struts Core:Struts2的核心部分,Struts2中已经做好的功能,在实际开发中不需要动它们
  • Interceptors:Struts2的拦截器。Struts2提供了很多默认的拦截器,可以完成日常开发的绝大部分工作;当然,也可以自定义拦截器,用来实现具体业务需要的功能。
  • User Created:由开发人员创建的,包括struts.xml、Action、Template,是每个使用Struts2来进行开发的人员都必须会的。

3、各个模块功能的介绍:

  • FilterDispatcher是整个Struts2的调度中心,根据ActionMapper的结果来决定是否要Struts2做出处理,如果ActionMapper指出该URL应该被Struts2处理,那么它将会执行Action处理,并停止过滤器链上还没有执行的过滤器。同时还负责创建ActionProxy对象实例。(注意:如论什么Struts2应用都要有这个配置,并且要放在过滤链的最后边。)
  • ActionMapper简单点说,ActionMapper负责识别当前请求是否应该被Struts2处理,如果需要Struts2处理,ActionMapper会通知FilterDispatcher告诉它处理这个请求,ActionMapper还会返回一个对象来描述请求对应的ActionInvocation的信息。
  • ActionProxy是一个特别的中间层,位于Action和xwork之间,便于将来有机会引入更多的实现方式,比如通过WebService来实现等。
  • ConfigurationManager是xwork配置的管理中心,在server服务器启动的时候,ConfigurationManager便会把struts.xml文件中的全部信息读取到内存中,当ActionProxy带着URL向他询问要执行的是哪个Action的时候,能够直接匹配查找并做出回答。
  • struts.xml是Stuts2的应用配置文件,负责诸如URL与Action之间映射的配置、以及执行后页面跳转的Result配置、自定义的拦截器设置等。
  • ActionInvocation:真正负责调用并执行Action,它拥有一个Action实例和这个Action所依赖的拦截器实例。ActionInvocation会执行这些拦截器、Action以及相应的Result。
  • Interceptor X(拦截器):拦截器是一些无状态的类,拦截器可以自动拦截Action,它们给开发者提供了在Action运行之前或Result运行之后来执行一些功能代码的机会。
  • Action:动作类是Struts2中的动作执行单元。用来处理用户请求,并封装业务所需要的数据。
  • Result:Result就是不同视图类型的抽象封装模型,不同的视图类型会对应不同的Result实现,Struts2中支持多种视图类型,比如Jsp,FreeMarker等。
  • Templates:各种视图类型的页面模板,比如JSP就是一种模板页面技术。
  • Tag Subsystem:Struts2的标签库,它抽象了三种不同的视图技术JSP、velocity、freemarker,可以在不同的视图技术中,几乎没有差别的使用这些标签。

4、程序运行流程:

  1. 用户发出一个请求。
  2. Tomcat接收到请求并自动选择处理这个请求的应用程序是哪一个。
  3. web容器读取该应用的web.xml文件,在web.xml文件中通过匹配发现要由Struts2的过滤器处理,依据struts2的过滤器的设置找到FilterDispatcher(struts2的调度中心)
  4. 获得FilterDispatcher实例,然后回调doFiler()方法进行真正的处理
  5. 这时候FilterDispatcher会将请求转发给ActionMapper(ActionMapper主要负责判断当前请求是否要Struts2做出处理)。
  6. 若需要Struts2作出处理,ActionMapper会通知FilterDispatcher告诉它去处理这个请求,FilterDispatcher会停止过滤器链后边的部分,并且还会建立一个ActionProxy的实例。
  7. ActionProxy对象被创建之初并不知道自己将要处理哪个Action,自己只有从FilterDispatcher处拿到的请求的URL,真正知道要处理那个请求的是ConfigurationManager对象,只有它读取了struts.xml文件。
  8. ActionProxy对象知道了自己要执行那个Action、以及哪些相关的拦截器和可能使用到的全部的result信息之后,会创建一个ActionInvocation对象,这个对象真正负责调用并执行Action。
  9. 在执行Action之前,拦截器会自动的拦截Action,其实拦截器的执行被分成两部分,一部分就是在Action执行之前,还有就是在result之后也会自动执行拦截器。所以ActionInvocation对象运行的时候要通过非常复杂的过程,依次执行指定的拦截器。
  10. 默认的情况下是执行execute()方法(也能特别指定某一个方法)。
  11. 依照execute()方法返回的结果(result)去struts.xml中匹配选择下一个页面。
  12. 依据result找到页面之后,在页面上能够通过struts2自带的标签库来访问需要的数据并生成一个页面(这里仅仅是生成一个页面,并没有返回给client)。
  13. ActionInvocation对象倒序执行拦截器。
  14. 运行完ActionInvocation对象,就会得到相应对象最后按照与过滤器配置顺序相反的顺序依次经过过滤器向client展示结果。

学习Struts--Chap02:Struts2框架各个功能模块和程序执行流程的介绍的更多相关文章

  1. Java框架中Struts和Struts2框架的区别

    struts1 与 struts2 的区别:1.都是 MVC 的 WEB 框架,2 struts1的老牌框架,应用很广泛,有很好的群众基础,使用它开发风险很小,成本更低!struts2虽然基于这个框架 ...

  2. 大数据技术之_14_Oozie学习_Oozie 的简介+Oozie 的功能模块介绍+Oozie 的部署+Oozie 的使用案列

    第1章 Oozie 的简介第2章 Oozie 的功能模块介绍2.1 模块2.2 常用节点第3章 Oozie 的部署3.1 部署 Hadoop(CDH版本的)3.1.1 解压缩 CDH 版本的 hado ...

  3. Struts2第二篇【开发步骤、执行流程、struts.xml讲解、defalut-struts讲解】

    前言 我们现在学习的是Struts2,其实Struts1和Struts2在技术上是没有很大的关联的.Struts2其实基于Web Work框架的,只不过它的推广没有Struts1好,因此就拿着Stru ...

  4. [原创]java WEB学习笔记70:Struts2 学习之路-- struts2拦截器源码分析,运行流程

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  5. 从零打造在线网盘系统之Struts2框架核心功能全解析

    欢迎浏览Java工程师SSH教程从零打造在线网盘系统系列教程,本系列教程将会使用SSH(Struts2+Spring+Hibernate)打造一个在线网盘系统,本系列教程是从零开始,所以会详细以及着重 ...

  6. struts2,登录功能模块实现

    功能: ·UserLogin作为控制登录的Action,校验密码成功后记录session,可以选择记住登陆状态,登陆成功后自动跳转到登陆前的URL: ·UserLogout作为控制登录推出的Actio ...

  7. 【Java学习笔记】<集合框架>定义功能去除ArrayList中的重复元素

    import java.util.ArrayList; import java.util.Iterator; import cn.itcast.p1.bean.Person; public class ...

  8. [原创]java WEB学习笔记71:Struts2 学习之路-- struts2常见的内建验证程序及注意点,短路验证,非字段验证,错误消息的重用

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  9. 基于Struts2框架实现登录案例 之 程序国际化

    国际化牵涉的知识非常多,这里只能简单的介绍,程序国际化的一般做法是:在jsp页面时, 不是直接输出信息,而是输出一个key值,该key值在不同语言环境下找到对应资源文件下的 对应信息,因此首先要创建满 ...

随机推荐

  1. 微信jssdk分享功能开发

    先理解下分享: 在app端 ,经常能看见 分享按钮的功能,(分享给朋友,分享到朋友圈,分享到QQ空间等等): https://open.weixin.qq.com/(微信开发平台),这需要到开放平台注 ...

  2. Project 2013 安装找不到office.zh cn的解决办法

    先按照百度的办法,去“C:\Users\<你的电脑名>\AppData\Local\Temp\”下找类似“OWPFD24.tmp”的文件夹,结果发现并没有这个文件夹 , 没办法,自己硬着头 ...

  3. [转] Mongoose初使用总结

    连接mongoose mongoose连接数据库有两种方式 第一种: 'use strict'; const mongoose = require('mongoose'); mongoose.conn ...

  4. What's news in Visual Studio 2017

    文字总结: 1.高级智能提示  在属性列表中输入 M C即可查询属性中包含字母m\c的属性 2.更快的导航查询,在Go To All中输入任意查询的字符,可快速查到任何包含关键字的文件 3.代码智能分 ...

  5. 洛谷---小L和小K的NOIP考后放松赛

    链接: https://www.luogu.org/contestnew/show/11805?tdsourcetag=s_pcqq_aiomsg 题解: 没人过的题我就没看 t2: 考虑每个点是朋友 ...

  6. P3403 跳楼机

    题解: 据说是最短路经典题 考虑mod c一意义下 我们会发现mod c相同的话我们一定会用最少步数到达,剩余的都用c转移 由于转移图有环所以我们用spfa来dp(其实也可以理解成最短路) wa了好多 ...

  7. bzoj 5099: [POI2018]Pionek

    题解: 还是比较简单的一道题 考虑现在有一个向量,当且仅当下一个向量与它夹角<90度这个向量的模长才会增加 接下来怎么做呢 如果我们去枚举初始向量,向量方向会随着新增向量而变化 随着不断顺时针的 ...

  8. java 防止xss攻击

    http://blog.csdn.net/zhengbo0/article/details/40507519 http://blog.csdn.net/ghsau/article/details/17 ...

  9. Redis Pubsub命令用法

    一.什么是pub/sub及实现Pub/Sub功能(means Publish, Subscribe)即发布及订阅功能. Redis通过publish和subscribe命令实现订阅和发布的功能. 订阅 ...

  10. union和union all的区别(面试常考)

    Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序: Union All:对两个结果集进行并集操作,包括重复行,不进行排序: Union因为要进行重复值扫描,所以效率低.如果合 ...