Spring MVC 框架学习笔记:从入门到精通的实战指南

目录

[1. Spring MVC 概述](#1. Spring MVC 概述)

[2. Spring MVC 项目搭建](#2. Spring MVC 项目搭建)

[3. Spring MVC 执行流程](#3. Spring MVC 执行流程)

[4. Spring MVC @RequestMapping 注解](#4. Spring MVC @RequestMapping 注解)

[5. Spring MVC 获取请求参数](#5. Spring MVC 获取请求参数)

[6. Spring MVC 常见注解](#6. Spring MVC 常见注解)

[7. Spring MVC 响应处理](#7. Spring MVC 响应处理)

[8. Spring MVC SSM 整合](#8. Spring MVC SSM 整合)

[9. Spring MVC 作用域传参](#9. Spring MVC 作用域传参)

[10. Spring MVC 上传](#10. Spring MVC 上传)

[11. Spring MVC 下载](#11. Spring MVC 下载)

[12. Spring MVC 拦截器](#12. Spring MVC 拦截器)

[13. Spring MVC 异常处理](#13. Spring MVC 异常处理)

[14. Spring MVC 其他注解](#14. Spring MVC 其他注解)

总结


前言

在 Java Web 开发领域,Spring MVC 框架无疑是众多开发者的选择之一。它基于 Spring 框架,提供了强大的 MVC 架构支持,帮助开发者构建高性能、可维护的 Web 应用程序。本文将按照清晰的目录结构,带你深入了解 Spring MVC 的核心概念、功能特性以及实战应用。

1. Spring MVC 概述

Spring MVC 是 Spring 框架的一部分,专门用于构建 Web 应用程序。它遵循 MVC(Model-View-Controller)设计模式,将应用程序分为模型、视图和控制器三个部分,从而实现代码的高内聚和低耦合。

2. Spring MVC 项目搭建

搭建一个 Spring MVC 项目需要以下步骤:

  1. 创建 Maven 项目 :在 IDE 中创建一个新的 Maven 项目,并添加 Spring MVC 的依赖。

xml

XML 复制代码
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.3.10</version>
</dependency>
  1. 配置前端控制器 :在 web.xml 文件中配置 DispatcherServlet,作为前端控制器。

xml

XML 复制代码
<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>
  1. 配置视图解析器 :在 Spring 配置文件中配置视图解析器,指定视图文件的前缀和后缀。

xml

XML 复制代码
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/views/"/>
    <property name="suffix" value=".jsp"/>
</bean>

3. Spring MVC 执行流程

Spring MVC 的执行流程如下:

  1. 用户发送请求 :用户通过浏览器发送 HTTP 请求到服务器。

  2. 前端控制器接收请求DispatcherServlet 接收到请求,并将其分发到合适的处理器。

  3. 处理器映射器查找处理器HandlerMapping 查找与请求匹配的处理器(Controller)。

  4. 处理器适配器调用处理器HandlerAdapter 调用处理器方法,并返回 ModelAndView 对象。

  5. 视图解析器解析视图ViewResolver 将视图名称解析为实际的视图对象。

  6. 视图渲染 :视图对象使用模型数据进行渲染,并将结果返回给用户。

4. Spring MVC @RequestMapping 注解

@RequestMapping 是 Spring MVC 中最常用的注解之一,用于将请求映射到处理器方法上。以下是一个简单的示例:

java

java 复制代码
@Controller
public class MyController {
    @RequestMapping("/hello")
    public String hello() {
        return "hello";
    }
}

5. Spring MVC 获取请求参数

Spring MVC 提供了多种方式获取请求参数,包括:

  • 通过方法参数获取 :直接在方法参数中声明需要的参数名称。

java

java 复制代码
@Controller
public class MyController {
    @RequestMapping("/greet")
    public String greet(@RequestParam("name") String name, Model model) {
        model.addAttribute("message", "Hello, " + name + "!");
        return "greet";
    }
}
  • 通过 @ModelAttribute 获取 :将请求参数绑定到 Java 对象上。

java

java 复制代码
@Controller
public class MyController {
    @RequestMapping("/user")
    public String getUser(@ModelAttribute("user") User user, Model model) {
        model.addAttribute("user", user);
        return "userDetail";
    }
}

6. Spring MVC 常见注解

Spring MVC 中常用的注解包括:

  • @Controller :标记一个类为控制器。

  • @RequestMapping :将请求映射到处理器方法上。

  • @RequestParam :获取请求参数。

  • @ModelAttribute :绑定请求参数到 Java 对象。

  • @ResponseBody :将方法返回值直接写入响应体。

7. Spring MVC 响应处理

Spring MVC 支持多种响应处理方式,包括:

  • 返回字符串 :返回视图名称,由视图解析器解析为实际视图。

java

java 复制代码
@Controller
public class MyController {
    @RequestMapping("/hello")
    public String hello() {
        return "hello";
    }
}
  • 返回 ModelAndView :包含模型数据和视图信息。

java

java 复制代码
@Controller
public class MyController {
    @RequestMapping("/hello")
    public ModelAndView hello() {
        ModelAndView modelAndView = new ModelAndView("hello");
        modelAndView.addObject("message", "Hello, Spring MVC!");
        return modelAndView;
    }
}
  • 返回 JSON 数据 :通过 @ResponseBody 注解返回 JSON 数据。

java

java 复制代码
@Controller
public class MyController {
    @RequestMapping("/user")
    @ResponseBody
    public User getUser() {
        User user = new User("John", 30);
        return user;
    }
}

8. Spring MVC SSM 整合

SSM(Spring + Spring MVC + MyBatis)是常见的 Java Web 开发框架组合。整合步骤如下:

  1. 添加依赖 :在 pom.xml 中添加 Spring、Spring MVC 和 MyBatis 的依赖。

  2. 配置数据源 :配置数据库连接信息。

xml

XML 复制代码
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost:3306/test"/>
    <property name="username" value="root"/>
    <property name="password" value="root"/>
</bean>
  1. 配置事务管理器 :配置事务管理器,管理数据库事务。

xml

XML 复制代码
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource"/>
</bean>
  1. 配置 MyBatis :配置 MyBatis 的 SqlSessionFactory 和 Mapper。

xml

XML 复制代码
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="mapperLocations" value="classpath:mapper/*.xml"/>
</bean>

9. Spring MVC 作用域传参

Spring MVC 支持多种作用域传参,包括:

  • 请求作用域(Request Scope) :默认作用域,参数在请求范围内有效。

  • 会话作用域(Session Scope) :参数在会话范围内有效。

java

java 复制代码
@Controller
public class MyController {
    @RequestMapping("/login")
    public String login(@RequestParam("username") String username, HttpSession session) {
        session.setAttribute("user", username);
        return "home";
    }
}
  • 应用作用域(Application Scope) :参数在应用范围内有效。

10. Spring MVC 上传

Spring MVC 提供了简单的文件上传功能,通过 @RequestParam 注解获取上传的文件对象。

java

java 复制代码
@Controller
public class FileController {
    @PostMapping("/upload")
    public String upload(@RequestParam("file") MultipartFile file) {
        try {
            file.transferTo(new File("path/to/save/" + file.getOriginalFilename()));
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "uploadSuccess";
    }
}

11. Spring MVC 下载

Spring MVC 也支持文件下载功能,通过设置响应头和输出流实现。

java

java 复制代码
@Controller
public class FileController {
    @GetMapping("/download")
    public void download(HttpServletResponse response) {
        File file = new File("path/to/download/file.txt");
        response.setContentType("application/octet-stream");
        response.setHeader("Content-Disposition", "attachment; filename=file.txt");
        try (FileInputStream fis = new FileInputStream(file);
             OutputStream os = response.getOutputStream()) {
            byte[] buffer = new byte[1024];
            int len;
            while ((len = fis.read(buffer)) > 0) {
                os.write(buffer, 0, len);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

12. Spring MVC 拦截器

Spring MVC 支持拦截器,用于在请求处理的不同阶段执行特定逻辑。以下是一个简单的拦截器示例:

java

java 复制代码
public class MyInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("Pre Handle");
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("Post Handle");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("After Completion");
    }
}

注册拦截器:

xml

XML 复制代码
<bean class="org.springframework.web.servlet.HandlerInterceptorAdapter">
    <property name="interceptors">
        <list>
            <ref bean="myInterceptor"/>
        </list>
    </property>
</bean>

13. Spring MVC 异常处理

Spring MVC 提供了全局异常处理器,通过 @ControllerAdvice 注解实现。

java

java 复制代码
@ControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(Exception.class)
    public ModelAndView handleException(Exception e) {
        ModelAndView modelAndView = new ModelAndView("error");
        modelAndView.addObject("message", e.getMessage());
        return modelAndView;
    }
}

14. Spring MVC 其他注解

Spring MVC 还提供了其他一些有用的注解,如:

  • @InitBinder :用于初始化数据绑定。

java

java 复制代码
@Controller
public class MyController {
    @InitBinder
    public void initBinder(WebDataBinder binder) {
        binder.setFieldDefaultPrefix("user.");
    }
}
  • @SessionAttributes :用于将模型属性添加到会话中。

java

java 复制代码
@Controller
@SessionAttributes("user")
public class MyController {
    // ...
}

总结

Spring MVC 作为 Spring 框架的重要组成部分,提供了强大的 Web 开发能力。通过学习 Spring MVC 的核心概念和功能特性,结合实战应用,可以快速构建高性能、可维护的 Web 应用程序。希望本文能够帮助你深入理解 Spring MVC 的精髓,为你的开发工作提供有力支持。如果你有任何问题或建议,欢迎在评论区留言,我们一起交流学习!

相关推荐
name_S562 分钟前
尝试在软考62天前开始成为软件设计师-信息系统安全
学习·安全·系统安全
Java个体户4 分钟前
spring事务-Exception不会回滚
spring
落雨封海21 分钟前
STM32/GD32主要学习内容
stm32·单片机·学习
HyperAI超神经25 分钟前
【TVM教程】使用 TVMC Micro 执行微模型
人工智能·python·深度学习·学习·教程·gpu·tvm
un_fired37 分钟前
【Spring AI】基于专属知识库的RAG智能问答小程序开发——功能优化:用户鉴权
java·人工智能·spring
庭前云落1 小时前
从零开始的 Kafka 学习(四)| 生产消息
学习·kafka·linq
计算机学姐1 小时前
基于SpringBoot的电影售票系统
java·vue.js·spring boot·后端·mysql·spring·intellij-idea
半升酒1 小时前
Spring MVC
java·spring
liang_20261 小时前
2.27省选模拟赛补题记录:直径(容斥,树形dp,换根dp)
笔记·学习·算法
大河之J天上来1 小时前
攻破tensorflow,勇创最佳agent(1)---学习率learning_rate问题
人工智能·学习·tensorflow