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

SpringMVC快速入门之核心配置详解

SpringMVC快速入门之核心配置详解

    • 一、SpringMVC的核心组件
    • 二、SpringMVC的核心配置文件
      • 2.1 Web容器配置(web.xml)
      • 2.2 SpringMVC核心配置(spring-mvc.xml)
    • 三、核心配置详解与实战
      • 3.1 注解驱动(<mvc:annotation-driven>)
      • 3.2 视图解析器配置
        • JSP视图解析器配置
      • 3.3 静态资源处理
        • 方式1:<mvc:resources>(推荐)
        • 方式2:<mvc:default-servlet-handler>
      • 3.4 文件上传配置
    • 四、常见问题与避坑指南
      • 4.1 中文乱码问题
        • 4.1.1 POST请求参数乱码
        • 4.1.2 JSON响应中文乱码
      • 4.2 静态资源404
      • 4.3 视图解析器无法找到JSP
    • 总结:SpringMVC核心配置的核心要点

SpringMVC是基于Spring的MVC框架,用于构建Web应用,核心是通过配置将请求映射到处理器、处理数据绑定、渲染视图等,掌握SpringMVC的核心配置是快速开发Web应用的基础。

一、SpringMVC的核心组件

SpringMVC的核心是通过一系列组件协同工作,完成请求处理流程。了解这些组件是理解配置的基础。

组件作用核心配置点
DispatcherServlet(前端控制器)接收所有请求,协调其他组件工作(核心入口)web.xml中配置Servlet映射
HandlerMapping(处理器映射器)根据请求找到对应的处理器(Controller)配置请求映射规则(如@RequestMapping)
HandlerAdapter(处理器适配器)执行处理器(Controller方法)配置适配器(默认适配注解控制器)
Controller(处理器)处理请求的业务逻辑(如@Controller类)编写Controller方法并映射请求
ViewResolver(视图解析器)将逻辑视图名解析为物理视图(如JSP路径)配置前缀、后缀(如/WEB-INF/views/ + .jsp)
ModelAndView封装处理结果和视图信息Controller方法返回ModelAndView或String

二、SpringMVC的核心配置文件

SpringMVC的配置分为两部分:Web容器配置(web.xml)和SpringMVC核心配置(spring-mvc.xml)。

2.1 Web容器配置(web.xml)

web.xml用于配置DispatcherServlet(前端控制器),这是SpringMVC的入口,所有请求都通过它转发。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><!-- 1. 配置DispatcherServlet(前端控制器) --><servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!-- 2. 指定SpringMVC配置文件路径 --><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring-mvc.xml</param-value></init-param><!-- 3. 启动时加载(值越小优先级越高) --><load-on-startup>1</load-on-startup></servlet><!-- 4. 配置Servlet映射(拦截所有请求,除了.jsp) --><servlet-mapping><servlet-name>springmvc</servlet-name><!-- 方式1:拦截所有请求(推荐) --><url-pattern>/</url-pattern><!-- 方式2:拦截特定后缀(如.do) --><!-- <url-pattern>*.do</url-pattern> --></servlet-mapping><!-- 5. 配置编码过滤器(解决POST请求中文乱码) --><filter><filter-name>characterEncodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param><init-param><param-name>forceEncoding</param-name><param-value>true</param-value></init-param></filter><filter-mapping><filter-name>characterEncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>
</web-app>

关键配置说明

  • url-pattern>/</url-pattern>:拦截所有请求(除JSP,容器默认Servlet处理.jsp);
  • 编码过滤器CharacterEncodingFilter:必须配置,否则POST请求中文参数会乱码;
  • load-on-startup>1</load-on-startup>:服务器启动时初始化Servlet,避免首次请求延迟。

2.2 SpringMVC核心配置(spring-mvc.xml)

spring-mvc.xml配置处理器映射、视图解析器、注解驱动等核心组件,是SpringMVC的核心配置文件。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beanshttps://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttps://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/mvchttps://www.springframework.org/schema/mvc/spring-mvc.xsd"><!-- 1. 扫描Controller包(自动注册@Controller注解的Bean) --><context:component-scan base-package="com.example.controller"/><!-- 2. 开启注解驱动(关键) --><mvc:annotation-driven><!-- 配置消息转换器(解决JSON响应中文乱码) --><mvc:message-converters><bean class="org.springframework.http.converter.StringHttpMessageConverter"><property name="supportedMediaTypes"><list><value>text/html;charset=UTF-8</value><value>application/json;charset=UTF-8</value></list></property></bean><!-- 配置Jackson(返回JSON数据) --><bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/></mvc:message-converters></mvc:annotation-driven><!-- 3. 配置视图解析器(JSP视图) --><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/views/"/> <!-- 视图前缀 --><property name="suffix" value=".jsp"/> <!-- 视图后缀 --><property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> <!-- 支持JSTL --></bean><!-- 4. 静态资源处理(放行CSS/JS/图片等,避免被DispatcherServlet拦截) --><mvc:resources mapping="/static/**" location="/static/"/><!-- 或使用默认Servlet处理静态资源 --><!-- <mvc:default-servlet-handler/> --><!-- 5. 配置文件上传解析器(可选,需添加commons-fileupload依赖) --><bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"><property name="defaultEncoding" value="UTF-8"/><property name="maxUploadSize" value="10485760"/> <!-- 最大上传大小10MB --></bean>
</beans>

关键配置说明

  • <context:component-scan>:扫描@Controller注解的类,必须配置;
  • <mvc:annotation-driven>:开启注解驱动,自动注册处理器映射器和适配器,支持@RequestMapping等注解;
  • 视图解析器:通过prefixsuffix拼接视图路径(如逻辑视图名index/WEB-INF/views/index.jsp);
  • 静态资源处理:<mvc:resources>用于放行静态资源(如/static/css/style.css),否则会被DispatcherServlet拦截导致404。

三、核心配置详解与实战

3.1 注解驱动(mvc:annotation-driven)

<mvc:annotation-driven>是SpringMVC的“开关”,作用:

  • 自动注册RequestMappingHandlerMapping(处理器映射器)和RequestMappingHandlerAdapter(处理器适配器);
  • 支持@RequestMapping@RequestBody@ResponseBody等注解;
  • 配置消息转换器(如JSON序列化、字符串编码)。

JSON响应配置
需添加Jackson依赖(用于将对象转为JSON):

<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.13.3</version>
</dependency>

mvc:message-converters中配置MappingJackson2HttpMessageConverter,即可通过@ResponseBody返回JSON:

@Controller
@RequestMapping("/users")
public class UserController {@GetMapping("/{id}")@ResponseBody // 返回JSONpublic User getUser(@PathVariable Integer id) {return new User(id, "张三", 25); // 自动转为JSON}
}

3.2 视图解析器配置

SpringMVC支持多种视图(JSP、Thymeleaf、Freemarker等),最常用的是JSP视图解析器InternalResourceViewResolver

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

使用示例

@Controller
public class HomeController {@GetMapping("/index")public String index(Model model) {model.addAttribute("message", "Hello SpringMVC");return "index"; // 逻辑视图名,解析为/WEB-INF/views/index.jsp}
}

JSP页面(/WEB-INF/views/index.jsp):

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>首页</title>
</head>
<body><h1>${message}</h1> <!-- 显示模型数据 -->
</body>
</html>

3.3 静态资源处理

静态资源(CSS、JS、图片)若不配置,会被DispatcherServlet拦截导致404,需通过以下方式处理:

方式1:mvc:resources(推荐)
<!-- mapping:访问路径,**表示匹配所有子路径 -->
<!-- location:实际存储路径(Web应用根目录下) -->
<mvc:resources mapping="/static/**" location="/static/"/>

访问http://localhost:8080/app/static/css/style.css时,会映射到/static/css/style.css文件。

方式2:mvc:default-servlet-handler

使用容器默认Servlet处理静态资源(如Tomcat的DefaultServlet):

<mvc:default-servlet-handler/>

注意:需放在<mvc:annotation-driven>之前,否则可能覆盖注解驱动配置。

3.4 文件上传配置

实现文件上传需配置CommonsMultipartResolver,步骤:

  1. 添加依赖:
<dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.4</version>
</dependency>
  1. 配置上传解析器:
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"><property name="defaultEncoding" value="UTF-8"/><property name="maxUploadSize" value="10485760"/> <!-- 10MB --><property name="maxUploadSizePerFile" value="2097152"/> <!-- 单个文件最大2MB -->
</bean>
  1. 编写上传Controller:
@Controller
@RequestMapping("/upload")
public class UploadController {@PostMappingpublic String upload(@RequestParam("file") MultipartFile file, Model model) throws IOException {if (!file.isEmpty()) {// 保存文件到服务器String path = "D:/upload/";String filename = file.getOriginalFilename();file.transferTo(new File(path + filename));model.addAttribute("message", "上传成功:" + filename);} else {model.addAttribute("message", "上传失败:文件为空");}return "uploadResult"; // 跳转结果页面}
}

四、常见问题与避坑指南

4.1 中文乱码问题

4.1.1 POST请求参数乱码

原因:未配置编码过滤器或配置错误。

解决方案:确保web.xml中配置CharacterEncodingFilter,且forceEncoding设为true

<filter><filter-name>characterEncodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param><init-param><param-name>forceEncoding</param-name><param-value>true</param-value></init-param>
</filter>
<filter-mapping><filter-name>characterEncodingFilter</filter-name><url-pattern>/*</url-pattern>
</filter-mapping>
4.1.2 JSON响应中文乱码

原因StringHttpMessageConverter的默认编码不是UTF-8。

解决方案:在mvc:message-converters中配置编码:

<mvc:annotation-driven><mvc:message-converters><bean class="org.springframework.http.converter.StringHttpMessageConverter"><property name="supportedMediaTypes"><list><value>application/json;charset=UTF-8</value><value>text/html;charset=UTF-8</value></list></property></bean></mvc:message-converters>
</mvc:annotation-driven>

4.2 静态资源404

原因

  • 未配置静态资源处理,静态资源被DispatcherServlet拦截;
  • <mvc:resources>mappinglocation配置错误。

解决方案

  • 检查mappinglocation是否匹配(如mapping="/static/**"对应location="/static/");
  • 确保静态资源实际路径正确(如/static/css/style.css确实存在);
  • 若使用<mvc:default-servlet-handler>,需放在<mvc:annotation-driven>之前。

4.3 视图解析器无法找到JSP

错误信息Could not resolve view with name 'index' in servlet with name 'springmvc'

原因

  • 视图解析器的prefixsuffix配置错误(路径拼接错误);
  • JSP文件未放在指定目录(如/WEB-INF/views/);
  • 逻辑视图名返回错误(如拼写错误)。

解决方案

  • 验证路径拼接是否正确(逻辑视图名indexprefix + "index" + suffix);
  • 检查JSP文件是否存在(如/WEB-INF/views/index.jsp);
  • 确保返回的逻辑视图名正确(区分大小写)。

总结:SpringMVC核心配置的核心要点

SpringMVC的核心配置围绕“请求处理→业务逻辑→视图渲染”的流程:

  1. 基础配置

    • web.xml配置DispatcherServlet和编码过滤器,是请求入口;
    • spring-mvc.xml配置组件扫描、注解驱动和视图解析器,是功能核心。
  2. 关键配置

    • <context:component-scan>:扫描Controller,必须配置;
    • <mvc:annotation-driven>:开启注解支持,不可或缺;
    • 视图解析器:正确配置prefixsuffix,确保视图能被找到;
    • 静态资源处理:避免静态资源被拦截,否则会404。
  3. 避坑指南

    • 中文乱码:检查编码过滤器和消息转换器配置;
    • 404错误:优先检查静态资源配置和视图路径;
    • 注解不生效:确保<mvc:annotation-driven>已配置。

若这篇内容帮到你,动动手指支持下!关注不迷路,干货持续输出!
ヾ(´∀ ˋ)ノヾ(´∀ ˋ)ノヾ(´∀ ˋ)ノヾ(´∀ ˋ)ノヾ(´∀ ˋ)ノ

http://www.xdnf.cn/news/16173.html

相关文章:

  • 第十二章 用Java实现JVM之结束
  • 网络基础15-16:MSTP +VRRP综合实验
  • linux 环境服务发生文件句柄泄漏导致服务不可用
  • 基于网络爬虫的在线医疗咨询数据爬取与医疗服务分析系统,技术采用django+朴素贝叶斯算法+boostrap+echart可视化
  • CS231n-2017 Lecture5卷积神经网络笔记
  • 【世纪龙科技】电动汽车原理与构造-汽车专业数字课程资源
  • 33、基于JDK17的GC调优策略
  • haproxy七层均衡
  • CanOpen--SDO 数据帧分析
  • Hugging Face 模型的缓存和直接下载有什么区别?
  • 【C++】第十八节—一文万字详解 | map和set的使用
  • 7.22 Java基础 | I/O流【下】
  • 小米视觉算法面试30问全景精解
  • HCIA/IP(一二章)笔记
  • Redis 初识
  • vcs门级仿真(后仿真)指南
  • Linux研学-Tomcat安装
  • 深入解析Hadoop中的Region分裂与合并机制
  • [pdf epub]《软件方法》电子书202507更新下载
  • 如何安装没有install.exe的mysql数据库文件
  • C# 析构函数
  • 虚幻5入门教程:如何在虚幻5中创建一个C++的Plugin
  • Zabbix 6.0+ 使用官方模板监控 Redis 数据库的完整配置指南
  • Linux 内核不能直接访问物理地址,必须通过虚拟地址访问。
  • Java+Vue构建的固定资产内控管理系统,融合移动端便捷与后台管理强大功能,模块完备,提供全量源码,轻松实现资产智能管控
  • 【uboot/kernel1】启动流程,环境变量,内存,initramfs
  • 构建智能视频中枢--多路RTSP转RTMP推送模块在轨道交通与工业应用中的技术方案探究
  • 知识库搭建之Meilisearch‘s 搜索引擎 测评-东方仙盟测评师
  • 二分查找-852.山峰数组的峰顶索引-力扣(LeetCode)
  • 【coze扣子】第1篇:coze快速入门