Spring MVC 配置详解与入门案例

发布于:2025-03-26 ⋅ 阅读:(32) ⋅ 点赞:(0)

目录

引言

一、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 开发中的主流框架之一。在实际项目中,您可以根据需求进一步扩展和优化配置,提升开发效率和系统性能。