当前位置: 首页 > article >正文

Spring MVC 介绍与实践

Spring MVC 是一个基于 Java 的轻量级 Web 框架,是 Spring Framework 中用于构建 Web 应用程序的核心模块之一。它遵循了传统的 MVC(Model-View-Controller)设计模式,旨在将应用程序的业务逻辑与用户界面分离,从而提高代码的可维护性和可扩展性。本文将详细介绍 Spring MVC 的基本概念、工作原理及其应用实践。

1. Spring MVC 简介

Spring MVC 是一个请求驱动的 Web 框架,它在 Spring Framework 中起着至关重要的作用。Spring MVC 提供了一种通过 DispatcherServlet 处理 HTTP 请求的机制,并根据不同的请求映射到相应的控制器方法上,返回对应的视图或数据。

Spring MVC 主要由以下组件组成:

  • DispatcherServlet:前端控制器,接收所有请求并根据配置分发到相应的处理器。
  • HandlerMapping:根据请求的 URL 查找并映射到相应的处理器(Controller)。
  • Controller:业务逻辑处理器,负责接收用户请求,处理业务逻辑,并返回一个 ModelAndView 对象。
  • ModelAndView:封装了模型数据和视图信息,决定响应内容。
  • ViewResolver:将 ModelAndView 中的视图名解析成实际的视图对象(如 JSP、Thymeleaf 等)。
  • HandlerInterceptor:用于在请求处理的不同阶段进行拦截,适合进行日志记录、权限验证等功能。

2. Spring MVC 工作原理

Spring MVC 的工作流程通常可以分为以下几个步骤:

  1. 请求到达 DispatcherServlet:所有的 HTTP 请求都会首先通过前端控制器 DispatcherServlet,该控制器会根据请求的 URL 分发请求到相应的处理器方法(即 Controller)。

  2. 请求映射DispatcherServlet 会通过 HandlerMapping 查找合适的处理器(Controller)方法。

  3. 业务逻辑处理:一旦找到合适的 Controller,Spring MVC 会调用该方法,执行相关的业务逻辑,并将模型数据封装到 ModelAndView 对象中。

  4. 视图解析:控制器返回的 ModelAndView 对象会交由 ViewResolver 解析,找到实际的视图。

  5. 视图渲染:最后,视图被渲染为 HTML 页面返回给客户端,完成整个请求的处理过程。

3. Spring MVC 核心组件详解

3.1 DispatcherServlet

DispatcherServlet 是 Spring MVC 的核心组件,它是前端控制器,所有的请求都必须经过它。它负责将请求委派给合适的处理器(Controller),并最终将响应渲染到客户端。

在 web.xml 配置文件中,我们需要定义 DispatcherServlet

<servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

3.2 HandlerMapping

HandlerMapping 是 Spring MVC 中负责根据请求的 URL 查找并映射到相应的控制器(Controller)的方法。Spring MVC 提供了多种 HandlerMapping 实现,常用的有:

  • AnnotationMethodHandlerMapping:根据注解(如 @RequestMapping)来查找方法。
  • SimpleUrlHandlerMapping:基于 URL 的映射。

3.3 Controller

Controller 是 Spring MVC 中的核心组件,负责接收请求、处理业务逻辑并返回视图。通常,Controller 会通过 @RequestMapping 注解来映射请求路径。

@Controller
public class HelloController {

    @RequestMapping("/hello")
    public String sayHello(Model model) {
        model.addAttribute("message", "Hello, Spring MVC!");
        return "hello";  // 返回视图名
    }
}

3.4 ModelAndView

ModelAndView 是 Spring MVC 用来封装模型数据和视图信息的对象。它可以将模型数据(例如一个 JavaBean)和视图(如 JSP 或 Thymeleaf)绑定在一起。

@RequestMapping("/hello")
public ModelAndView sayHello() {
    ModelAndView modelAndView = new ModelAndView("hello");
    modelAndView.addObject("message", "Hello, Spring MVC!");
    return modelAndView;
}

3.5 ViewResolver

ViewResolver 负责将 ModelAndView 中的视图名称解析成实际的视图对象。Spring MVC 提供了多种视图解析器实现,常见的有:

  • InternalResourceViewResolver:用于解析 JSP 视图。
  • ThymeleafViewResolver:用于解析 Thymeleaf 视图。
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/views/" />
    <property name="suffix" value=".jsp" />
</bean>

3.6 HandlerInterceptor

HandlerInterceptor 用于在请求处理的不同阶段进行拦截,常用于进行权限验证、日志记录、性能监控等操作。拦截器可以在请求处理前后分别执行方法,拦截器是基于代理设计模式的。

public class MyInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // 处理请求之前
        return true;  // 如果返回 false,后续的处理器方法将不会执行
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        // 请求处理后,视图渲染前
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        // 请求完成后
    }
}

4. Spring MVC 配置示例

一个基本的 Spring MVC 配置通常包括以下几个步骤:

  1. web.xml 配置 DispatcherServlet
<web-app>
    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>
  1. Spring 配置文件(applicationContext.xml)
<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-3.0.xsd">

    <!-- 配置视图解析器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/" />
        <property name="suffix" value=".jsp" />
    </bean>

    <!-- 配置 Controller -->
    <bean name="/hello" class="com.example.HelloController" />

</beans>

5. 总结

Spring MVC 是一个功能强大的 Web 框架,它基于 MVC 模式,有助于分离业务逻辑和视图层,从而提高代码的可维护性和可扩展性。通过 DispatcherServlet、HandlerMapping、Controller、ModelAndView 等组件,Spring MVC 提供了高效的请求处理和视图渲染机制。

在现代 Web 应用程序中,Spring MVC 仍然是一个非常流行且强大的框架,适合构建各种规模的企业级应用程序。通过结合 Spring 的其他模块(如 Spring Boot 和 Spring Data JPA),你可以构建出高效、可扩展且易于维护的应用程序。


http://www.kler.cn/a/468138.html

相关文章:

  • 2025年AI和AR谁才是智能眼镜的未来
  • Java中String对象创建的方式
  • 【SQL serve】教材数据库(6)
  • 外观模式——C++实现
  • Ubuntu 安装英伟达显卡驱动问题记录
  • 面试场景题系列:设计爬虫系统
  • 新能源电动汽车动力电池技术
  • OSPF一些基础概念
  • 云从科技Java面试题及参考答案
  • STM32F1学习——PWMI模式(IC输入捕获)
  • uniapp H5页面实现懒加载
  • Fireworks AI:图像/PDF非文本内容转LLM可读文本
  • pytorch torch.scatter_reduce函数介绍
  • 使用Java Selenium修改打开页面窗口大小
  • 线程-8-日志_线程池
  • 比较 FreeSWITCH 的 asr 事件和回调函数
  • docker 转移文件到容器内部 以修改nextcloud添加域名信任 为例子
  • 【面试】后端开发面试中常见数据结构及应用场景、原理总结
  • 深入解析桥接模式、NAT模式与仅主机模式
  • 大模型微调技术: 从基于Stable Diffusion的绘画谈起