SpringMVC 配置详解

embedded/2025/3/27 11:08:41/

SpringMVC 是 Spring 框架中用于构建 Web 应用程序的模块,它基于 MVC(Model-View-Controller)设计模式,能够将业务逻辑、数据和显示分离,从而提高代码的可维护性和可扩展性。本文将详细介绍 SpringMVC 的配置步骤和相关要点。

一、SpringMVC 简介

SpringMVC 是 Spring 框架的一部分,它提供了对 MVC 架构的支持,使得开发 Web 应用更加高效和灵活。在 SpringMVC 中,控制器(Controller)负责处理用户请求,并调用相应的业务逻辑;模型(Model)用于存储数据;视图(View)则负责将数据以适当的格式展示给用户。

二、SpringMVC 配置步骤

1. 创建 Maven 项目

首先,创建一个 Maven 项目,这样可以方便地管理项目的依赖。在项目的 pom.xml 文件中,添加 SpringMVC 所需的依赖项,包括 Spring 框架、Servlet API 等。例如:

<dependencies><!-- Spring MVC 依赖 --><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.2.12.RELEASE</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.xml 文件中,需要配置 SpringMVC 的前端控制器 DispatcherServlet。这个控制器是 SpringMVC 的核心,它负责接收和分发用户请求。配置示例如下:

<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/javaeehttp://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><!-- 配置 SpringMVC 前端控制器 --><servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!-- 可选:指定 SpringMVC 配置文件的位置 --><init-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/springmvc-servlet.xml</param-value></init-param><!-- 启动时加载 --><load-on-startup>1</load-on-startup></servlet><!-- 配置前端控制器的映射 --><servlet-mapping><servlet-name>springmvc</servlet-name><url-pattern>/</url-pattern></servlet-mapping></web-app>

在这里,<servlet-name> 是前端控制器的名称,可以自定义;<servlet-class> 指定了前端控制器的类;<init-param> 用于指定 SpringMVC 配置文件的位置,如果不配置该参数,则默认在 /WEB-INF/[servlet-name]-servlet.xml 文件中查找配置;<load-on-startup> 表示在服务器启动时加载该 Servlet;<url-pattern> 配置了前端控制器的映射路径,这里配置为 /,表示拦截所有请求。

3. 创建 SpringMVC 配置文件

在上面的配置中,我们指定了 SpringMVC 配置文件的位置为 /WEB-INF/springmvc-servlet.xml。现在需要创建这个文件,并在其中进行相关的配置。例如:

<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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsd"><!-- 扫描控制器所在的包 --><context:component-scan base-package="com.example.controller" /><!-- 启用 SpringMVC 的注解驱动 --><mvc:annotation-driven /><!-- 配置视图解析器 --><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/views/" /><property name="suffix" value=".jsp" /></bean></beans>

在该配置文件中,<context:component-scan> 用于扫描控制器所在的包,以便 Spring 能够自动检测和管理控制器类;<mvc:annotation-driven> 启用了 SpringMVC 的注解驱动,这样可以使用 @Controller@RequestMapping 等注解来定义控制器和请求映射;<bean> 定义了一个视图解析器,用于将逻辑视图名解析为实际的视图页面路径,这里配置了 JSP 页面的前缀和后缀路径。

4. 创建控制器类

接下来,创建一个控制器类,并使用 Spring 的注解进行标记和定义请求映射。例如:

package com.example.controller;import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;@Controller
public class HelloController {@RequestMapping("/hello")public String hello(Model model) {model.addAttribute("message", "Hello, SpringMVC!");return "hello";}
}

在这个控制器类中,@Controller 注解表明该类是一个控制器;@RequestMapping 注解用于定义请求的映射路径,当用户访问 /hello 路径时,将调用 hello 方法;Model 参数用于将数据传递到视图页面,在方法中通过 model.addAttribute 将数据添加到模型中;return "hello"; 表示逻辑视图名,视图解析器会根据配置将其解析为 /WEB-INF/views/hello.jsp

5. 创建视图页面

根据上面的配置和控制器代码,创建一个 JSP 页面作为视图。在项目的 WEB-INF/views/ 目录下创

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Hello Page</title>
</head>
<body><h1>${message}</h1>
</body>
</html>

这个 JSP 页面通过 ${message} 获取模型中的数据并展示在页面上。

6. 部署和测试

完成以上配置后,将项目部署到服务器(如 Tomcat)上,启动服务器并访问 http://localhost:8080/your-project-name/hello,应该能看到页面显示 "Hello, SpringMVC!",说明 SpringMVC 配置成功。

三、SpringMVC 配置要点总结

  1. 项目依赖:确保在 pom.xml 中正确添加了 SpringMVC 和相关依赖。

  2. 前端控制器配置:在 web.xml 中配置 DispatcherServlet,并设置其映射路径和配置文件位置。

  3. SpringMVC 配置文件:在配置文件中扫描控制器包、启用注解驱动、配置视图解析器等。

  4. 控制器开发:使用注解定义控制器类和请求映射,处理用户请求并返回视图。

  5. 视图页面:根据视图解析器的配置创建相应的视图页面,展示数据。

四、高级配置(可选)

1. 视图解析器的多样化配置

除了常用的 InternalResourceViewResolver 外,还可以根据需要配置其他类型的视图解析器,如 BeanNameViewResolverResourceBundleViewResolver 等,以满足不同的视图解析需求。

2. 文件上传配置

在 SpringMVC 中,可以通过配置 MultipartResolver 来支持文件上传功能。例如:

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"><property name="maxUploadSize" value="10485760" /> <!-- 设置最大上传大小为10MB -->
</bean>

同时,在控制器中使用 @RequestParam 注解接收上传的文件。

3. 拦截器配置

SpringMVC 支持拦截器的配置,用于在请求处理前后执行一些公共逻辑,如权限验证、日志记录等。配置拦截器需要在 SpringMVC 配置文件中定义拦截器链:

<mvc:interceptors><bean class="com.example.interceptor.LoggingInterceptor" />
</mvc:interceptors>

然后创建拦截器类,实现 HandlerInterceptor 接口,并重写 preHandlepostHandleafterCompletion 等方法。

五、总结

通过以上步骤,我们详细介绍了 SpringMVC 的配置过程,从项目依赖的添加到前端控制器的配置,再到控制器、视图解析器等的设置,每一步都进行了清晰的讲解。SpringMVC 的配置虽然有一定的复杂性,但只要理解了其核心原理和配置要点,就能灵活地运用它来开发高效、灵活的 Web 应用程序。在实际开发中,还可以根据项目需求进行更高级的配置和扩展,以满足各种复杂的业务场景。


http://www.ppmy.cn/embedded/176671.html

相关文章

基础算法02——冒泡排序(Bubble Sort)

冒泡排序&#xff08;Bubble Sort&#xff09; 冒泡排序&#xff1a;是一种简单的排序算法&#xff0c;其基本思想是通过重复遍历要排序的列表&#xff0c;比较相邻的元素&#xff0c;并在必要时&#xff08;即前面的数比后面的数大的时候&#xff09;交换它们的位置&#xff…

tcpdump-快速查询版-常用后缀

文章目录 1. 安装Tcpdump2. Tcpdump命令语法3. 捕获特定接口的数据包 -i4. 预设捕获数据包数量 -c5. 获取详细输出 -v6. 以ASCII格式打印捕获的数据 -A7. 捕获特定源IP的数据包 src8. 捕获发往特定目标IP的数据包 dst9. 根据端口号过滤 port10. 根据协议过滤 proto11. 根据主机…

两个常用的用于读写和操作DXF文件C#库:netDxf 和 DXF.NET

netDxf 和 DXF.NET 是两个常用的C#库&#xff0c;用于读取、写入和操作DXF文件。以下是它们的详细介绍和用法示例。 1. netDxf 简介 netDxf 是一个开源的DXF文件读写库&#xff0c;支持AutoCAD DXF格式的读取和写入。它支持大多数DXF实体和对象&#xff0c;并且易于使用。 Gi…

涨薪技术|Docker容器数据管理

在生产环境中使用Docker时&#xff0c;经常需要对数据进行持久化&#xff0c;这就有点像Redis里面的持久性一样的&#xff0c;或者需要在多个容器之间在进行数据共享&#xff0c;这就是Docker中我们说的数据管理操作。 容器中管理数据主要有两种方式&#xff1a; 数据卷(Data …

RabbitMQ的高级特性介绍(二)

发送方确认 当消息的⽣产者将消息发送出去之后&#xff0c;消息到底有没有正确地到达服务器呢? 如果在消息到 达服务器之前已经丢失(比如RabbitMQ重启, 那么RabbitMQ重启期间⽣产者消息投递失败), 持久化操作也解决不了这个问题&#xff0c;因为消息根本没有到达服务器&#…

Bash 脚本基础

一、Bash 脚本基础 什么是 Bash 脚本&#xff1a;Bash 脚本是一种文本文件&#xff0c;其中包含了一系列的命令&#xff0c;这些命令可以被 Bash shell 执行。它用于自动化重复性的任务&#xff0c;提高工作效率。 Bash 脚本的基本结构&#xff1a;以 #!/bin/bash 开头&#x…

MyBatis-Plus(Ⅲ)IService详解

目录 一、逐一演示 1.save&#xff08;插入一条&#xff09; 结果 断言&#xff08;引入概念&#xff09; 2.saveBatch&#xff08;批量插入&#xff09; 结果 3.saveOrUpdateBatch&#xff08;批量插入&更新&#xff09; 结果 4.removeById&#xff08;通过id删除…

VUE2导出el-table数据为excel并且按字段分多个sheet

首先在根目录下建一个文件夹export用来存储export.js import * as XLSX from xlsxfunction autoWidthFunc(ws, data) {// 设置每列的最大宽度const colWidth data.map(row > row.map(val > {var reg new RegExp([\\u4E00-\\u9FFF], g) // 检测字符串是否包含汉字if (v…