文章目录
- Java web的发展历史
- 一.Model I和Model II
- 1.Model I开发模式
- 2.Model II开发模式
- 二. MVC模式
- SpringMVC 的工作原理和流程
- springmvc 的拦截器
- Spring和SpringMVC的区别
————————————————————————————————
Java web的发展历史
一.Model I和Model II
1.Model I开发模式
Model1的开发模式是:JSP+JavaBean的模式,它的核心是JSP页面,在这个页面中,Jsp页面负责整合页面和JavaBean(业务逻辑),而且渲染页面,它的基本流程如下:
这样的设计模式到这一个jsp页面负责了视图的展示和业务流程的控制高度耦合的结果是Jsp代码十分复杂,后期维护困难!
2.Model II开发模式
在Model II的模式下。利用jsp页面、servlet和JavaBean组件分工协作共同完成系统的所有任务。其中jsp负责数据显示逻辑任务,servlet负责程序的流程控制任务,JavaBean负责处理业务逻辑任务。它的基本流程如下:
Model2:相对于Model1来说,职责分工更为明确,在Model1的基础上,抽取了Servlet层,体现了一个分层的思想,适合大型的项目开发!(当时的评判标准是适合大型项目开发的,现在看起来已经过时了!
二. MVC模式
Spring mvc是基于Spring的一个模块,专门做web开发,可以理解为是Servlet的升级
在Spring MVC框架当中,Controller替代Servlet担负控制器的职能,
M:指model:模型层, 指工程当中的Java Bean,作用是处理数据
Java Bean分两类:
一类是实体类Bean:专门存储业务数据的
一类为业务处理Bean:指Servlet或Dao对象,专门处理业务逻辑和数据
V:View,视图层, 指项目当中的html或jsp等页面,作用是与用户进程交互,展示数据
C:Contoller,控制层, 指工程当中的servlet,作用是接受请求和响应数据
MVC思想不是那个语言所特有的设计模式,也不是web应用所特有的思想,而是一种规范。
MVC思想将一个应用分成三个基本部分:Model(模型)、View(视图)和Controller(控制器), 这三个部分以最少的耦合协同工作,从而提高了应用的可扩展性和可维护性。
SpringMVC 的工作原理和流程
浏览器的请求首先会经过 SpringMVC 里面的核心控制器 DispatcherServlet,它负责对请求进行分发到对应的 Controller。
Controller 里面处理完业务逻辑之后,返回 ModeAndView 对象 。然后 DispatcherServlet 寻找一个或者多个 ViewResolver 视图解析器,找到ModeAndView 指定的视图,并把数据显示到客户端
Spring MVC的入口函数也就是前端控制器 Dispatcherservlet的作用是接收请求,响应结果。
流程说明:
-
客户端(浏览器)发送请求,直接请求到Dispatcherservlet。
-
Dispatcherservlet根据请求信息调用HandlerMapping,解析请求对应的 Handler。
-
解析到对应的Handler(也就是我们平常说的contro11er控制器)后,开始由HandlerAdapter适配器处理。
-
HandlerAdapter会根据Handler来调用真正的处理器开处理请求,并处理相应的业务逻辑。
-
处理器处理完业务后,会返回一个(Mode1Andview对象,Mode1是返回的数据对象,view是个逻辑上的view 。
-
viewResolver会根据逻辑view查找实际的view 。
-
Dispaterservlet把返回的Model传给view(视图渲染)。
-
把view返回给请求者(浏览器)
springmvc 的拦截器
Spring的处理程序映射机制包括处理程序拦截器,当你希望将特定功能应用于某些请求时,例如,检查用户主题时,这些拦截器非常有用。拦截器必须实现org.springframework.web.servlet包的
HandlerInterceptor。此接口定义了三种方法:
- preHandle:在执行实际处理程序之前调用。
- postHandle:在执行完实际程序之后调用。
- afterCompletion:在完成请求后调用。
Spring和SpringMVC的区别
首先 springmvc和spring它俩都是容器,都是管理bean对象的地方,springmvc就是管理controller对象的容器,spring就是管理service和dao的容器。所以我们在springmvc的配置文件里配置的扫描路径就是controller的路径,而spring的配置文件里自然配的就是service和dao的路径。
其次, spring容器和springmvc容器的关系是父子容器的关系。spring容器是父容器,springmvc是子容器。在子容器里可以访问父容器里的对象,但是在父容器里不可以访问子容器的对象,说的通俗点就是,在controller里可以访问service对象,但是在service里不可以访问controller对象。Spring为简化我们的开发工作,封装了一系列的开箱即用的组件功能模块,包括:
Spring JDBC 、Spring MVC 、Spring Security
所以这么看的话,所有的bean,都是被spring或者springmvc容器管理的,他们可以直接注入。然后springMVC的拦截器也是springmvc容器管理的,所以在springmvc的拦截器里,可以直接注入bean对象。