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

Spring MVC 入门:构建 Web 应用的核心框架

Spring MVC 入门:构建 Web 应用的核心框架

一个基于 Spring 框架的强大 Web 开发模块。作为 Java 企业开发的热门选择,Spring MVC 以其灵活性、模块化和与 Spring 生态的无缝集成,深受开发者喜爱。本文将带你从零开始,基于 XML 配置方式搭建一个简单的 Spring MVC 项目,帮助初学者快速上手,同时为有经验的开发者提供复习和进阶建议。

Spring MVC 基于 MVC(Model-View-Controller)设计模式,适合构建 RESTful API 或传统的 Web 应用。本文基于 Spring 5.x(兼容 Spring 6),使用 Maven 构建,涵盖控制器、视图解析和静态资源处理等核心概念。让我们一步步实现一个简单的用户查询页面!

前置准备

开始之前,请确保开发环境准备好:

  • JDK:推荐 JDK 8 或更高(本文使用 JDK 17 测试通过)。
  • Maven:用于依赖管理,确保配置好环境变量。
  • IDE:IntelliJ IDEA 或 Eclipse,方便代码调试。
  • Web 服务器:内置 Tomcat 或 Jetty(本文用 Tomcat 9)。
  • 项目结构:创建一个 Maven Web 项目,目录如下:
    src
    ├── main
    │   ├── java
    │   │   └── com.example
    │   │       ├── controller
    │   │       ├── model
    │   │       └── service
    │   ├── resources
    │   │   └── applicationContext.xml  // Spring 配置文件
    │   └── webapp
    │       ├── WEB-INF
    │       │   ├── views              // JSP 视图
    │       │   └── web.xml           // Servlet 配置
    │       └── static                // 静态资源(CSS, JS)
    └── test└── java
    

在 IDE 中创建 Maven Web 项目(archetype: maven-archetype-webapp),然后按以下步骤配置。

步骤 1: 引入 Maven 依赖

Spring MVC 需要核心的 spring-webmvc 模块,以及 Servlet API 支持。我们还引入 spring-context 确保 IoC 容器功能。以下是 pom.xml 配置:

<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.example</groupId><artifactId>spring-mvc-demo</artifactId><version>1.0-SNAPSHOT</version><packaging>war</packaging><dependencies><!-- Spring MVC 核心依赖 --><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.3.39</version></dependency><!-- Spring 核心依赖:IoC 容器 --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.3.39</version></dependency><!-- Servlet API:Web 应用必需 --><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.1</version><scope>provided</scope></dependency><!-- JSP 支持:视图渲染 --><dependency><groupId>javax.servlet</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency></dependencies><build><plugins><!-- Maven Tomcat 插件:运行 Web 应用 --><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.2</version><configuration><port>8080</port><path>/</path></configuration></plugin></plugins></build>
</project>

说明

  • spring-webmvc:包含 DispatcherServlet、控制器等核心组件。
  • javax.servlet-api:Servlet 规范,设为 provided 避免打包到 WAR。
  • jstl:支持 JSP 页面动态渲染。
  • Tomcat 插件:便于本地运行,执行 mvn tomcat7:run 启动。
  • 版本提示:Spring 6.x 需 JDK 17+,如用老项目,保持 5.x。

步骤 2: 配置 Web.xml 和 Spring MVC

Spring MVC 的核心是 DispatcherServlet,它拦截请求并分发到控制器。我们需要配置 web.xml 和 Spring MVC 配置文件。

配置 web.xml

src/main/webapp/WEB-INF/web.xml 中配置 DispatcherServlet:

<?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"><!-- 配置 DispatcherServlet --><servlet><servlet-name>springMVC</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext.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><!-- 编码过滤器:处理中文乱码 --><filter><filter-name>encodingFilter</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></filter><filter-mapping><filter-name>encodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>
</web-app>

要点

  • DispatcherServlet:Spring MVC 前端控制器,处理所有请求。
  • contextConfigLocation:指定 Spring 配置文件路径。
  • CharacterEncodingFilter:解决 POST 请求中文乱码问题。

配置 Spring MVC(applicationContext.xml)

src/main/resources/applicationContext.xml 中配置 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.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"><!-- 扫描控制器包 --><context:component-scan base-package="com.example.controller"/><!-- 启用 MVC 注解支持 --><mvc:annotation-driven/><!-- 视图解析器:JSP --><bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/views/"/><property name="suffix" value=".jsp"/></bean><!-- 静态资源处理 --><mvc:resources mapping="/static/**" location="/static/"/>
</beans>

解析

  • <context:component-scan>:扫描 @Controller 注解的类。
  • <mvc:annotation-driven>:启用 @RequestMapping 等注解。
  • InternalResourceViewResolver:将逻辑视图名映射为 JSP 文件(如 user 映射为 /WEB-INF/views/user.jsp)。
  • <mvc:resources>:允许访问 /static/ 下的 CSS、JS 等。

步骤 3: 创建模型和控制器

模型类

定义简单的 User 模型(com.example.model.User):

package com.example.model;public class User {private String name;private int age;public User(String name, int age) {this.name = name;this.age = age;}// Getters and Setterspublic String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}
}

控制器类

创建 UserControllercom.example.controller.UserController)处理请求:

package com.example.controller;import com.example.model.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;@Controller
@RequestMapping("/user")
public class UserController {@RequestMapping(value = "/list", method = RequestMethod.GET)public String listUsers(Model model) {// 模拟数据User user = new User("Alice", 25);model.addAttribute("user", user);return "user"; // 映射到 /WEB-INF/views/user.jsp}
}

说明

  • @Controller:标记为 Spring MVC 控制器。
  • @RequestMapping:映射 URL(如 /user/list)。
  • Model:传递数据到视图。

步骤 4: 创建 JSP 视图

src/main/webapp/WEB-INF/views/user.jsp 创建视图:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>User List</title><link rel="stylesheet" href="/static/css/style.css"/>
</head>
<body><h2>User Information</h2><p>Name: ${user.name}</p><p>Age: ${user.age}</p>
</body>
</html>

静态资源(可选)

src/main/webapp/static/css/style.css 添加样式:

body {font-family: Arial, sans-serif;margin: 20px;
}
h2 {color: #333;
}

步骤 5: 运行和测试

  1. 执行 mvn clean install 编译项目。
  2. 运行 mvn tomcat7:run 启动 Tomcat。
  3. 访问 http://localhost:8080/user/list,应显示:
    User Information
    Name: Alice
    Age: 25
    

调试技巧

  • 404 错误:检查 web.xml 的 URL 映射或控制器路径。
  • JSP 不渲染:确认视图解析器路径和 JSP 文件位置。
  • 日志:添加 log4j 依赖查看详细日志。

进阶与最佳实践

  • 注解优先:现代项目用 @RestController 替代 JSP,适合 REST API。
  • Spring Boot 简化:用 @SpringBootApplication 自动配置,省去 XML。
  • 拦截器:添加 HandlerInterceptor 处理认证、日志等。
  • 异常处理:用 @ControllerAdvice 统一处理异常。
  • 资源推荐:Spring 官网、书籍《Spring in Action》。实践多做 RESTful 示例。

总结

通过这个 Spring MVC 示例,你学会了配置 DispatcherServlet、控制器、视图解析器,并实现了一个简单的 Web 页面。XML 配置虽然稍显繁琐,但能帮助你理解 Spring MVC 的核心机制。

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

相关文章:

  • C 语言核心关键字与数据结构:volatile、struct、union 详解
  • 【Elasticsearch面试精讲 Day 19】磁盘IO与存储优化
  • Linux信号机制详解
  • 【杂谈】-儿童友好型AI的未来之路
  • Docker+cpolar 实战:打造灵活可控的远程办公系统——容器化 RDP 远程桌面与多因子安全治理
  • docker远程主机启用TLS及其在JAVA工程的应用
  • docker 安装 Postgres 17.6
  • 【Linux命令从入门到精通系列指南】poweroff 命令详解:安全关机与强制断电实战指南
  • 【文件上传管理系统】实战详解 SpringBoot + Vue.js
  • 软考中级习题与解答——第八章_计算机网络(3)
  • 【每日一问】PFC电路有什么作用?
  • 智能制造设备健康管理案例:AIoT技术驱动的工业设备智能运维革命​
  • Rd-03_V2 雷达模块【上手使用指南】
  • PD 分离推理架构详解
  • 重庆蓝金领科技培训评价如何
  • 【TS3】搭建本地开发环境
  • MR、AR、VR:技术浪潮下安卓应用的未来走向
  • React搭建应用
  • NVIDIA Dynamo 推理框架
  • 校园网即点即连——校园网自动登录的思路流程
  • C# 设计模式|单例模式全攻略:从基础到高级实现与防御
  • SQL 字符串函数高频考点:LIKE 和 SUBSTRING 的区别
  • 法律文档智能分析系统:NLP+法律知识库的技术实现方案
  • Flutter_学习记录_实现商品详情页Tab点击跳转对应锚点的demo
  • 【大语言模型】作为可微分搜索索引的Transformer记忆体
  • NLP---自然语言处理
  • 多条件查询中的日期交互指南:从前端到后端的顺畅协作
  • 系分论文《论人工智能在网络安全态势感知系统中的分析与设计》
  • 【Kubernetes】(六)Service
  • Coze源码分析-资源库-删除工作流-后端源码-核心技术与总结