1:MVC:
视图(View)-对应组件:JSP或者HTML文件
控制器(Controller)-对应组件:Servlet
模型(Model) -对应组件:JavaBean
2:JSP Model1
(浏览器请求给JSP,JSP传送给JavaBean,JavaBean传送给数据库,
数据库返回数据给JavaBean,JavaBean返回数据给JSP,JSP响应给浏览器)
JSP Model2
JSP:负责生成动态网页
Servlet:负责流程控制
JavaBean:负责业务逻辑处理
(浏览器发送请求到Servlet控制器,Servlet控制器实例化给JavaBean模型和JSP视图
JSP 和JavaBean 之间进行相互转化,JavaBean和数据库进行交互,
JSP最后响应给浏览器)
3:MVC 优点
多视图共享一个模型,大大提高代码的可重用性
MVC三个模块相互独立,松耦合架构
控制器提高了应用程序的灵活性和可配置性
有利于软件工程化管理
MVC 缺点
原理复杂
增加了系统结构和实现的复杂性
视图对模型数据的低效率访问
完美的系统框架=松耦合+高重用性+高扩展性
三层架构,
完美架构雏形(SSM)
spring控制,解耦
tomact优化
4:Spring MVC
结构最清晰的MVC Model2实现
Controller
ModelAndView
400请求失败
5:Spring MVC框架搭建步骤
下载jar文件并导入工程
spring-web-3.2.13.RELEASE.jar
spring-webmvc-3.2.13.RELEASE.jar
配置文件
在web.xml中配置Servlet
创建Spring MVC的配置文件
创建Controller-处理请求的控制器
BeanNameUrlHandlerMapping
创建View-JSP
部署运行
6:注解驱动控制器:
<context:component-scan />
@Controller:标注一个普通的JavaBean成为可以处理请求的控制器
@RequestMapping:通过请求URL进行映射
<mvc:annotation-driven />
一键式配置,通过注解的方式进行Spring MVC开发
DefaultAnnotationHandlerMapping
AnnotationMethodHandlerAdapter
7:Spring MVC的生命周期:
DispatcherServlet::前端控制器
HandlerMapping:处理器映射器
HandlerAdpater:处理器适配
Handler:相当于Controller
ViewResolver:视图解析器
View:视图,jsp
HttpMessageConveter:消息转换器
第一步:发起请求到前端控制器(DispatcherServlet)
第二步:前端控制器请求HandlerMapping(处理器映射器)查找 Handler
可以根据xml配置、注解进行查找
第三步:处理器映射器HandlerMapping向前端控制器返回Handler
第四步:前端控制器调用处理器适配器去执行Handler
第五步:处理器适配器去执行Handler
第六步:Handler执行完成给适配器返回ModelAndView
第七步:处理器适配器向前端控制器返回ModelAndView
ModelAndView是springmvc框架的一个底层对象,包括 Model和view
第八步:前端控制器请求视图解析器去进行视图解析
根据逻辑视图名解析成真正的视图(jsp)
第九步:视图解析器向前端控制器返回View
第十步:前端控制器进行视图渲染
视图渲染将模型数据(在ModelAndView对象中)填充到request域
第十一步:前端控制器向用户响应结果
8:SpringMVC 框架的特点:
清晰地角色划分
灵活的配置功能
提供了大量的控制器接口和实现类
真正做到与View层的实现无关(JSP、Velocity、Xslt等)
国际化支持
面向接口编程
Spring提供了Web应用开发的一整套流程,不仅仅是MVC,他们之间可以很方便的结合一起
9:参数传递:
单例模式
BaseDao:操作数据库的基类
init()方法
每个线程对系统操作都需要一个new一个BaseDao实例
I/O操作消耗系统资源,影响系统性能
对于每个线程,可共享一个实例
单例模式:(构造方法私有化,可以进行对象的设计,提供对象数据)
系统运行期间,有且仅有一个实例
一个类只有一个实例----最基本的(只提供私有构造器)
他必须自行创建这个实例
(定义了静态的该例私有对象)
他必须自行向整个系统提供这个实例
(提供一个静态的公有方法,返回创建或者获取本身的静态私有对象)
安全问题出现在创建对象初期,由于创建类,访问类较多的情况下,
这种并发情况下多采用静态块来解决。
单例模式又分为懒汉模式,饿汉模式,
懒汉模式:时间换空间
在类加载时不能创建实例,采用延迟加载的方法,在运行时调用创建实例
特点 线程不安全,延迟加载(lazy Loading)。类加载速度快,
运行时获取类的速度慢, 消耗资源少。
如何解决线程安全问题?
同步线程(synachornized)加锁,类锁,方法锁,局部锁
消耗资源多
饿汉模式:(静态内部类)空间换时间
在类加载的时候,就完成初始化
特点 线程安全,不具备延迟加载的特性。类加载较慢,获取对象速度快、
消耗资源较多。
Contorller是单例的,其内部的成员变量都是公用的,开发时需要注意资源使用问题
一般情况下,Controller内部成员变量只有service对象