学科分类
目录
SSM框架

第一个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程序执行成功。

点击此处
隐藏目录