MVC、Struts、SpringMVC之间的关系

什么是MVC?

MVC: 是一种架构,可以说是一种设计模式,它将视图与逻辑业务分离开来,也就是人们常说的降低代码的耦合度。
M(Model): 指的是模型层,最典型的代表是JavaBean(处理业务逻辑,也就是处理控制层发来的请求)
V(View): 指的是视图层,最典型的代表是Jsp(收集用户的请求→发送给控制层处理→接收控制层返回的渲染后的页面→将信息显示给用户)
C(Controller): 指的是控制层,最典型的代表是Servlet(接收用户发来的请求→调用业务类并得到返回结果→返回给视图层)

MVC执行流程(B/S):

在这里插入图片描述
1、用户发起request请求至控制器(Controller),控制器接收用户的请求,委托给模型(Model)进行处理。
2、模型处理结果返回给控制器
3、控制器将模型数据通过渲染后在视图(View)中展示。
4、控制器将视图response响应给用户,通过视图展示给用户要的数据或处理结果。

什么是Struts?

Struts是对于MVC的一种非常完美的实现,从根本上来说,它其实和SpringMVC一样,都是基于MVC思想的扩展实现。但是,在SpringMVC3之后 ,SpringMVC完超Struts。(注:但是,框架并没有优劣之分,框架本身就是一种权衡,相对而言而已)

Struts2执行流程:

在这里插入图片描述
第一步: 客户端浏览器发送请求。
第二步: 这个请求经过一系列的过滤器(Filter)
第三步: 接着核心控制器(FilterDispatcher)被调用,FilterDispatcher询问ActionMapper来决定这个请求是否需要调用某个Action。
第四步: 如果ActionMapper决定需要调用某个Action,FilterDispatcher就将请求交给AcitonProxy。
第五步: AcitonProxy通过配置管理器(Configuration Manager)询问框架的配置文件,找到需要用到的Action类。
第六步: ActionProxy创建一个ActionInvocation的实例。
第七步: ActionInvocation的实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。
第八步: Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但也不总是,也可能是另外一个Action链)一个需要被表示的JSP或者FreeMarker的模板。

什么是SpringMVC?

SpringMVC是一个基于MVC的Web框架,用于替代servlet(处理|响应请求,获取表单参数,表单校验等)。也是Spring扩展出的一个应用于Web端的框架,并且SpringMVC和Spring无需通过中间整合层进行整合。

SpringMVC执行流程:

在这里插入图片描述第一步(核心控制器捕获请求): 用户发起请求,请求被Spring前端控制器(DispatcherServlet)捕获。
第二步(查找Handler): 前端控制器(DispatcherServlet)请求处理器映射器(HandlerMapping)查找具体的处理器 (Handler),可以根据xml配置、注解进行查找。
第三步(选择HandlerAdapter): 前端控制器(DispatcherServlet)根据获得的处理器 (Handler)选择一个合适的适配器(HandlerAdapter)
第四步执行(执行Handler): 提取Request中的模型数据,填充处理器(Handler),开始执行处理器(Handler)。
第五步(返回ModelAndView对象): 处理器(Handler)执行完后,向前端控制器(DispatcherServlet)返回一个ModelAndView对象。
第六步(选择ViewResolver): 前端控制器(DispatcherServlet)根据返回的ModelAndView对象选择一个合适的视图解析器(ViewResolver)
第七步(渲染返回): 通过视图解析器(ViewResolver)结合Model和View,来渲染视图,前端控制器(DispatcherServlet)将渲染结果返回客户端。
第八步(页面展示): 页面展示给用户。

组件说明:
1、前端控制器DispatcherServlet(不需要程序员开发)
作用:接收请求,响应结果,相当于转发器,中央处理器。
有了DispatcherServlet减少了其它组件之间的耦合度。

2、处理器映射器HandlerMapping(不需要程序员开发)
作用:根据请求的url查找Handler

3、处理器适配器HandlerAdapter
作用:按照特定规则(HandlerAdapter要求的规则)去执行Handler

4、处理器Handler(需要程序员开发)
注意:编写Handler时按照HandlerAdapter的要求去做,这样适配器才可以去正确执行Handler

5、视图解析器View resolver(不需要程序员开发)
作用:进行视图解析,根据逻辑视图名解析成真正的视图

6、视图View(需要程序员开发jsp)
View是一个接口,实现类支持不同的View类型(jsp、freemarker…)

Struts与SpringMVC的区别:

首先,如果说项目中使用了Spring,那么还是使用SpringMVC吧,因为相对于融合Struts来说,Spring和SpringMVC是非常完美的无缝链接。

其次,SpringMVC的拦截粒度是方法,而Struts的粒度是类

然后,入口不同,SpringMVC的入口是servlet,而Struts是filter

最后,如果使用注解的话,SpringMVC基本上是零配置,而Struts需要配置很多。

备注:想说一点的是:在Struts中可以配置开发者模式,就是说当修改了一个URL访问,可以不用重启工程。但是SpringMVC需要重启。

SpringMVC常用注解:

@Controller:标识这个类是一个控制器

@RequestMapping:给控制器方法绑定一个uri

@ResponseBody:将java对象转成json,并且发送给客户端

@RequestBody:将客户端请求过来的json转成java对象

@RequestParam:当表单参数和方法形参名字不一致时,做一个名字映射

@PathVarible:用于获取uri中的参数,比如user/1中1的值

@SessionAttribute:声明将什么模型数据存入session

@CookieValue:获取cookie值

@ModelAttribute:将方法返回值存入model中

@HeaderValue:获取请求头中的值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值