理解MVC及快速入门

理解MVC及快速入门_第1张图片


来源 | 个人博客| 作者 | MrSaber


说明:
传统MVC——>JSPModel2——>Front Controller + Application Controller + Page Controller + Context 三种模式是JavaWeb设计模式的逐渐适配和演进。本文分别讲述了这三种模式,作为了解即可。SpringMVC正是采用了第三种设计模式。

MVC


说明

  MVC是Xerox PARC在20世纪80年代为编程语言SmallTalk发明的一种软件设计模式。
MVC是一种设计模式,它强制性地把应用程序的数据展示、数据处理和流程控制分开
  MVC将应用程序分成3个核心模块:模型、视图、控制器,他们相互联结又分别担当不同的任务,如图示所示。

图示

理解MVC及快速入门_第2张图片

理解

  模型:数据模型,提供要展示的数据,因此包含数据和行为,可以认为是JavaBean,一个模型可以为多个视图提供数据。
  视图:负责模型的展示,一般就是我们见到的用户界面,客户想要看到的东西。
  控制器:控制器负责应用的流程控制,所谓流程控制就是接受用户请求,委托给模型进场处理,后获取模型数据交由视图展示。

JSPModel2

说明
  在早期的Web应用中,JSP负责处理业务逻辑、控制网页流程并创建HTML页面。基本上JSP包揽的所有的模块,这无疑造成了不少的困扰:
  比如:

  1.可维护性差
  2.调试困难
  3.HTML与Java程序代码强耦合在一起
  4.内嵌的流程控制逻辑,要理解应用程序的逻辑必须浏览所有的JSP页面。


  为了解决这些问题,SUN公司先后制定了两种设计模式,分别为Model1和Model2。虽然Model1在一定程序上实现了MVC中的视图和模型,但是他的运用并不理想,知道Model2的出现才改变了这种局面。
Model2中用JSP技术实现了视图的功能、用Servlet技术实现了控制器的功能、用JavaBean技术实现了模型的功能
图示

理解MVC及快速入门_第3张图片



实例

  理解MVC及快速入门_第4张图片

  理解MVC及快速入门_第5张图片

  理解MVC及快速入门_第6张图片


Front Controller + Application Controller + Page Controller + Context

说明
  前端控制器+应用控制器+页面控制器(也有称其为动作)+上下文,也是一种WebMVC模型,只是责任更加明确,SpringMVC正是这种模式
运行流程图

理解MVC及快速入门_第7张图片


职责
  Front Controller:前端控制器,负责为表现层提供统一访问点,从而避免Model2中出现的重复的控制逻辑(由前端控制器统一回调相应的功能方法,如前边的根据submitFlag=login转调login方法);并且可以为多个请求提供共用的逻辑(如准备上下文等等),将选择具体视图和具体的功能处理(如login里边封装请求参数到模型,并调用业务逻辑对象)分离。

  Application Controller:应用控制器,前端控制器分离选择具体视图和具体的功能处理之后,需要有人来管理,应用控制器就是用来选择具体视图技术(视图的管理)和具体的功能处理(页面控制器/命令对象/动作管理),一种策略设计模式的应用,可以很容易的切换视图/页面控制器,相互不产生影响。

  Page Controller(Command):页面控制器/动作/处理器:功能处理代码,收集参数、封装参数到模型,转调业务对象处理模型,返回逻辑视图名交给前端控制器(和具体的视图技术解耦),由前端控制器委托给应用控制器选择具体的视图来展示,可以是命令设计模式的实现。页面控制器也被称为处理器或动作。

  Context:上下文,还记得Model2中为视图准备要展示的模型数据吗,我们直接放在request中(Servlet API相关),有了上下文之后,我们就可以将相关数据放置在上下文,从而与协议无关(如Servlet API)的访问/设置模型数据,一般通过ThreadLocal模式实现。

HelloWorld


0.说明

  现在我们以前了解了MVC编程模型,接下来我们实际地编写一个SpringMVC入门实例,我们现在还不能解所有的技术细节,但是在接下来的博客一定会有相关解释。

1.加入Jar包

理解MVC及快速入门_第8张图片


说明:
projects.spring.io/spri )进入官方网站,页面右侧选择4.0版本进行下载,下载完毕后添加以上Jar包到Java环境变量中。

2.配置Web.xml文件


    
    
        dispatcherServlet
        org.springframework.web.servlet.DispatcherServlet
        
        
            contextConfigLocation
            classpath:dispatcherServlet-servlet.xml
        
        1
    

    
        dispatcherServlet
        /
    


说明:
DispatcherServlet是前端控制器设计模式的实现,提供了Spring Web MVC的集中访问点。
  与其它web MVC框架一样,Spring的web MVC框架是一个请求驱动的web框架,其 设计围绕一个中心的servlet进行, 它能将请求分发给控制器,并提供其它功能帮助web应用开发。然而,Spring的DispatcherServlet 所做的不仅仅是这些,它和Spring的IoC容器完全集成在一起,从而 允许你使用Spring的其它功能
请求处理流程:
理解MVC及快速入门_第9张图片


3.加入SpringMVC的配置文件


    
    
    
    
        
        
    


说明:
  视图解析器用来解析视图。如上视图解析器配置有前缀和后缀两个属性,这样一来,view路径将会缩短。

4.创建请求处理器类(编写控制器)


理解MVC及快速入门_第10张图片


说明:
这里我们使用了注解 @Controller ,可以表明了该类作为一个控制器,而不需要你扩展任何控制器基类或者引用ServletAPI。当然,如果需要还是可以引用特定Servlet功能。注解@Controller的基本目标是担任所注解的类的原型的角色,指明它的职责。
  所注解的控制器Bean可以被显示定义。 @Controller也允许自动侦测。要实现队所注解的控制器的自动侦测,必须要像配置中加入组件扫描的部分的语句。  


 

 

5.编写JSP页面(编写视图)

/WEB-INF/views/success.jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title


    Hello,World!



6.简单说明及测试

  控制器return返回了视图的名称,我们在SpringMVC 中设置了如何解析处理器返回值为视图。

  所以当我们访问/helloworld后我们会被处理器跳转到success.jsp页面。

欢迎大家关注我的公众号:java技术学习之道(javajsxxzd),长期分享各种技术文章。

你可能感兴趣的:(java,java技术学习之道)