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

SpringMVC 入门教程

一、SpringMVC 简介

SpringMVC 是基于 MVC 设计模式的轻量级 Web 框架,核心功能包括:

  • 请求分发:通过 DispatcherServlet 统一处理请求。
  • 注解驱动:使用 @Controller@RequestMapping 简化开发。
  • 视图解析:支持 JSP、Thymeleaf 等多种视图技术。

在三层架构中的位置

  • 表现层:SpringMVC 负责处理用户请求(如 /user/login.form)。
  • 业务层:Spring 的 Service 层处理业务逻辑。
  • 持久层:MyBatis 或 Hibernate 操作数据库。

二、项目快速搭建
1. 创建 Maven 项目

添加以下依赖(以 Spring 5.3.10 为例):

<dependencies>
    <!-- SpringMVC 核心 -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.3.10</version>
    </dependency>
    <!-- Servlet API -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>4.0.1</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

2. 配置 web.xml
<web-app>
    <servlet>
        <servlet-name>dispatcher</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>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <!-- 拦截规则配置 -->
        <url-pattern>*.form</url-pattern>
    </servlet-mapping>
</web-app>

3. 创建 SpringMVC 配置文件

文件:src/main/resources/springmvc-config.xml

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="...">
    
    <!-- 扫描控制器包 -->
    <context:component-scan base-package="com.example.controller" />
    
    <!-- 开启注解驱动 -->
    <mvc:annotation-driven />
    
    <!-- 放行静态资源(可选) -->
    <mvc:resources mapping="/static/**" location="/static/" />
</beans>


三、核心配置详解
1. servlet-name 与配置文件的对应关系
  • 默认规则:SpringMVC 默认加载 WEB-INF/[servlet-name]-servlet.xml(如 dispatcher-servlet.xml)。
  • 自定义路径:通过 contextConfigLocation 参数指定配置文件路径(推荐)。
2. url-pattern 拦截模式
模式行为适用场景注意事项
*.form仅拦截以 .form 结尾的请求传统 Web 项目需手动放行静态资源
/拦截所有非 JSP 请求(包括静态资源)前后端分离项目需配置静态资源映射
/*拦截所有请求(包括 JSP)不推荐使用导致 JSP 无法渲染
3. 静态资源处理

springmvc-config.xml 中添加:

<mvc:resources mapping="/css/**" location="/css/" />
<mvc:resources mapping="/js/**" location="/js/" />

四、最佳实践与常见问题
1. 配置推荐
  • 传统 Web 项目:使用 *.form 拦截模式,JSP 直接访问。
  • RESTful API 项目:使用 / 拦截模式,放行静态资源。
2. 常见问题解决
问题原因解决方案
静态资源 404未配置资源映射添加 <mvc:resources>
JSP 无法访问误用 /* 拦截模式改为 /.form 模式
Controller 未生效包扫描路径错误检查 component-scan 配置

五、完整配置示例
web.xml
<web-app>
    <servlet>
        <servlet-name>dispatcher</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>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

springmvc-config.xml
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="...">
    
    <!-- 控制器包扫描 -->
    <context:component-scan base-package="com.example.controller" />
    
    <!-- 开启注解驱动 -->
    <mvc:annotation-driven />
    
    <!-- 静态资源放行 -->
    <mvc:resources mapping="/static/**" location="/static/" />
</beans>


六、扩展内容
  • RESTful 支持:使用 @GetMapping@PostMapping 简化请求映射。
  • 数据绑定:通过 @RequestParam 获取参数,@RequestBody 接收 JSON。
  • 视图解析器:配置 InternalResourceViewResolver 简化视图路径:
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/views/" />
    <property name="suffix" value=".jsp" />
</bean>

http://www.dtcms.com/a/95383.html

相关文章:

  • Elasticsearch:人工智能时代的公共部门数据治理
  • vue 图片放大到全局
  • 【Linux加餐-connect的短线重连】
  • antd 的 usePropsValue 的使用场景和源码解析
  • Unity3D 性能剖析工具(Profiler Tools)的使用
  • vLLM命令行使用方法详解
  • 时序数据库 InfluxDB(一)
  • 批量将多个 OFD 文档转换为 PDF 格式
  • Java全栈面试宝典:内存模型与Spring设计模式深度解析
  • SSM框架加成SpringBoot项目
  • 基于yolov11的3D打印缺陷检测系统python源码+pytorch模型+评估指标曲线+精美GUI界面
  • scikit-learn 学习路线与知识结构全解析
  • 【Zookeeper搭建】Zookeeper分布式集群搭建完整指南
  • UE4学习笔记 FPS游戏制作29 更换武器时更换武器的图标
  • 鸿蒙 ArkUI 基础布局
  • 力扣67:二进制求和
  • 初识C++:Hello, World!
  • HarmonyOS NEXT 鸿蒙中关系型数据库@ohos.data.relationalStore API 9+
  • PPT制作,分享下2025年国内外做PPT的AI工具,一健生成PPT
  • 【RabbitMQ】
  • 高精度加减乘除 + R 格式
  • windows免密ssh登录linux
  • 核函数(机器学习深度学习)
  • (UI自动化测试web端)第三篇:元素的常用操作方法_鼠标操作
  • CF每日5题Day2(1400)
  • C语言代码如何操作硬件?
  • 量子计算的黎明:从理论到现实的突破之旅
  • 《Python实战进阶》No37: 强化学习入门:Q-Learning 与 DQN
  • 2025年人工智能产业TOP10有哪些省份?人工智能产业发展前景如何?
  • HarmonyOS NEXT 鸿蒙中手写和使用第三方仓库封装Logger打印工具