MVC模式的发展
在早期的web应用中,JSP负责处理业务逻辑、控制网页流程并创建HTML页面。这样就造成了可维护性差、调试困难HTML和Java程序代码强耦合在一起。为了解决这些问题,SUN公司设计制定了
Model2设计模式。Model2中用JSP技术实现了视图的功能、用Servlet技术实现了控制器的功能、用JavaBean实现了模型的功能。Front Controller+Application Controller+Page Controller+Context前端控制器+应用控制器+页面控制器(也称其为动作)+上下文,也是一种WebMVC模型,只是责任更加明确,而SpringMVC正是这种模式。
Front Controller:前端控制器,负责为表现层提供统一访问点,从而避免Model2中出现的重复的控制逻辑(由前端控制器统一回调相应的功能方法,如前边的根据submitFlag=login转调login方法);并且可以为多个请求提供共用的逻辑(如准备上下文等等),将选择具体视图和具体的功能处理(如login里边封装请求参数到模型,并调用业务逻辑对象)分离。Application Controller:应用控制器,前端控制器分离选择具体视图和具体的功能处理之后,需要有人来管理,应用控制器就是用来选择具体视图技术(视图的管理)和具体的功能处理(页面控制器/命令对象/动作管理),一种策略设计模式的应用,可以很容易的切换视图/页面控制器,相互不产生影响。Page Controller(Command):页面控制器/动作/处理器:功能处理代码,收集参数、封装参数到模型,转调业务对象处理模型,返回逻辑视图名交给前端控制器(和具体的视图技术解耦),由前端控制器委托给应用控制器选择具体的视图来展示,可以是命令设计模式的实现。页面控制器也被称为处理器或动作。Context:上下文,还记得Model2中为视图准备要展示的模型数据吗,我们直接放在request中(Servlet API相关),有了上下文之后,我们就可以将相关数据放置在上下文,从而与协议无关(如Servlet API)的访问/设置模型数据,一般通过ThreadLocal模式实现。
一个SpringMVC入门实例
- 配置
Web.xml文件。DispatcherServlet是前端控制器设计模式的实现,提供了Spring Web MVC的集中访问点。 - 加入
SpringMVC的配置文件。 - 创建请求处理器类(编写控制器)。
- 编写JSP页面(视图)。
- 测试代码。