一、简介
Spring MVC 是一种基于 Java 的实现了 Web MVC 设计模式的请求驱动类型的轻量级 Web 框架。它通过将 web 层进行职责解耦,简化了日常的 Web 开发。Spring MVC 与 Spring 框架紧密集成,提供了强大的约定大于配置的契约式编程支持,使得 Web 层的开发更加简洁和易于维护。
二、SpringMVC的作用
干净的Web层设计:Spring MVC 提供了清晰的分层架构,允许开发者设计出干净的Web层。
简洁的Web层开发:通过注解(如 @RequestMapping
)来映射 HTTP 请求到控制器的具体方法,请求参数可以直接映射到方法的参数上。
与Spring框架集成:Spring MVC 天生与 Spring 框架集成,包括IoC容器和AOP。
约定大于配置:虽然Spring MVC不是完全的“约定大于配置”,但它确实提供了一系列的默认配置,减少了开发者的配置负担。
单元测试友好:Spring MVC 的设计使得Web层的单元测试变得简单。
灵活的URL映射:通过使用注解或XML配置,可以轻松实现URL到控制器方法的映射。
视图技术集成:Spring MVC 与多种视图技术集成良好,如 Velocity、FreeMarker 等。
数据验证、格式化和绑定:Spring MVC 提供了强大的验证、格式化和数据绑定机制,可以与任何对象一起工作。
JSP标签库:Spring MVC 提供了一套强大的 JSP 标签库,简化了 JSP 页面的开发。
本地化和主题解析:支持国际化(i18n)和主题(themes)。
异常处理:Spring MVC 提供了简单的异常处理机制。
静态资源支持:通过配置,Spring MVC 可以轻松地处理静态资源。
Restful风格支持:Spring MVC 支持通过注解创建 RESTful Web 服务。
三、Spring Web MVC处理请求的流程
(1)核心组件
Spring MVC 的核心组件包括:
- 前端控制器(DispatcherServlet):作为中央调度器,它负责接收请求并决定将请求转发到哪个处理器(Controller)。
- 处理器映射器(HandlerMapping):负责根据请求的 URL 查找相应的处理器。
- 处理器适配器(HandlerAdapter):负责调用具体的处理器(Controller),这是通过适配器模式实现的。
- 视图解析器(ViewResolver):负责将处理器(Controller)返回的视图名称解析为具体的视图(View)。
- 处理器(Controller):负责处理用户的请求,并返回模型和视图。
(2)处理请求的流程
- 用户发送请求到前端控制器(DispatcherServlet)。
- 前端控制器请求处理器映射器(HandlerMapping)查找处理器(Controller)。
- 处理器映射器返回找到的处理器给前端控制器。
- 前端控制器调用处理器适配器(HandlerAdapter)执行处理器。
- 处理器执行完成后,返回模型和视图(ModelAndView)给适配器。
- 处理器适配器将模型和视图返回给前端控制器。
- 前端控制器请求视图解析器(ViewResolver)解析视图。
- 视图解析器解析后返回视图给前端控制器。
- 前端控制器进行视图渲染,即将模型数据填充到视图。
- 前端控制器将最终的响应发送给用户。
四、SpringMVC的入门程序
(1)环境搭建
首先,创建一个 Maven 的 Web 项目,并添加 Spring MVC 的依赖:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.15.RELEASE</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
<scope>provided</scope>
</dependency>
(2)配置前端控制器
在 web.xml
中配置前端控制器:
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
(3)配置配置处理器映射器
在Springmvc.xml配置文件中配置处理器映射器:
<!--处理器映射器-->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>
(4)配置处理器适配器
在springmvc.xml文件配置处理器适配器:
<!--处理器适配器-->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
(5)配置视图解析器
在springmvc.xml文件配置视图解析器:
<!-- 配置视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>
<property name="prefix" value="/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
(6)开发第一个控制器
创建一个简单的控制器来处理请求:
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class HelloWorldController {
@RequestMapping("/hello")
public ModelAndView sayHello() {
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("message", "Hello Spring MVC!");
modelAndView.setViewName("hello");
return modelAndView;
}
}
(7)开发视图
创建一个简单的 JSP 页面来显示控制器传递的消息:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Hello Spring MVC</title>
</head>
<body>
<h1>${message}</h1>
</body>
</html>
(8)部署与测试
将应用部署到 Tomcat 服务器上,并在浏览器中访问 http://localhost:8080/yourapp/hello
,你将看到 "Hello Spring MVC!" 的消息。
总结
Spring MVC 作为 Spring 框架的核心模块之一,为构建灵活且易于维护的 Web 应用程序提供了强有力的支持。通过其独特的 MVC 设计模式,Spring MVC 将应用程序分为模型(Model)、视图(View)和控制器(Controller),使得各个部分的职责清晰分离,从而提高了代码的可读性和可维护性。
在模型(Model)部分,Spring MVC 允许开发者定义数据模型和业务逻辑,这些模型可以是简单的 POJOs,也可以是复杂的业务对象。视图(View)部分则负责展示数据,Spring MVC 支持多种视图技术,包括 JSP、Thymeleaf 和 FreeMarker 等,使得开发者可以灵活选择适合项目需求的视图技术。控制器(Controller)作为模型和视图之间的桥梁,负责接收用户请求、处理业务逻辑并选择适当的视图进行响应。
Spring MVC 的请求处理流程是其核心特性之一,它通过 DispatcherServlet 作为前端控制器来分发请求到不同的处理器。处理器映射器(HandlerMapping)、处理器适配器(HandlerAdapter)和视图解析器(ViewResolver)等组件协同工作,确保了请求的高效处理和视图的灵活渲染。
Spring MVC 还提供了丰富的高级特性,如异常处理、文件上传、拦截器等,这些特性使得开发者可以轻松实现复杂的业务需求。异常处理器(HandlerExceptionResolver)允许全局处理异常,拦截器(Interceptor)则可以在请求处理的不同阶段执行代码,如身份验证、日志记录等。
此外,Spring MVC 支持 RESTful 风格的 URL 设计,使得开发者可以构建出符合现代 Web 应用设计原则的接口。通过注解和配置,Spring MVC 使得数据绑定、类型转换和消息转换变得简单直观。
总的来说,Spring MVC 不仅是一个功能强大的 Web 框架,更是一个灵活、可扩展的平台,它通过提供一系列约定和组件,使得开发者可以专注于业务逻辑的实现,而无需关心底层的请求处理和数据渲染。随着 Spring 5 的发布,Spring MVC 也在不断地进化和完善,为开发者提供了更加丰富和高效的工具来构建企业级的 Web 应用程序。