目录
一、Spring MVC工作原理
二、Spring MVC框架依赖
三、Spring MVC项目配置
四、Spring MVC框架配置
1、注解驱动配置
2、组件扫描包配置
3、视图解析器配置( spring - mvc.xml )
4、静态资源映射配置
五、Spring MVC示例
文件结构
代码实现
1、pom.xml
2、web.xml
3、spring-mvc-config.xml
4、HelloController.java
5、hello.jsp
六、Spring MVC控制器
1、控制器定义
2、请求映射注解
3、控制器方法的返回值
4、数据绑定与参数接收
一、Spring MVC工作原理

如图所示,所有传入的请求都被作为前台控制器的 DispatcherServlet 拦截。
 DispatcherServlet 从 XML 文件中获得一个处理程序映射的条目,并将请求转发给控制器。
 控制器返回一个 ModelAndView 的对象。
 DispatcherServlet 检查 XML 文件中的视图解析器条目并调用指定的视图组件。
二、Spring MVC框架依赖
pom.xml
<dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>版本号</version>
</dependency> 
 
三、Spring MVC项目配置
web.xml
<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:config/springmvc</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> 
 
四、Spring MVC框架配置
1、注解驱动配置
<mvc:annotation-driven/> 
2、组件扫描包配置
<context:component-scan base-package="com.example.controllers"/> 
标签扫描包含控制器等组件的包,让 Spring 能自动发现和注册这些组件。
3、视图解析器配置( spring - mvc.xml )
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/views/"/><property name="suffix" value=".jsp"/>
</bean> 
这表示逻辑视图名对应的 JSP 文件在/WEB-INF/views/ 目录下,且以.jsp 为后缀。
4、静态资源映射配置
<mvc:resources location="/resources/" mapping="/resources/**"/> 
表示将/resources/ 目录下的静态资源映射到/resources/** 路径供访问。
五、Spring MVC示例
文件结构
spring-mvc-simple-example
├── src
│   └── main
│       ├── java
│       │   └── com
│       │       └── example
│       │           └── controller
│       │               └── HelloController.java
│       ├── resources
│       │   └── spring-mvc-config.xml
│       └── webapp
│           └── WEB-INF
│               ├── web.xml
│               └── views
│                   └── hello.jsp
└── pom.xml
 
代码实现
1、
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-simple-example</artifactId><version>1.0-SNAPSHOT</version><packaging>war</packaging><dependencies><!-- Spring Web MVC --><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.3.28</version></dependency><!-- Servlet API --><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.1</version><scope>provided</scope></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>1.8</source><target>1.8</target></configuration></plugin><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>2、
web.xml<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee"xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"id="WebApp_ID"version="3.0"><servlet><servlet-name>dispatcher</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/spring-mvc-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>3、
spring-mvc-config.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"/><!-- 开启注解驱动 --><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>4、
HelloController.javapackage com.example.controller;import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody;@Controller public class HelloController {@RequestMapping("/hello")@ResponseBodypublic String hello() {return "Hello, Spring MVC!";} }5、
hello.jsp<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head><title>Hello Spring MVC</title> </head> <body><h1>Hello, Spring MVC!</h1> </body> </html>
六、Spring MVC控制器
1、控制器定义
        在 Spring MVC 中,通过在 Java 类上添加@Controller注解来标识该类为一个控制器。
package com.example.controller;import org.springframework.stereotype.Controller;@Controller
public class UserController {// 控制器方法将在这里定义
} 
2、请求映射注解
        /list方法处理/users/list的请求,/detail/{id}方法处理类似/users/detail/1这样带有路径参数的请求,@PathVariable注解用于将路径中的参数值绑定到方法的参数上。 
@Controller
@RequestMapping("/users")
public class UserController {@RequestMapping("/list")public String listUsers() {// 处理获取用户列表的业务逻辑return "userList"; // 返回逻辑视图名}@RequestMapping("/detail/{id}")public String userDetail(@PathVariable("id") int userId) {// 根据userId获取用户详情的业务逻辑return "userDetail";}
} 
