Spring原理

Spring原理
1.最核心的就是 IOC,动态注入 DI,利用 java里的反射,让一个对象的创建不用 new
了,可以自动的生产。Spring就是在运行时,跟 xmlSpring的配置文件来动态的创
建对象,和调用对象里的方法的 。其实就是利用 java里的反射,反射其实就是在
运行时动态的去创建、调用对象。
Spring还有一个核心就是 AOP这个就是面向切面编程,可以为某一类对象 进行监
督和控制(也就是 在调用这类对象的具体方法的前后去调用你指定的 模块)从而
达到对一个模块扩充的功能。这些都是通过 配置类达到的。
2.Spring目的:就是让对象与对象(模块与模块)之间的关系没有通过代码来关联,
都是通过配置类说明管理的(Spring根据这些配置 内部通过反射去动态的组装对象)
spring是一个容器,凡是在容器里的对象才会有 Spring所提供的这些服务和功能。
Spring里用的最经典的一个设计模式就是:模板方法模式。
SpringAOP与 IOC
一、 IoC(Inversionofcontrol):控制反转
1、IoC:
概念:控制权由对象本身转向容器;由容器根据配置文件去创建实例并创建各个实例之间的
依赖关系
核心:bean工厂;在 Spring中,bean工厂创建的各个实例称作 bean
二、AOP(Aspect-OrientedProgramming):面向方面编程
1、 代理的两种方式:
静态代理:
针对每个具体类分别编写代理类;
针对一个接口编写一个代理类;
动态代理:
针对一个方面编写一个 InvocationHandler,然后借用 JDK反射包中的 Proxy类为各种接口
动态生成相应的代理类
2、动态代理:
不用写代理类,虚拟机根据真实对象实现的接口产生一个类,通过类实例化一个动态代理,
在实例化动态代理时将真实对象及装备注入到动态代理中,向客户端公开的是动态代理,当
客户端调用动态代理方法时,动态代理根据类的反射得到真实对象的 Method,调用装备的
invoke方法,将动态代理、 Method、方法参数传与装备的 invoke方法,invoke方法在唤
起 method方法前或后做一些处理。
1、产生动态代理的类:java.lang.refect.Proxy
2、装备必须实现 InvocationHandler接口实现 invoke方法
3、反射
什么是类的返射?
通过类说明可以得到类的父类、实现的接口、内部类、构造函数、方法、属
性并可以根据构造器实例化一个对象,唤起一个方法,取属性值,改属性值。如
何得到一个类说明:
Classcls=类.class;
Classcls=对象.getClass();
Class.forName("类路径");
如何得到一个方法并唤起它?
Classcls=类.class;
Constructorcons=cls.getConstructor(new Class[]{String.class});
Objectobj=cons.newInstance(new Object[]{"aaa"});
Methodmethod=cls.getMethod("方法名",new Class[]{String.class,In
teger.class});
method.invoke(obj,new Object[]{"aa",new Integer(1)});
4、spring的三种注入方式是什么?
setter
interface
constructor
5、spring的核心接口及核类配置文件是什么?
FactoryBean:工厂 bean主要实现 ioc/di
ApplicationContextac=new FileXmlApplicationContext("applicationCon
text.xml");
Objectobj=ac.getBean("id值");
6、Spring框架的 7个模块Spring原理


1.最核心的就是 IOC,动态注入 DI,利用 java里的反射,让一个对象的创建不用 new
了,可以自动的生产。Spring就是在运行时,跟 xmlSpring的配置文件来动态的创
建对象,和调用对象里的方法的 。其实就是利用 java里的反射,反射其实就是在
运行时动态的去创建、调用对象。
Spring还有一个核心就是 AOP这个就是面向切面编程,可以为某一类对象 进行监
督和控制(也就是 在调用这类对象的具体方法的前后去调用你指定的 模块)从而
达到对一个模块扩充的功能。这些都是通过 配置类达到的。
2.Spring目的:就是让对象与对象(模块与模块)之间的关系没有通过代码来关联,
都是通过配置类说明管理的(Spring根据这些配置 内部通过反射去动态的组装对象)
spring是一个容器,凡是在容器里的对象才会有 Spring所提供的这些服务和功能。
Spring里用的最经典的一个设计模式就是:模板方法模式。
SpringAOP与 IOC
一、 IoC(Inversionofcontrol):控制反转
1、IoC:
概念:控制权由对象本身转向容器;由容器根据配置文件去创建实例并创建各个实例之间的
依赖关系
核心:bean工厂;在 Spring中,bean工厂创建的各个实例称作 bean
二、AOP(Aspect-OrientedProgramming):面向方面编程
1、 代理的两种方式:
静态代理:
针对每个具体类分别编写代理类;
针对一个接口编写一个代理类;
动态代理:
针对一个方面编写一个 InvocationHandler,然后借用 JDK反射包中的 Proxy类为各种接口
动态生成相应的代理类
2、动态代理:
不用写代理类,虚拟机根据真实对象实现的接口产生一个类,通过类实例化一个动态代理,
在实例化动态代理时将真实对象及装备注入到动态代理中,向客户端公开的是动态代理,当
客户端调用动态代理方法时,动态代理根据类的反射得到真实对象的 Method,调用装备的
invoke方法,将动态代理、 Method、方法参数传与装备的 invoke方法,invoke方法在唤
起 method方法前或后做一些处理。
1、产生动态代理的类:java.lang.refect.Proxy
2、装备必须实现 InvocationHandler接口实现 invoke方法
3、反射
什么是类的返射?
通过类说明可以得到类的父类、实现的接口、内部类、构造函数、方法、属
性并可以根据构造器实例化一个对象,唤起一个方法,取属性值,改属性值。如
何得到一个类说明:
Classcls=类.class;
Classcls=对象.getClass();
Class.forName("类路径");
如何得到一个方法并唤起它?
Classcls=类.class;
Constructorcons=cls.getConstructor(new Class[]{String.class});
Objectobj=cons.newInstance(new Object[]{"aaa"});
Methodmethod=cls.getMethod("方法名",new Class[]{String.class,In
teger.class});
method.invoke(obj,new Object[]{"aa",new Integer(1)});
4、spring的三种注入方式是什么?
setter
interface
constructor
5、spring的核心接口及核类配置文件是什么?
FactoryBean:工厂 bean主要实现 ioc/di
ApplicationContextac=new FileXmlApplicationContext("applicationCon
text.xml");
Objectobj=ac.getBean("id值");
6、Spring框架的 7个模块
Spring框架是一个分层架构,由 7个定义良好的模块组成。Spring模块构建在核心容器
之上,核心容器定义了创建、配置和管理 bean的方式,组成 Spring框架的每个模块(或
组件)都可以单独存在,或者与其他一个或多个模块联合实现。每个模块的功能如下:
**核心容器**:核心容器提供 Spring框架的基本功能。核心容器的主要组件是
BeanFactory,它是工厂模式的实现。BeanFactory使用控制反转 (IOC)模
式将应用程序的配置和依赖性规范与实际的应用程序代码分开。
**Spring上下文**:Spring上下文是一个配置文件,向 Spring框架提供上下
文信息。Spring上下文包括企业服务,例如 JNDI、EJB、电子邮件、国际化、
校验和调度功能。
**SpringAOP**:通过配置管理特性,SpringAOP模块直接将面向方面的编
程功能集成到了 Spring框架中。所以,可以很容易地使 Spring框架管理的任
何对象支持 AOP。SpringAOP模块为基于 Spring的应用程序中的对象提供
了事务管理服务。通过使用 SpringAOP,不用依赖 EJB组件,就可以将声明
性事务管理集成到应用程序中。
**SpringDAO**:JDBCDAO 抽象层提供了有意义的异常层次结构,可用该结
构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错
误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。
SpringDAO 的面向 JDBC的异常遵从通用的 DAO 异常层次结构。
**SpringORM**:Spring框架插入了若干个 ORM 框架,从而提供了 ORM
的对象关系工具,其中包括 JDO、Hibernate和 iBatisSQLMap。所有这些都
遵从 Spring的通用事务和 DAO 异常层次结构。
**SpringWeb模块**:Web上下文模块建立在应用程序上下文模块之上,为
基于 Web的应用程序提供了上下文。所以,Spring框架支持与 JakartaStrut
s的集成。Web模块还简化了处理多部分请求以及将请求参数绑定到域对象的
工作。
**SpringMVC框架**:MVC框架是一个全功能的构建 Web应用程序的 MV
C实现。通过策略接口,MVC框架变成为高度可配置的,MVC容纳了大量视
图技术,其中包括 JSP、Velocity、Tiles、iText和 POI。
struts2原理


在 struts2的应用中,从用户请求到服务器返回相应响应给用户端的过程中,包含了许多组
件如:Controller、ActionProxy、ActionMapping、ConfigurationManager、ActionInvocation、
Inerceptor、Action、Result等。
(1) 客户端(Client)向 Action发用一个请求(Request)
(2) Container通过 web.xml映射请求,并获得控制器(Controller)的名字
(3) 容器(Container)调用控制器(StrutsPrepareAndExecuteFilter或 FilterDispatcher)。
在 Struts2.1以前调用 FilterDispatcher,Struts2.1以后调用 StrutsPrepareAndExecuteFilter
(4) 控制器(Controller)通过 ActionMapper获得 Action的信息
(5) 控制器(Controller)调用 ActionProxy
(6) ActionProxy读取 struts.xml文件获取 action和 interceptorstack的信息。
(7) ActionProxy把 request请求传递给 ActionInvocation
(8) ActionInvocation依次调用 action和 interceptor
(9) 根据 action的配置信息,产生 result
(10) Result信息返回给 ActionInvocation
(11) 产生一个 HttpServletResponse响应
(12) 产生的响应行为发送给客服端。
视图:主要由 JSP生成页面完成视图,Struts提供丰富的 JSP标签库:Html,Bean,Logic,
Template等,这有利于分开在 Struts中,承担 MVC中 Controller角色的是一个 Servlet,
叫 ActionServlet。ActionServlet是一个通用的控制组件。这个控制组件提供了处理所有发
送到 Struts的 HTTP请求的入口点。它截取和分发这些请求到相应的动作类(这些动作类
都是 Action类的子类)。另外控制组件也负责用相应的请求参数填充 ActionFrom(通常
称之为 FromBean),并传给动作类(通常称之为 ActionBean)。动作类实现核心商业逻辑,
它可以访问 Javabean或调用 EJB。最后动作类把控制权传给后续的 JSP文件,后者生成
视图。所有这些控制逻辑利用 Struts-config.xml文件来配置。表现逻辑和程序逻辑。
模型:模型以一个或多个 Javabean的形式存在。这些 bean分为三类:ActionForm、Action、
JavaBeanorEJB。ActionForm通常称之为 FormBean,封装了来自于 Client的用户请求
信息,如表单信息。Action通常称之为 ActionBean,获取从 ActionSevlet传来的 FormBean,
取出 FormBean中的相关信息,并做出相关的处理,一般是调用 JavaBean或 EJB等。
流程:在 Struts中,用户的请求一般以.do作为请求服务名,所有的.do请求均被指向
ActionSevlet,ActionSevlet根据 Struts-config.xml中的配置信息,将用户请求封装成一个
指定名称的 FormBean,并将此 FormBean传至指定名称的 ActionBean,由 ActionBean完
成相应的业务操作,如文件操作,数据库操作等。每一个*.do均有对应的 FormBean名称
和 ActionBean名称,这些在 Struts-config.xml中配置。
Struts2和 struts1的比较
struts2相对于 struts1来说简单了很多,并且功能强大了很多,我们可以从几个方面来看:
从体系结构来看:struts2大量使用拦截器来出来请求,从而允许与业务逻辑控制器 与
servlet-api分离,避免了侵入性;而 struts1.x在 action中明显的侵入了 servlet-api.
从线程安全分析:struts2.x是线程安全的,每一个对象产生一个实例,避免了线程安全问
题;而 struts1.x在 action中属于单线程。
性能方面:struts2.x测试可以脱离 web容器,而 struts1.x依赖 servlet-api,测试需要依赖
web容器。
请求参数封装对比:struts2.x使用 ModelDriven模式,这样我们 直接 封装 model对象,
无需要继承任何 struts2的基类,避免了侵入性。
标签的优势:标签库几乎可以完全替代 JSTL的标签库,并且 struts2.x支持强大的 ognl
表达式。
当然,struts2和 struts1相比,在 文件上传,数据校验 等方面也 方便了好多。在这就不
详谈了。
hibernate原理
hibernate简介:
hibernate是一个开源框架,它是对象关联关系映射的框架,它对 JDBC做了轻量级的封装,
而我们 java程序员可以使用面向对象的思想来操纵数据库。
hibernate核心接口
session:负责被持久化对象 CRUD操作
sessionFactory:负责初始化 hibernate,创建 session对象
configuration:负责配置并启动 hibernate,创建 SessionFactory
Transaction:负责事物相关的操作
Query和 Criteria接口:负责执行各种数据库查询
hibernate工作原理:
1.通过 Configurationconfig=newConfiguration().configure();//读取并解析
hibernate.cfg.xml配置文件
2.由 hibernate.cfg.xml中的读取并解析映射信息
3.通过 SessionFactorysf=config.buildSessionFactory();//创建 SessionFactory
4.Sessionsession=sf.openSession();//打开 Sesssion
5.Transactiontx=session.beginTransaction();//创建并启动事务 Transation
6.persistentoperate操作数据,持久化操作
7.tx.commit();//提交事务
8.关闭 Session
9.关闭 SesstionFactory
为什么要用 hibernate:
1.对 JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。
2.Hibernate是一个基于 JDBC的主流持久化框架,是一个优秀的 ORM实现。他很大程度
的简化 DAO层的编码工作
3.hibernate使用 Java反射机制,而不是字节码增强程序来实现透明性。
4.hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关
系数据库,从一对一到多对多的各种复杂关系。
Hibernate是如何延迟加载?get与 load的区别
1.对于 Hibernateget方法,Hibernate会确认一下该 id对应的数据是否存在,首先在
session缓存中查找,然后在二级缓存中查找,还没有就查询数据库,数据 库中没
有就返回 null。
2.Hibernateload方法加载实体对象的时候,根据映射文件上类级别的 lazy属性的配
置(默认为 true),分情况讨论:
(1)若为 true,则首先在 Session缓存中查找,看看该 id对应的对象是否存在,不存在则使用
延迟加载,返回实体的代理类对象(该代理类为实体类的子类,由 CGLIB动态生成)。等到具
体使用该对象(除获取 OID以外)的时候,再查询二级缓存和数据库,若仍没发现符合条件的
记录,则会抛出一个 ObjectNotFoundException。
(2)若为 false,就跟 Hibernateget方法查找顺序一样,只是最终若没发现符合条件的记录,
则会抛出一个 ObjectNotFoundException。
这里 get和 load有两个重要区别:
如果未能发现符合条件的记录,Hibernateget方法返回 null,而 load方法会抛出一个
ObjectNotFoundException。
load方法可返回没有加载实体数据的代 理类实例,而 get方法永远返回有实体数据的对象。
总之对于 get和 load的根本区别,一句话,hibernate对于 load方法认为该数据在数据库
中一定存在,可以放心的使用代理来延迟加载,如果在使用过程中发现了问题,只能抛异常;
而对于 get方 法,hibernate一定要获取到真实的数据,否则返回 null。
Hibernate中怎样实现类之间的关系?(如:一对多、多对多的关系)
类与类之间的关系主要体现在表与表之间的关系进行操作,它们都是对对象进行操作,我们
程序中把所有的表与类都映射在一起,它们通过配置文件中的 many-to-one、one-to-many、
many-to-many、
说下 Hibernate的缓存机制:
Hibernate缓存的作用:
Hibernate是一个持久层框架,经常访问物理数据库,为了降低应用程序对物理数据源访问
的频次,从而提高应用程序的运行性能。缓存内的数据是对物理数据源中的数据的复制,应
用程序在运行时从缓存读写数据,在特定的时刻或事件会同步缓存和物理数据源的数据
Hibernate缓存分类:
Hibernate缓存包括两大类:Hibernate一级缓存和 Hibernate二级缓存
Hibernate一级缓存又称为“Session的缓存”,它是内置的,意思就是说,只要你使用
hibernate就必须使用 session缓存。由于 Session对象的生命周期通常对应一个数据库事
务或者一个应用事务,因此它的缓存是事务范围的缓存。在第一级缓存中,持久化类的每个
实例都具有唯一的 OID。
Hibernate二级缓存又称为“SessionFactory的缓存”,由于 SessionFactory对象的生命周期
和应用程序的整个过程对应,因此 Hibernate二级缓存是进程范围或者集群范围的缓存,有
可能出现并发问题,因此需要采用适当的并发访问策略,该策略为被缓存的数据提供了事务
隔离级别。第二级缓存是可选的,是一个可配置的插件,在默认情况下,SessionFactory
不会启用这个插件。
什么样的数据适合存放到第二级缓存中?
1很少被修改的数据
2不是很重要的数据,允许出现偶尔并发的数据
3不会被并发访问的数据
4常量数据
不适合存放到第二级缓存的数据?
1经常被修改的数据
2.绝对不允许出现并发访问的数据,如财务数据,绝对不允许出现并发
3与其他应用共享的数据。
Hibernate查找对象如何应用缓存?
当 Hibernate根据 ID访问数据对象的时候,首先从 Session一级缓存中查;查不到,如果
配置了二级缓存,那么从二级缓存中查;如果都查不到,再查询数据库,把结果按照 ID放
入到缓存
删除、更新、增加数据的时候,同时更新缓存
Hibernate管理缓存实例
无论何时,我们在管理 Hibernate缓存(Managingthecaches)时,当你给 save()、update()
或 saveOrUpdate()方法传递一个对象时,或使用 load()、 get()、list()、iterate()或 scroll()
方法获得一个对象时,该对象都将被加入到 Session的内部缓存中。
当随后 flush()方法被调用时,对象的状态会和数据库取得同步。 如果你不希望此同步操作
发生,或者你正处理大量对象、需要对有效管理内存时,你可以调用 evict()方法,从一级
缓存中去掉这些对象及其集合。
Hibernate的查询方式
Sql、Criteria,objectcomptosition
Hql:
1、 属性查询
2、 参数查询、命名参数查询
3、 关联查询
4、 分页查询
5、 统计函数
如何优化 Hibernate?
1.使用双向一对多关联,不使用单向一对多
2.灵活使用单向一对多关联
3.不用一对一,用多对一取代
4.配置对象缓存,不使用集合缓存
5.一对多集合使用 Bag,多对多集合使用 Set
6.继承类使用显式多态
7.表字段要少,表关联不要怕多,有二级缓存撑腰
hibernate的开发步骤:
开发步骤
1)搭建好环境
引入 hibernate最小的 jar包
准备 Hibernate.cfg.xml启动配置文件
2)写实体类(pojo)
3)为实体类写映射文件”User.hbm.xml”
在 hibernate.cfg.xml添加映射的实体
4)创建库表
5)写测试类
获得 Configuration
创建 SessionFactory
打开 Session
开启事务
使用 session操作数据
提交事务
关闭资源
MyBatis原理
什么是 Mybatis
MyBatis本是 apache的一个开源项目 iBatis,2010年这个项目由 apaches
oftwarefoundation迁移到了 googlecode,并且改名为 MyBatis。iBATIS一
词来源于“internet”和“abatis”的组合,是一个基于 Java的持久层框架。iBATIS
提供的持久层框架包括 SQLMaps和 DataAccessObjects(DAO)。
MyBatis是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis避免
了几乎所有的 JDBC代码和手工设置参数以及抽取结果集。MyBatis使用简单的 XML或
注解来配置和映射基本体,将接口和 Java的 POJOs(PlainOldJavaObjects,普通的 Java
对象)映射成数据库中的记录。
MyBatis是 iBatis的升级版,用法有很多的相似之处,但是 MyBatis进行了重要
的改进。例如:
1、Mybatis实现了接口绑定,使用更加方便。
在 ibatis2.x中我们需要在 DAO的实现类中指定具体对应哪个 xml映射文件,
而 Mybatis实现了 DAO接口与 xml映射文件的绑定,自动为我们生成接口的
具体实现,使用起来变得更加省事和方便。
2、对象关系映射的改进,效率更高
3、MyBatis采用功能强大的基于 OGNL的表达式来消除其他元素。
原理详解:


MyBatis应用程序根据 XML配置文件创建 SqlSessionFactory,SqlSessionFactory在根据
配置,配置来源于两个地方,一处是配置文件,一处是 Java代码的注解,获取一个 SqlSession。
SqlSession包含了执行 sql所需要的所有方法,可以通过 SqlSession实例直接运行映射的
sql语句,完成对数据的增删改查和事务提交等,用完之后关闭 SqlSession。
MyBatis的优缺点
优点:
1、简单易学
mybatis本身就很小且简单。没有任何第三方依赖,最简单安装只要两个 jar文件+配置几个
sql映射文件易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路
和实现。
2、灵活
mybatis不会对应用程序或者数据库的现有设计强加任何影响。 sql写在 xml里,便于统一
管理和优化。通过 sql基本上可以实现我们不使用数据访问框架可以实现的所有功能,或许
更多。
3、解除 sql与程序代码的耦合
通过提供 DAL层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更
易单元测试。sql和代码的分离,提高了可维护性。
4、提供映射标签,支持对象与数据库的 orm字段关系映射
5、提供对象关系映射标签,支持对象关系组建维护
6、提供 xml标签,支持编写动态 sql。
缺点:
1、编写 SQL语句时工作量很大,尤其是字段多、关联表多时,更是如此。
2、SQL语句依赖于数据库,导致数据库移植性差,不能更换数据库。
3、框架还是比较简陋,功能尚有缺失,虽然简化了数据绑定代码,但是整个底层数据库查
询实际还是要自己写的,工作量也比较大,而且不太容易适应快速数据库修改。
4、二级缓存机制不佳
总结
mybatis的优点同样是 mybatis的缺点,正因为 mybatis使用简单,数据的
可靠性、完整性的瓶颈便更多依赖于程序员对 sql的使用水平上了。sql写在 x
ml里,虽然方便了修改、优化和统一浏览,但可读性很低,调试也非常困难,
也非常受限。
mybatis没有 hibernate那么强大,但是 mybatis最大的优点就是简单小巧易
于上手,方便浏览修改 sql语句。
SpringMVC
SpringMVC框架介绍
1)SpringMVC属于 SpringFrameWork的后续产品,已经融合在 SpringWebFlow里面。
Spring框架提供了构建 Web应用程序的全功能 MVC模块。使用 Spring可插入的 MVC
架构,可以选择是使用内置的 SpringWeb框架还是 Struts这样的 Web框架。通过策略
接口,Spring框架是高度可配置的,而且包含多种视图技术,例如 JavaServerPages(JSP)
技术、Velocity、Tiles、iText和 POI。SpringMVC框架并不知道使用的视图,所以不会
强迫您只使用 JSP技术。
SpringMVC分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们
更容易进行定制。
2)Spring的 MVC框架主要由 DispatcherServlet、处理器映射、处理器(控制器)、视图解析
器、视图组成。
SpringMVC原理图


SpringMVC接口解释
DispatcherServlet接口:
Spring提供的前端控制器,所有的请求都有经过它来统一分发。在 DispatcherServlet将请
求分发给 SpringController之前,需要借助于 Spring提供的 HandlerMapping定位到具体
的 Controller。
HandlerMapping接口:
能够完成客户请求到 Controller映射。
Controller接口:
需要为并发用户处理上述请求,因此实现 Controller接口时,必须保证线程安全并且可重用。
Controller将处理用户请求,这和 StrutsAction扮演的角色是一致的。一旦 Controller处理
完用户请求,则返回 ModelAndView对象给 DispatcherServlet前端控制器,ModelAndView
中包含了模型(Model)和视图(View)。
从宏观角度考虑,DispatcherServlet是整个 Web应用的控制器;从微观考虑,Controller
是单个 Http请求处理过程中的控制器,而 ModelAndView是 Http请求过程中返回的模型
(Model)和视图(View)。
ViewResolver接口:
Spring提供的视图解析器(ViewResolver)在 Web应用中查找 View对象,从而将相应结
果渲染给客户。
SpringMVC运行原理
1.客户端请求提交到 DispatcherServlet
2.由 DispatcherServlet控制器查询一个或多个 HandlerMapping,找到处理请求的
Controller
3.DispatcherServlet将请求提交到 Controller
4.Controller调用业务逻辑处理后,返回 ModelAndView
5.DispatcherServlet查询一个或多个 ViewResoler视图解析器,找到 ModelAndView指定
的视图
6.视图负责将结果显示到客户端
DispatcherServlet是整个 SpringMVC的核心。它负责接收 HTTP请求组织协调 SpringMVC
的各个组成部分。其主要工作有以下三项:
1.截获符合特定格式的 URL请求。
2.初始化 DispatcherServlet上下文对应的 WebApplicationContext,并将其与业务层、持
久化层的 WebApplicationContext建立关联。
3.初始化 SpringMVC的各个组成组件,并装配到 DispatcherServlet中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值