一、Struts2的工作原

上图来源于Struts2官方站点,是Struts 2 的整体结构。

一个请求在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

在上述过程中所有的对象(Action,Results,Interceptors,等)都是通过ObjectFactory来创建的。

二、

Core(The IoC container)和AOP 只是Spring 框架中的一部分。

Spring 对JDBC 的整合,属于DAO。

如上所示,Spring 的功能共6 大模块。(请查看Spring帮助手册)

1) Core 封装包是Spring 框架的最基础部分,提供Ioc 和(DI)依赖注入。

2) DAO 提供了JDBC 的抽象层。还有注解声明类型的事务管理方法。

3) ORM 该封装包提供了常用的“对象/关系”APIs。我们频繁使用的是Hibernate,除此之外还可以整合JPA、JDO、iBatis 等。

4) AOP 提供了符合AOP 规范的面向切面的编程实现

5) Web 该封装包提供了基础的针对web 开发的集成特性。此外Spring 也提供了一种MVC 实现。spring-mvc\struts\jsp\jsf

6) J2EE 一般使用较少。提供了EJB、JMS、Email 等集成。Spring 可以将发送邮件等功能整合。

三、

Servlet过滤器和生命周期

servlet的生命周期 ***

所谓生命周期,指的是servlet容器如何创建servlet实例、分配其资源、调用其方法、并销毁其实例的整个过程。

阶段一: 实例化(就是创建servlet对象,调用构造器) 在如下两种情况下会迚行对象实例化。

第一种情况:当请求到达容器时,容器查找该servlet对象是否存在,如果丌存在,才会创建实例。

第二种情况: 容器在启 劢时,戒者新部署了某个应用时,会检查web.xml当中,servlet是否有 load-on-starup配置。如果有,则会创建该servlet实例。

load-on-starup参数值越小,优先级越高(最小值为0,优先级最高)。

阶段二: 初始化 为servlet分配资源,调用init(ServletConfig config);方法 config对象可以用来访问servlet的初始化参数。 初始化参数是使用init-param配置的参数。 init可以override。

阶段三: 就绪/调用 有请求到达容器,容器调用servlet对象的service()方法。 HttpServlet的service()方法,会依据请求方式来调用doGet()戒者doPost()方法。 但是,这两个do方法默认情况下,会抛出异常,需要子类去override。

阶段四: 销毁 容器依据自身的算法,将丌再需要的servlet对象删除掉。 在删除乊前,会调用servlet对象的destroy()方法。 destroy()方法用于释放资源。 在servlet的整个生命周期当中,init,destroy只会执行一次,而service方法会执行多次。

过滤器原理

1)  浏览器发送请求给服务器  2)  服务器的Servlet引擎创建Request对象&&Response 对象  3)  Servlet引擎先调用过滤器的doFilter 方法,该方法有两个参数request和 response,    (在过滤器中可以访问到Request对象&&Response 对象)  4)  过滤器对拦截的内容迚行处理  5)  之后调用SomeServlet的 service 方法  6)  service 方法执行  7)  service 方法执行结束后,将结果返回到过滤器  8)  过滤器将service 方法返回的结果再次迚行过滤  9)  最后,Servlet引擎将结果返回给浏览器

java 原理图_Java中比较重要的原理图(三大框架、、、、)相关推荐

  1. java 事务_Java中事务总结详解(精华)

    1.什么是JAVA事务? 通常的观念认为,事务仅与数据库相关. 事务必须服从ISO/IEC所制定的ACID原则.ACID是原子性(atomicity).一致性(consistency).隔离性 (is ...

  2. [转载] c++多态与java多态性_Java中的多态性

    参考链接: Java中的加法和串联 c++多态与java多态性 Polymorphism is one of the core concepts of OOPS paradigm. The meani ...

  3. java 且_JAVA中逻辑运算符“|”和“”与“||”和“”的用法

    1.使用规则: (1)& 可以用作逻辑与的运算符,表示逻辑与(and) a.当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false ...

  4. java 包装类_Java中的包装类

    Java中哪些需要包装类 它们将原始数据类型转换为对象.如果我们希望修改传递给方法的参数,则需要对象(因为基元类型是按值传递的). java.util包中的类只处理对象,因此在这种情况下包装类也有帮助 ...

  5. java 难度_java中难度大一点的面试题

    1.请大概描述一下Vector和ArrayList的区别,Hashtable和HashMap的区别.(5) (1)Vector和ArrayList的异同 实现原理,功能相同,可以互用 主要区别: Ve ...

  6. math java 计算_Java中的数学计算函数汇总

    Math类:  java.lang.Math类中包含基本的数字操作,如指数.对数.平方根和三角函数. java.math是一个包,提供用于执行任意精度整数(BigInteger)算法和任意精度小数(B ...

  7. java中的多态性_[转载] c++多态与java多态性_Java中的多态性

    参考链接: Java中的加法和串联 c++多态与java多态性 Polymorphism is one of the core concepts of OOPS paradigm. The meani ...

  8. c++多态与java多态性_Java中的多态性

    c++多态与java多态性 Polymorphism is one of the core concepts of OOPS paradigm. The meaning of polymorphism ...

  9. java引_JAVA中的引用

    JDK1.2之后,Java扩充了引用的概念,将引用分为强引用.软引用.弱引用和虚引用四种. 强引用 类似于"Object a = new Object()"这类的引用,只要垃圾强引 ...

最新文章

  1. #include 和 #include 的区别
  2. 望手指半月痕可知内脏疾病
  3. 删除-ARMV8-V9-ATF-FFA学习笔记目录-2021-08
  4. Windows内核实验002 中断现场
  5. ubuntu下面使用clion
  6. spring - -
  7. when is Lessifier triggered to be loaded
  8. 深入分析glibc内存释放时的死锁bug
  9. 安卓开发 底部导航图标切换时动画效果_体验安卓 10:好用百倍都不止!
  10. 攻与防--论游戏好玩的本质
  11. 带你认识六种设计原则(开闭原则、里氏代换原则、依赖倒转原则....)
  12. 屏幕录制视频时有杂音怎么办?
  13. TCP/IP模型第二层--数据链路层
  14. 2023重庆邮电大学计算机考研信息汇总
  15. 基于Java的聊天即时通讯软件的设计与实现
  16. 计算机产业、互联网造富的时代
  17. mysql java 解决幻读_MySQL 是如何解决幻读的
  18. vue打包部署,解决更新版本清理缓存问题
  19. [OpenGL] 捏脸系统
  20. 在html中做产品介绍页面,电商网站的产品介绍怎么写,有哪些方法?

热门文章

  1. GIAC 2020 全球互联网架构大会演讲实录:基于TarsGo的微服务技术架构实践
  2. PKG_CONFIG_PATH错误提示解决办法
  3. st(state-threads) coroutine和stack分析
  4. EasyRTMP实现的rtmp推流的基本协议流程
  5. MySQL Group Replication 部署 (Single Master)
  6. 自定义语言的实现——解释器模式
  7. maven项目创建过慢解决
  8. 数据结构:用栈实现中缀表达式的求值(文字描述+详细步骤示例)
  9. Leet Code OJ 268. Missing Number [Difficulty: Medium]
  10. java最小子串覆盖_Java 算法-最小子串覆盖