Spring 4发布很长一段时间了,从 Spring 3 到 Spring 4 有巨大的改变。网上还有很多教程是基于 Spring 3.0 的,甚至 Spring 2.5,要想按照网上的教程“按图索骥”还是挺困难的。纵有一些 Spring 4.0 MVC 的教程例子,也往往是 “Spring MVC + hibernate 集成实例”这样的例子,想找一个浅显点的例子都难。
所以,下面就是一个浅显的例子,只为对 Spring 4.0 MVC 形成一个最初的印象。
项目目录结构
带箭头的是需要改的
项目搭建过程
(1)使用 maven 建立一个 web 项目( 教程点此 ),pom.xml文件加入如下依赖包:
注意注意:一定要记得在项目属性里,设置 Deployment Assembly,将Maven Dependencies加入发布路径里。设置完后运行时才会把 pom.xml 文件里的依赖加入到 /WEB-INF/lib 目录下。
<dependencies><!-- spring 核心模块 --><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>4.2.4.RELEASE</version></dependency><!-- spring 上下文模块 --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>4.2.4.RELEASE</version></dependency><!-- spring web --><!-- 提供web支持 --><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>4.2.4.RELEASE</version></dependency> <!-- spring web mvc --><!-- 提供web mvc --><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>4.2.4.RELEASE</version></dependency></dependencies>
(2)新建 web.xml 文件,如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"><!--1 指出 spring 配置文件的位置 --><context-param><param-name>configLocation</param-name><param-value>/WEB-INF/applicationContext.xml</param-value></context-param><!--2 容器加载监听器, 监听到服务器启动的时候,根据spring 配置文件,创建Spring容器 --><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><!--3 spring MVC的分发器,这是一个标准的Servlet,按照spring MVC的约定,这个Servlet 的配置文件应该叫做:<servlet name >-servlet.xml --> <servlet><servlet-name>spring</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>spring</servlet-name><url-pattern>/</url-pattern></servlet-mapping><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list></web-app>
配置 1、2 属于Spring Web范畴,既是在web项目中使用Spring的方式,使用监听器监听到服务器启动时自动创建Spring容器。对比一下,在普通项目中一般是硬编码来创建Spring容器:
public static void main(String[] args){ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");}
配置 3 属于Spring MVC,通过配置一个Servlet,匹配所有以“/”开头的请求,作为Spring MVC的入口。
(3)创建spring配置文件,默认为applicationContext.xml,如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"><!--加入下面两个配置,就可以用注解方式配置bean--> <context:annotation-config></context:annotation-config><context:component-scan base-package="com.huanle"/></beans>
(4)创建spring MVC的分发控制器的配置文件(默认为 < servlet name >-servlet.xml),DispatcherServlet根据这里的配置进行请求分发
<?xml version="1.0" encoding="UTF-8"?>
<!--加入了MVC命名空间 -->
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsd"><!--下面两个配置使得可以在项目中使用mvc注解,如@Controller--> <mvc:annotation-driven></mvc:annotation-driven><context:component-scan base-package="com.huanle.controller"/></beans>
(5)创建controller,使用@Controller注解和@RequestMapping注解,代码如下:
/*
@Controller注解将SayHelloController 类配置为一个控制器Bean,这个Bean就可以接受http请求了;@RequestMapping("/SayHello")配置了这个Bean的访问方式
*/
@Controller
@RequestMapping("/SayHello")
public class SayHelloController {/*@RequestMapping注解配置了helloWorld 方法的访问方式return 语句返回一个重定向字符串*/ @RequestMapping( path = "/getAnswer" , method = RequestMethod.GET)public String helloWorld() {return "redirect:/answer.jsp";}}
这个Controller可以通过
localhost:8080/huanle/SayHello/getAnswer
访问。huanle 是工程名