原文地址:http://blog.longjiazuo.com/archives/1389
这是对springMvc4.x相关特性的一个总结和整理,会有一系列文章,欢迎大家阅读,交流,讨论。
一. 点睛
Spring MVC提供了一个DispatcherServlet来开发Web应用。在Servlet2.5以及以下的时候只要在web.xml下配置元素即可。但下面我们采用Servlet3.0+无web.xml的配置方式,在Spring MVC里面实现WebApplicationInitializer接口便可实现等同于web.xml的配置。
下面将基于Maven搭建零配置的Spring MVC原型项目。
二. 示例
1. 快速构建Maven项目
说明:系列文章的内容有依赖关系,后面章节的内容依赖前面章节内容的配置。为了方便后面内容的讲解,所以构建的是多模块maven项目,公用的依赖配置在父工程的pom.xml文件里面,如果在当前工程的pom文件里面找不到的依赖可以查看父工程的配置,后面的章节也是如此,不再说明。
pom.xml的内容如下:
2. 日志配置
在src/main/resources目录下,新建logback.xml用来配置日志,内容如下:
代码解释:
① 将org.springframework.web包下的类的日志级别设置为DEBUG,我们开发Spring MVC经常出现和参数类型相关的4XX错误。设置此项我们将会看到更详细的错误信息。
3. 演示页面
在src/main/resources下建立views目录,再建其子目录quickStart,并在此目录下新建index.jsp,内容如下:
代码解释:
也许你会问,为什么页面不放在Maven标准的src/main/webapp/WEB-INF下,此处这样建的目的主要是让你习惯Spring Boot的页面习惯的放置方式,Spring Boot的页面就放置在src/main/resources下。
4. Spring MVC配置
代码解释:
此处无任何特别之处,只是一个普通的Spring配置类。这里我配置了JSP的ViewResolver,用来映射路径和实际页面的位置,其中,@EnableWebMvc注解会开启一些默认配置,如一些ViewResolver
或者MessageConverter等。在此处要特别解释一下Spring MVC的ViewResolver,这是Spring MVC视图(JSP下就是html)渲染的核心机制;SpringMVC里有一个接口叫做ViewResolver(所有的ViewResolver都实现该接口),实现这个接口要重写方法resolveViewName(),这个方法的返回值是接口View,而View的职责就是使用model,request,response对象,并将渲染的视图(不一定是html,可能是json,xml,pdf)返回给浏览器,在以后的文章我会介绍更多关于ViewResolver的内容。
可能你会对当前路径前缀配置为/WEB-INF/classes/views/有些奇怪,怎么和我开发的目录不一致?因为我们看到的页面效果是运行时而不是开发时候的代码,运行时代码会将我们的页面自动编译到/WEB-INF/classes/views/下,下图是运行时的目录结构,这样我们就能理解前缀为什么写成这样,在Spring Boot中,使用Thymeleaf作为模板,将不需要这样的设置。
5. Web配置
代码解释:
① WebApplicationInitializer是Spring提供用来配置Servlet3.0+配置的接口,从而实现替代web.xml的位置。实现此接口将会自动被SpringServletContainerInitializer(用来启动Servlet3.0容器)获取到。
② 新建WebApplicationContext,注册配置类,并将其和当前servletContext关联。
③ 注册Spring MVC的DispatcherServlet。
6. 简单控制器
代码解释:
① 利用@Controller注解声明是一个控制器。
② 利用@RequestMapping配置URL和方法之间的映射。
③ 通过上面ViewResolver的Bean配置,返回值为index,说明我们的页面放置的路径为/WEB-INF/classes/views/。
7.运行
将程序部署到Tomcat中,我设置的Tomcat端口是80,现在启动Tomcat,并访问http://localhost/springMvc4.x-quickStart/index,运行结果如下图所示:
三. 源代码示例:
需要阅读和下载源码的朋友请访问原文地址。