读书笔记-《Spring技术内幕》-计文柯(三):Spring MVC与We

来源:互联网 发布:数据定义语言包括哪些 编辑:程序博客网 时间:2024/06/06 19:52

一、SpringMVC做了什么?

1.使用SpringMVC(以及同类型框架)前:

回顾下,我们刚学完JavaWeb时是如何实现前后台数据交互的。首先,Java文件目录分为Servlet(接受参数、转发请求等)、Service(处理业务逻辑)、Dao(对各model的增删改查)、Model(对应数据库中的表)等层,而Servlet是通过在web.xml中配置从而让计算机知道要跳转的位置,具体的图如下所示。

        图1.1  Servlet层展示



1.2  web.xml中配置展示


如上面两张图所示,这是在使用SpringMVC前的情况,可以看到,随着业务的增多Servlet将会不断增加,web.xml里的内容也会增加,即使编码工整规范,Servlet都需要重写doGet、doPost方法,代码冗余。

2.使用SpringMVC后:


1.3 使用SpringMVC后Controller类展示


图1.3所示,使用SpringMVC后不再需要配置Servlet,所有的Servlet按照所属POJO类(或模块)划分,对一个POJO的增删改查都可放在一起。从开发者的眼光来看,使用SpringMVC大大简化了我们的开发工作,同时以Spring的角度来看,它必然帮我们做了一些工作,比如它是如何让计算机根据请求的URL就找到对应的Servlet的,接下来将具体分析。

二、SpringMVC的设计与实现

1.基本概念


2.1 MVC模式

关于MVC以及JavaWeb等概念这里不做过多讲解,主要想谈的是DispatcherServlet和HandlerMapping。

DispatchServlet作为一个Servlet,需要在web.xml中进行配置。同时它也是一个前端控制器,所有的Web请求都需要通过它进行转发、匹配、数据处理后交给页面进行展示,因此它可看做SpringMVC实现中最核心的部分。默认情况下,DispatchServlet选取BeanNameUrlHandlerMapping作为映射策略实现。


2.2 前端控制器


之前提到,SpringMVC帮开发者完成了许多工作,其中让计算机知道URL请求对应哪一个Controller(在不适用框架时我们称之为Servlet,使用后用Controller代替)的工作,就是HandlerMapping完成的。以SimpleUrlHandlerMapping为例,其定义了一个map来维持Url请求与控制器的映射关系,同时,HandlerMapping接口中定义了getHandler方法,通过这个方法,可以获得请求对应的HandlerExecutionChain,在HandlerExecutionChain中封装了具体的Controller对象。


2.2 DispatcherServlet的大致工作



2.3 HandlerMapping的设计原理


2.实现步骤

A.建立Controller控制器和HTTP请求之间的映射关系

B.得到HandlerExecutionChain,Controller响应动作,生成需要的ModelAndView

C.呈现视图





(转载请申明原地址大笑

原创粉丝点击