目录
一、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.java
package 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";}
}