目录
引言
在 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. 请求处理流程
- 用户发送请求到
DispatcherServlet
。 DispatcherServlet
根据HandlerMapping
找到对应的处理器。HandlerAdapter
调用处理器的具体方法处理请求。- 处理器返回逻辑视图名给
DispatcherServlet
。 DispatcherServlet
根据ViewResolver
解析出具体的视图。- 视图渲染数据并返回给客户端。
总结
通过本文的详细讲解,您应该已经掌握了 Spring MVC 的基本配置和请求处理流程。Spring MVC 以其简洁的配置和高效的处理机制,成为了 Java Web 开发中的主流框架之一。在实际项目中,您可以根据需求进一步扩展和优化配置,提升开发效率和系统性能。