第一个Spring MVC应用
了解了什么是Spring MVC,以及它的一些优点后,接下来本小节将通过一个简单的入门案例,来演示Spring MVC的使用,具体实现步骤如下。
1.创建项目,引入JAR包
在Eclipse中,创建一个名称为chapter11的Web项目,在项目的lib目录中添加运行Spring MVC程序所需要的JAR包,并发布到类路径下,添加后的项目结构如图1所示。
图1 添加JAR包后的项目结构
从图1可以看到,项目中添加了Spring的4个核心JAR包、commons-logging的JAR以及两个web相关的JAR(可以在Spring解压文件夹的libs目录中找到),这两个web相关的JAR包就是Spring MVC框架所需的JAR包。由于本书中所使用的Spring版本是4.3.6,所以Spring MVC也是基于该版本的。
2.配置前端控制器
在web.xml中,配置Spring MVC的前端控制器DispatcherServlet,如文件1所示。
文件1 web.xml
1 <?xml version="1.0" encoding="UTF-8"?>
2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3 xmlns="http://java.sun.com/xml/ns/javaee"
4 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
5 http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
6 id="WebApp_ID" version="3.0">
7 <servlet>
8 <!-- 配置前端过滤器 -->
9 <servlet-name>springmvc</servlet-name>
10 <servlet-class>
11 org.springframework.web.servlet.DispatcherServlet
12 </servlet-class>
13 <!-- 初始化时加载配置文件 -->
14 <init-param>
15 <param-name>contextConfigLocation</param-name>
16 <param-value>classpath:springmvc-config.xml</param-value>
17 </init-param>
18 <!-- 表示容器在启动时立即加载Servlet -->
19 <load-on-startup>1</load-on-startup>
20 </servlet>
21 <servlet-mapping>
22 <servlet-name>springmvc</servlet-name>
23 <url-pattern>/</url-pattern>
24 </servlet-mapping>
25 </web-app>
在文件1中,主要对<servlet>和<servlet-mapping>元素进行了配置。在<servlet>中,配置了Spring MVC的前端控制器DispatcherServlet,并通过其子元素<init-param>配置了Spring MVC配置文件的位置,<load-on-startup>元素中的1表示容器在启动时立即加载这个Servlet;在<servlet-mapping>中,通过<url-pattern>元素的“/”,会将所有URL拦截,并交由DispatcherServlet处理。
3.创建Controller类
在src目录下,创建一个com.itheima.controller包,并在包中创建控制器类FirstController,该类需要实现Controller接口,如文件2所示。
文件2 FirstController.java
1 package com.itheima.controller;
2 import javax.servlet.http.HttpServletRequest;
3 import javax.servlet.http.HttpServletResponse;
4 import org.springframework.web.servlet.ModelAndView;
5 import org.springframework.web.servlet.mvc.Controller;
6 /**
7 * 控制器类
8 */
9 public class FirstController implements Controller{
10 @Override
11 public ModelAndView handleRequest(HttpServletRequest request,
12 HttpServletResponse response) {
13 // 创建ModelAndView对象
14 ModelAndView mav = new ModelAndView();
15 // 向模型对象中添加数据
16 mav.addObject("msg", "这是我的第一个Spring MVC程序");
17 // 设置逻辑视图名
18 mav.setViewName("/WEB-INF/jsp/first.jsp");
19 // 返回ModelAndView对象
20 return mav;
21 }
22 }
在文件2中,handleRequest()是Controller接口的实现方法,FirstController类会调用该方法来处理请求,并返回一个包含视图名或包含视图名和模型的ModelAndView对象。本案例中,向模型对象中添加了一个名称为msg的字符串对象,并设置返回的视图路径为“/WEB-INF/jsp/first.jsp”,这样,请求就会被转发到first.jsp页面。
4.创建Spring MVC的配置文件,配置控制器映射信息
在src目录下,创建配置文件springmvc-config.xml,并在文件中配置控制器信息,如文件3所示。
文件3 springmvc-config.xml
1 <?xml version="1.0" encoding="UTF-8"?>
2 <beans xmlns="http://www.springframework.org/schema/beans"
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4 xsi:schemaLocation="http://www.springframework.org/schema/beans
5 http://www.springframework.org/schema/beans/spring-beans-4.3.xsd">
6 <!-- 配置处理器Handle,映射“/firstController”请求 -->
7 <bean name="/firstController"
8 class="com.itheima.controller.FirstController" />
9 <!-- 处理器映射器,将处理器Handle的name作为url进行查找 -->
10 <bean class=
11 "org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
12 <!-- 处理器适配器,配置对处理器中handleRequest()方法的调用-->
13 <bean class=
14 "org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
15 <!-- 视图解析器 -->
16 <bean class=
17 "org.springframework.web.servlet.view.InternalResourceViewResolver" />
18 </beans>
在文件3中,首先定义了一个名称为“/firstController”的Bean,该Bean会将控制器类FirstController映射到“/firstController”请求中;然后配置了处理器映射器BeanNameUrlHandlerMapping和处理器适配器SimpleControllerHandlerAdapter,其中处理器映射器用于将处理器Bean中的的name(即url)进行处理器查找,而处理器适配器用于完成对FirstController处理器中handleRequest()方法的调用。最后配置了视图解析器InternalResourceViewResolver来解析结果视图,并将结果呈现给用户。
小提示:
在老版本的Spring中,配置文件内必需要配置处理器映射器、处理器适配器和视图解析器,但在Spring4.0以后,如果不配置处理器映射器、处理器适配器和视图解析器,也会使用Spring内部默认的配置来完成相应的工作,这里显示的配置出了处理器映射器、处理器适配器和视图解析器是为了让读者能够更加清晰的了解Spring MVC的工作流程。
5.创建视图(View)页面
在WEB-INF目录下,创建一个jsp文件夹,并在文件夹中创建一个页面文件first.jsp,在该页面中使用EL表达式获取msg中的信息,如文件4所示。
文件4 first.jsp
1 <%@ page language="java" contentType="text/html; charset=UTF-8"
2 pageEncoding="UTF-8"%>
3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
4 "http://www.w3.org/TR/html4/loose.dtd">
5 <html>
6 <head>
7 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
8 <title>入门程序</title>
9 </head>
10 <body>
11 ${msg}
12 </body>
13 </html>
6.启动项目,测试应用
全部文件创建完成后,项目的文件结构如图2所示。
图2 案例完成时的项目目录结构
将chapter11项目发布到Tomcat中,并启动Tomcat服务器。在浏览器中访问地址
http://localhost:8080/chapter11**/**firstController
,其显示效果如图3所示。
图3 访问结果
从图3可以看到,浏览器中已经显示出了模型对象中的字符串信息。这也就说明第一个Spring MVC程序执行成功。