【Spring】— Spring MVC入门

Spring MVC入门

1.Spring MVC概述

Spring MVC是Spring提供的一个轻量级Web框架,它实现了Web MVC设计模式。Spring MVC在使用和性能等方面比另一个框架Struts2更加优异。

Spring MVC具有如下特点。

  • 是Spring框架的一部分,可以方便地利用Spring所提供的其他功能。
  • 灵活性强,易于与其他框架集成。
  • 提供了一个前端控制器DispatcherServlet,使开发人员无须额外开发控制器对象。
  • 可自动绑定用户输入,并能正确地转换数据类型。
  • 内置了常见的校验器,可以校验用户输入。如果校验不能通过,就会复位向到输入表单。
  • 支持国际化,可以根据用户区域显示多国语言。
  • 支持多种视图技术,如JSP、Velocity和FreeMarker等视图技术。
  • 使用基于XML的配置文件,在编辑后,不需要重新编译应用程序。

2.案例——第一个Spring MVC应用

1.创建项目,引入JAR包

创建一个名称为chapter11的Web项目,在项目的lib目录中添加运行Spring MVC程序所需要的JAR包,并发布到类路径下。

在这里插入图片描述

项目中添加了4个核心JAR包、commons-logging的JAR包以及两个Web相关的JAR包,这两个Web相关的JAR包就是Spring MVC框架所需的JAR包。

2.配置前端控制器

在web.xml中配置Spring MVC的前端控制器DispatcherServlet。

<?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"
         id="WebApp_ID" version="3.0">
    <servlet>
    <!--配置前端过滤器-->
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--初始化时加载配置文件-->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc-config.xml</param-value>
        </init-param>
            <!--表示容器在启动时立即加载Servlet -->
    <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
 </web-app>

主要对<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.ssm.controller包,并在包中创建控制器类ControllerTest,该类需要实现Controller接口。

package com.ssm.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

public class ControllerTest implements Controller {
    
    
    @Override
    public ModelAndView handleRequest(HttpServletRequest arg0, HttpServletResponse arg1)throws Exception{
    
    
        //创建ModelAndView对象
        ModelAndView m = new ModelAndView();
        //向模型对象中添加一个名称为msg的字符串对象
        m.addObject("msg","第一个spring MVC程序");
        //设置返回的视图路径
        m.setViewName("/WEB-INF/jsp/welcome.jsp");
        return m;
    }
}

handleRequest()是Controller接口的实现方法,ControllerTest类会调用该方法处理请求,并返回一个包含视图名或包含视图名与模型的ModelAndview对象。本案例向模型对象中添加了一个名称为msg的字符串对象,并设置返回的视图路径为WEB-INF/jsp/welcome.jsp,这样请求就会被转发到welcome.jsp页面。

4.创建Spring MVC的配置文件,配置控制器映射信息

在src目录下创建配置文件springmvc-config.xml,并在文件中配置控制器信息。

springmvc-config.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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!--  配置处理器Handle,映射"controllerTest"请求  -->
    <bean name="/controllerTest" class="com.ssm.controller.ControllerTest" />
    <!--  处理器映射,将处理器Handle的name作为url进行查找  -->
    <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />
    <!--  处理器适配器,配置对处理器HandleRequest()方法的调用  -->
    <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />
    <!--  视图解析器  -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" />
</beans>

首先定义了一个名称为“/ControllerTest”的Bean,该Bean会将控制器类ControllerTest映射到“/ControllerTest”请求中;然后配置了处理器映射器BeanNameUrlHandlerMapping和处理器适配器SimpleControllerHandlerAdapter,其中处理器映射器用于将处理器Bean中的的name(即url)进行处理器查找,而处理器适配器用于完成对ControllerTest处理器中handleRequest()方法的调用;最后配置了视图解析器InternalResourceViewResolver来解析结果视图,并将结果呈现给用户。

注意

在老版本的Spring中,配置文件内必须要配置处理器映射器、处理器适配器和视图解析器。但在Spring 4.0以后,如果不配置处理器映射器、处理器适配器和视图解析器,就会使用Spring内部默认的配置来完成相应的工作,这里显示的配置处理器映射器、处理器适配器和视图解析器是为了让读者能够更加清晰地了解Spring MVC的工作流程。

5.创建视图(View)页面

在WEB-INF目录下创建一个JSP文件夹,并在文件夹中创建一个页面文件welcome.jsp,在该页面中使用EL表达式获取msg中的信息。

<%@ page contentType="text/html; charset=UTF-8" language="java"
    pageEncoding="UTF-8" %>
<!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”
    "http:www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type"content="text/html; charset=UTF-8">
    <title>入门程序</title>
</head>
<body>
    ${
    
    msg}
</body>
</html>

6.启动项目,测试应用

将chapter11项目发布到Tomcat服务器并启动服务器。在浏览器中访问http://localhost:8080/chapter11/controllerTest,显示的页面效果如图所示。从中可以看到,浏览器中已经显示出了模型对象中的字符串信息,这就说明第一个Spring MVC程序执行成功。

在这里插入图片描述

通过入门案例的学习,可以总结一下Spring MVC程序的执行流程。

(1)用户通过浏览器向服务器发送请求,请求会被Spring MVC的前端控制器DispatcherServlet所拦截。

(2)DispatcherServlet拦截到请求后,会调用HandlerMapping处理器映射器。

(3)处理器映射器根据请求URL找到具体的处理器,生成处理器对象及处理器拦截器(如果有就生成)一并返回给DispatcherServlet。

(4)DispatcherServlet会通过返回信息选择合适的HandlerAdapter(处理器适配器)。

(5)HandlerAdapter会调用并执行Handler(处理器),这里的处理器就是程序中编写的Controller类,也被称为后端控制器。

(6)Controller执行完成后,会返回一个ModelAndView对象,该对象中包含视图名或包含模型与视图名。

(7)HandlerAdapter将ModelAndView对象返回给DispatcherServlet。

(8)DispatcherServlet会根据ModelAndView对象选择一个合适的ViewResolver(视图解析器)。

(9)ViewResolver解析后,会向DispatcherServlet中返回具体的View(视图)。

(10)DispatcherServlet对View进行渲染(即将模型数据填充至视图中)。

(11)视图渲染结果会返回给客户端浏览器显示。

在上述执行过程中,DispatcherServlet、HandlerMapping、HandlerAdapter和ViewResolver对象的工作是在框架内部执行的,开发人员并不需要关心这些对象内部的实现过程,只需要配置前端控制器(DispatcherServlet),完成Controller中的业务处理,并在视图中(View)中展示相应信息即可。

猜你喜欢

转载自blog.csdn.net/weixin_45627039/article/details/131233755