说起spring mvc,还是自己在面试之前积累的一些知识。根本不知道它真正的是什么。看过一些讲原理的书,看过一些人的博客,但这些都是为了面试而准备,自己说的非常溜,说起来一套一套的也只是暂时的。四个月的实习归来,回想起什么是spring mvc?脑海中记忆最深刻的,竟然是自己在实习期的项目中的运用----通过自己边敲代码,一遍和配置文件作战(出错一般都是配置文件出错),一边总结得到的一些知识。
所以这次自己找来spring mvc的详解视频来学习,也感觉是深有感触。每讲一点,自己脑海中总是不知不觉的把这些知识和自己实习的项目结合,脑海中总是响起:“哦~~~,原来是这么配的啊!原来是因为这个才这么配的啊!!!”恍然大悟的感觉,就发现自己脑子里面的东西越来越多。
下面咱们就从spring mvc的配置文件来说,总结一些属于我自己的知识。
1、什么是springmvc?
Spring就是一个大的框架,它包括,AOP,IOC,spring JDBC,JPA等等一系列的东西。
mvc是一个设计模式,它包括控制器,模型,视图。简单的一个三层的模式。
而SpringMVC是属于spring框架的一个运用了升级了的mvc模式的框架。它和spring的整合无须任何中间配置,因为它就是属于spring框架的。(星期六听讲课,发现还有好多人认为mvc模式的m就是指的model,其实这种想法是不对的,mvc里面的Model其实指的是模型(数据处理模型),在这里模型包括service,也包括dao,还包括咱们写struts的时候经常见的action等,它是一个泛指。所以大家的理解不要太狭窄。)
2、springmvc整体介绍
既然springmvc是mvc模式的一个升级,咱们就从它的变化入手来看springmvc框架。
首先咱们都知道mvc的核心就是这个控制器,它用于接受用户请求,调用模型处理请求,再把处理之后的数据返回给视图。
同样的,这个springmvc也有一个核心控制器,就是前端控制器。所有的请求转发都是在这里发起并返回到这里的。
它的作用如下:
1、接受用户请求,
2、根据用户请求,请求处理器映射器(handlerMapping)找到对应的handler地址返回。
3、得到handler处理“地址”之后,根据“地址”找到可以处理handler的处理器适配器(handlerAdapter)
4、接受执行Handler之后返回的ModelAndView(底层对象)。
5、然后把这个ModelAndView对象送到对应的视图解析器去解析
6、得到解析之后的view,对view进行数据渲染,就是最后的jsp页面。
7、响应结果,返回给用户
然后就是两个比较重要的处理器:
处理器映射器:它是我们配置文件需要配置的地方,配置寻找对应的handler。
处理器适配器:它是调用Handler处理器去执行Handler。
上面所说的Handler处理器其实就是我们平常所说的controller。
最后就是
视图解析器:
它可以把从前端控制器得到的ModelAndView对象解析成物理试图并返回给前端控制器。
3、Springmvc配置文件的配置:
从上面的描述,就可以知道,我们程序员需要配置的一个就是核心:前端控制器。另一个就是处理器映射器,处理器适配器和视图解析器。Handler处理器是需要我们写逻辑代码的。
前端控制器,是配置在web.xml中的,具体如下图:
处理器映射器(写在spring.xml中):
处理器映射器常用的是如图第二种:通过处理器的name值和适配器的key值对应,处理器的id和适配器的prop的值对应,来找到要执行的controller。
处理器适配器:
或者用下面:
这两种适配器的不同之处,不过就是对应controller要实现的是Controller类还是HttpRequestHandler类。大家有兴趣可以研究一下,不过这不是咱们讲的重点。
以上讲的是处理器和映射器的非注解形式的配置。
这种非注解方式的弊端是:一个controller类只能写一种方法,或增或删,或改,不能在一个类里面写多个方法。
解决方法,让我们接着往下看:
我们平时写代码的时候还会看到好多@加在controller上面,而且写了一堆的参数,还定义了js寻找对应的controller的路径。这些的实现,基于的就是咱们下面要讲的基于注解的处理器和适配器的实现。
比如我们要实现一个Handler处理器:controller3,就可以这么写
那么适配器和映射器怎么组合可以如何找到这个controller(handler处理器)呢?答案就是@RequestMapping的注解。
那我们怎么才可以应用@RequestMapping注解呢?就是要配对的在spring.xml中写下下面两句话:
前端控制器,处理器映射器,处理器适配器,我们都知道怎么配置了。那么怎么配置是视图解析器呢?如下:
这个配置还有一个前缀和后缀的配置:
例如下面:controller中:
画红框的,每次都得写这么长的路径,会非常麻烦,所以就把前后缀都配到视图解析器中,如下:
这就是所有springmvc的配置文件的配置,以及配置说明。