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

Spring MVC 配置详解与入门案例

目录

引言

一、Spring MVC 的发展背景

1. Model I 与 Model II

2. MVC 模式

二、Spring MVC 入门案例

1. 创建 WEB 工程并引入依赖

2. 配置 web.xml

3. 配置 springmvc.xml

4. 创建控制器和视图

5. 部署并测试

三、Spring MVC 原理

1. 核心组件

2. 请求处理流程

总结


引言

        在 Java Web 开发的历史长河中,Spring MVC 作为一款强大的框架,以其简洁的配置和高效的处理机制赢得了广大开发者的青睐。本文将带您深入了解 Spring MVC 的配置过程,并通过一个完整的入门案例,帮助您快速掌握其核心要点。

一、Spring MVC 的发展背景

1. Model I 与 Model II

  • Model I:JSP + JavaBean 的开发模式,JSP 页面直接整合业务逻辑和视图展示,导致代码耦合度高,维护困难。

  • Model II:引入 Servlet 作为控制器,JSP 负责视图展示,JavaBean 处理业务逻辑,实现了职责分工,更适合大型项目开发。

2. MVC 模式

        MVC(Model-View-Controller)是一种经典的设计模式,将应用分为模型、视图和控制器三部分,旨在降低耦合度,提高可扩展性和可维护性。Spring MVC 作为 MVC 模式的一种实现,进一步简化了 Web 开发流程。

二、Spring MVC 入门案例

1. 创建 WEB 工程并引入依赖

        首先,创建一个 Maven 管理的 WEB 工程,并在 pom.xml 中添加以下依赖:

<properties>
<spring.version>5.0.2.RELEASE</spring.version>
</properties>


<dependencies>
<!-- Spring MVC -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>


<!-- Servlet API -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>


<!-- Thymeleaf 模板引擎 -->
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf-spring4</artifactId>
<version>3.0.9.RELEASE</version>
</dependency>


<!-- 其他依赖 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
</dependencies>

2. 配置 web.xml

        在 web.xml 中配置 Spring MVC 的前端控制器 DispatcherServlet

<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
   http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">

    <!-- 配置字符编码过滤器 -->
    <filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <async-supported>true</async-supported>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <!-- 配置前端控制器 -->
    <servlet>
        <servlet-name>dispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

    <!-- 欢迎页面 -->
    <welcome-file-list>
        <welcome-file>/index.html</welcome-file>
    </welcome-file-list>
</web-app>

3. 配置 springmvc.xml

        在 resources 目录下创建 springmvc.xml,配置 Spring MVC 的核心组件:

<?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/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd
       http://www.springframework.org/schema/mvc
       http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!-- 扫描控制器所在的包 -->
    <context:component-scan base-package="com.qcby.controller"></context:component-scan>

    <!-- 配置视图解析器 -->
    <bean id="viewResolver" class="org.thymeleaf.spring4.view.ThymeleafViewResolver">
        <property name="order" value="1"/>
        <property name="characterEncoding" value="UTF-8"/>
        <property name="templateEngine" ref="templateEngine"/>
    </bean>
    <bean id="templateEngine" class="org.thymeleaf.spring4.SpringTemplateEngine">
        <property name="templateResolver" ref="templateResolver"/>
    </bean>
    <bean id="templateResolver" class="org.thymeleaf.spring4.templateresolver.SpringResourceTemplateResolver">
        <property name="prefix" value="/WEB-INF/views/" />
        <property name="suffix" value=".html" />
        <property name="templateMode" value="HTML5"/>
    </bean>

    <!-- 开启注解驱动 -->
    <mvc:annotation-driven/>
</beans>

4. 创建控制器和视图

  • 控制器:使用 @Controller 注解定义控制器类,处理用户请求。
@Controller
public class HelloController {
    @RequestMapping(path = "/hello.do")
    public String sayHello(Model model) {
        model.addAttribute("msg", "Hello, Spring MVC!");
        return "suc";
    }
}
  • 视图:在 WEB-INF/views 目录下创建 suc.html,使用 Thymeleaf 模板引擎渲染数据。
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>成功页面</title>
</head>
<body>
    <h1>Hello <b th:text="${msg}"></b></h1>
</body>
</html>

5. 部署并测试

        将项目部署到 Tomcat 服务器,启动后访问 http://localhost:8080/项目名/index.html,点击链接发送请求,即可看到成功页面。

三、Spring MVC 原理

1. 核心组件

  • 前端控制器(DispatcherServlet):接收所有请求,并分发给相应的处理器。
  • 处理器映射器(HandlerMapping):根据请求 URL 找到对应的处理器。
  • 处理器(Handler):执行具体的业务逻辑。
  • 处理器适配器(HandlerAdapter):协助处理器执行请求处理方法。
  • 视图解析器(ViewResolver):根据逻辑视图名解析出具体的视图。
  • 视图(View):渲染数据并返回给客户端。

2. 请求处理流程

  1. 用户发送请求到 DispatcherServlet
  2. DispatcherServlet 根据 HandlerMapping 找到对应的处理器。
  3. HandlerAdapter 调用处理器的具体方法处理请求。
  4. 处理器返回逻辑视图名给 DispatcherServlet
  5. DispatcherServlet 根据 ViewResolver 解析出具体的视图。
  6. 视图渲染数据并返回给客户端。

总结

        通过本文的详细讲解,您应该已经掌握了 Spring MVC 的基本配置和请求处理流程。Spring MVC 以其简洁的配置和高效的处理机制,成为了 Java Web 开发中的主流框架之一。在实际项目中,您可以根据需求进一步扩展和优化配置,提升开发效率和系统性能。

相关文章:

  • SpringBoot 面试八股文
  • 基于@Scheduled注解(静态配置)实现定时任务
  • SQL调优
  • 搭建PG库和安装pgvector、pgRouting插件
  • uniapp 微信小程序图片下载保存功能
  • TypeScript 泛型 < T > 从入门到精通
  • 可视化图解算法:删除有序(排序)链表中重复的元素
  • 基于AOP注解+Redisson实现Cache-Aside缓存模式实战
  • 春日焕新居:约克VRF中央空调,科技赋能,带你开启健康呼吸新时代
  • 力扣题目分享:只出现1次的数字I II III(位运算版)
  • 宝塔docker flarum默认登录账号密码,crazymax/flarum镜像默认登录账号密码
  • 蓝桥杯算法题分享(二)
  • 从 Copilot 到垂直工具:AI 编程的 “专精特新“ 进化论
  • 用python写网络爬虫
  • 如何用Spring AI构建MCP Client-Server架构
  • 动手实践:单机安装高性能列式存储数据库ClickHouse
  • 根据模板将 Excel 明细数据生成 PDF 文档 | PDF实现邮件合并功能
  • 大数据学习(85)-Flume详解
  • mysql学习-索引规则
  • 蓝桥杯 回文字符串
  • 盘中五味和人生五味,北京人艺《天下第一楼》将演第600场
  • 失智老人有两个儿子却欠费住养老院两年多,法检合力指定监护人
  • 携程:今年第一季度营业收入约138亿元,入境旅游预订同比增长超100%
  • 马上评|去年维修竣工的鼓楼,今年就“瀑布式落瓦”
  • 俄罗斯哈巴罗夫斯克市首次举办“俄中论坛”
  • 《让世界爱中国》新书发布,探讨大变局下对外讲好中国故事