为解决一个开放性问题而设计的具备必定约束性的支撑结构,再次结构上能够根据具体问题扩展,安插更多的组成部分,从而更迅速和方便地构建完整解决问题的方案。前端
用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑汇集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不须要从新编写业务逻辑。web
最简单的:JSp(View)+Servlet(Controller)+JavaBean(model)编程
工做流程:浏览器
(1)控制器收到来自用户的请求app
(2)控制器调用Javabean完成业务框架
(3)完成业务后经过控制器跳转Jsp页面的方式给用户反馈信息模块化
(4)Jsp给用户作出响应学习
是为了解决传统MVC模式问题而出现的框架。ui
传统MVC模式问题:(1)全部servlet和servlet映射都要配置在web.xml中,若是项目过大,web.xml就太庞大了,而且不能实现模块化管理。编码
(2)servlet主要功能是接收参数,调用逻辑,跳转界面,而像字符编码,文件上传等功能也要写在servlet中,不能让servlet完成他的主要功能,而须要作处理一些 特例。
(3)接收参数麻烦,不能同经过model接收,只能单个接收,接收完成后转换封装model
(4)跳转页面方式单一,且当页面名称发生改变时须要修改servlet源码。
经常使用MVC框架:Structs二、SpringMVC
拦截------>判断------->寻找-------->执行-------->响应
(1)客户端浏览器发送请求
(2)这个请求通过一系列过滤器后到达核心过滤器
(3)核心过滤器经过ActionMapper判断当前的请求是否须要某个Action处理,若是不须要,则走原来的流程,若是须要则把求情交给ActionProxy来处理
(4)ActionProxy经过ConfiguratonManager询问框架的配置文件(structs.xml),找到须要调用的Action类
(5)建立一个ActionInvocation实例,来调用Action的对应方法,获取结果集的name,在调用先后都会执行相关拦截器
(6)经过结果集的name知道对应的结果集来对浏览器进行响应
经过动态配置方式,能够在执行Action的方法先后加入相干逻辑完成任务。
使用场景:(1)用户登陆判断,在执行Action以前判断用户是否登录,若是没有登录则跳转到登录页面
(2)用户权限判断
(3)操做日志
Structs2的功能(参数处理,文件上传,字符编码等)都是经过系统拦截器实现的,也能够自定义拦截器,进行可插拔配置。
(1)用户发送请求,请求被Spring前端控制捕获
(2)解析请求获得URL,调用HandllerMapping得到该Handler配置的相关对象
(3)根据得到的Handler,选择额一个合适的HandlerAdapter,填充Handler入参,执行Handler,完成后向servlet返回一个ModelAndView
(4)Servlet选择合适的ViewResolver
(5)渲染视图,servlet将渲染结果返回给客户端
(1)核心控制器不一样,SpringMVC——servlet,Structs2——Filter
(2)控制器实例:SpringMVC是基于方法的设计,更像servlet,只有一个实例,每次请求执行对应方法便可;Structs2是基于对象
(3)管理方式不一样:如今不少企业采用Spring的管理方式,而SpringMVC是Spring中的一个模块,因此Spring对于SpringMVC的控制器管理更加简单方便
(4)参数传递不一样:Structs2中自身提供多种参数接收,都是经过valueStack进行传递和赋值,而SpringMVC是同故宫方法的参数进行接收。
(5)学习难度:Spring更简单
(6)拦截器的实现机制不一样:Structs2有本身的interceptor机制,而SpringMVC用的是独立的AOP方式。
(7)SpringMVC处理Ajax请求直接返回数据,Structs2是经过插件的方式进行处理。
Spring是J2EE应用程序框架,是轻量级的IOC和AOP的容器框架。
(1)IOC:Inversion of Control(控制权反转)
例如:原来个人service须要调用dao,service就须要建立dao,使用Spring后当SPringle发现service依赖于dao的时候,就给我注入(依赖注入)
(2)AOP:面向切面编程
核心原理:使用动态代理的方式在执行先后或初夏异常后加入相关逻辑
主要用来作:事务处理、权限判断、操做日志。。。
即多个事务存在时怎么处理的策略。
Required(须要)——若是存在一个事务,则支持当前事务,若是没有事务则开启事务
Supports(支持)——若是存在一个事务,则支持当前事务,若是没有则进行非事务的执行
Mandatory(必要/必须)——若是存在一个事务,则支持当前事务,若是没有事务则抛出异常
Required_new——老是开启一个新事务,若是一个事务已经存在,则将这个事务挂起
Not_support——老是非事务的执行,并挂起任何存在的事务
Never——老是非事务的执行,并挂起任何存在的事务,若是存在一个活动事务,则抛出异常
Nested(嵌套)——若是有就嵌套,没有就开启事务。