Spring MVC教程

2025年1月24日 | 6分钟阅读

Spring MVC是一个Java框架,用于构建Web应用程序。它遵循模型-视图-控制器(Model-View-Controller)设计模式。它实现了核心Spring框架的所有基本特性,如控制反转(Inversion of Control)和依赖注入(Dependency Injection)。

Spring MVC通过DispatcherServlet提供了一个优雅的解决方案,以便在Spring框架中使用MVC。其中,DispatcherServlet是一个接收传入请求并将其映射到正确的资源(如控制器、模型和视图)的类。

Spring Web 模型-视图-控制器

Spring MVC Tutorial
  • 模型(Model) - 模型包含应用程序的数据。数据可以是单个对象或对象集合。
  • 控制器(Controller) - 控制器包含应用程序的业务逻辑。在此,@Controller注解用于将类标记为控制器。
  • 视图(View) - 视图以特定格式表示提供的信息。通常,JSP+JSTL用于创建视图页面。尽管Spring也支持其他视图技术,如Apache Velocity、Thymeleaf和FreeMarker。
  • 前端控制器(Front Controller) - 在Spring Web MVC中,DispatcherServlet类充当前端控制器。它负责管理Spring MVC应用程序的流程。

理解Spring Web MVC的流程

Spring MVC Tutorial
  • 如图所示,所有传入的请求都被DispatcherServlet拦截,DispatcherServlet充当前端控制器。
  • DispatcherServlet从XML文件中获取处理程序映射的条目,并将请求转发到控制器。
  • 控制器返回ModelAndView对象。
  • DispatcherServlet检查XML文件中的视图解析器条目,并调用指定的视图组件。

Spring MVC框架的优点

让我们看看Spring MVC框架的一些优点:-

  • 角色分离 - Spring MVC分离了每个角色,其中模型对象、控制器、命令对象、视图解析器、DispatcherServlet、验证器等可以由专门的对象来实现。
  • 轻量级 - 它使用轻量级Servlet容器来开发和部署应用程序。
  • 强大的配置 - 它为框架和应用程序类提供了强大的配置,包括跨上下文的轻松引用,例如从Web控制器到业务对象和验证器。
  • 快速开发 - Spring MVC促进快速和平行开发。
  • 可重用的业务代码 - 它允许我们使用现有的业务对象,而不是创建新对象。
  • 易于测试 - 在Spring中,通常我们创建JavaBeans类,使您可以使用setter方法注入测试数据。
  • 灵活的映射 - 它提供了特定的注解,可以轻松地重定向页面。

Spring Web MVC框架示例

让我们看一个Spring Web MVC框架的简单例子。步骤如下:

  • 加载spring jar文件或在Maven的情况下添加依赖项
  • 创建控制器类
  • 在web.xml文件中提供控制器的入口
  • 在单独的XML文件中定义bean
  • 在JSP页面中显示消息
  • 启动服务器并部署项目

Spring MVC的目录结构

Spring MVC Tutorial

使用Maven的Spring MVC的目录结构

Spring MVC Tutorial

所需的Jar文件或Maven依赖项

要运行此示例,您需要加载

  • Spring Core jar 文件
  • Spring Web jar 文件
  • JSP + JSTL jar文件(如果您使用任何其他视图技术,请加载相应的jar文件)。

下载链接: 下载包括JSP和JSTL的所有Spring jar文件

如果您使用Maven,则无需添加jar文件。现在,您需要将Maven依赖项添加到pom.xml文件中。

1. 在pom.xml文件中提供项目信息和配置。

pom.xml

2. 创建控制器类

要创建控制器类,我们使用两个注解@Controller和@RequestMapping。

@Controller注解将此类标记为Controller。

@Requestmapping注解用于将类与指定的URL名称映射。

HelloController.java

3. 在web.xml文件中提供控制器的条目

在此xml文件中,我们指定Servlet类DispatcherServlet,它充当Spring Web MVC中的前端控制器。所有html文件的传入请求都将转发到DispatcherServlet。

web.xml

4. 在xml文件中定义bean

这是一个重要的配置文件,我们需要在其中指定视图组件。

context:component-scan元素定义了DispatcherServlet将搜索控制器类的基本包。

此xml文件应位于WEB-INF目录中。

spring-servlet.xml

5. 在JSP页面中显示消息

这是一个简单的JSP页面,显示控制器返回的消息。

index.jsp

输出

Spring MVC Tutorial


Spring MVC 索引



Spring MVC MCQ

1. 以下哪个是创建简单的Spring MVC应用程序的正确步骤顺序?

  1. 在pom.xml中添加依赖项,创建控制器,在XML中定义bean,创建JSP页面,配置web.xml,部署
  2. 创建控制器,配置web.xml,在XML中定义bean,在pom.xml中添加依赖项,创建JSP页面,部署
  3. 在XML中定义bean,创建控制器,在pom.xml中添加依赖项,配置web.xml,创建JSP页面,部署
  4. 在pom.xml中添加依赖项,在XML中定义bean,创建控制器,配置web.xml,创建JSP页面,部署

答案:a)

解释: 正确的顺序首先是添加必要的依赖项,然后创建控制器类,在XML文件中定义所需的bean,配置web.xml的DispatcherServlet,创建所需的JSP页面,最后部署应用程序。


2. 在Spring MVC中,InternalResourceViewResolver的目的是什么?

  1. 它通过将视图映射到外部URL来解析视图。
  2. 它基于控制器中提供的bean名称解析视图。
  3. 它将逻辑视图名称映射到实际的JSP文件位置。
  4. 它处理RESTful Web服务的视图解析。

答案:c)

解释: InternalResourceViewResolver将逻辑视图名称映射到位于指定目录中的实际JSP文件。这允许控制器返回视图名称,而无需指定完整路径。


3. 使用哪个标记库指令来启用JSP页面中的Spring MVC表单标记?

  1. <%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %>
  2. <%@ taglib uri="http://www.springframework.org/tags/mvc" prefix="mvc" %>
  3. <%@ taglib uri="http://www.springframework.org/tags/spring" prefix="spring" %>
  4. <%@ taglib uri="http://www.springframework.org/tags/jstl" prefix="c" %>

答案:a)

解释: Spring MVC表单标记库使用指令<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %>启用,这允许在JSP页面中使用表单标记,如<form:form>。


4. DispatcherServlet在Spring MVC应用程序中扮演什么角色?

  1. 它处理所有HTTP请求并将它们委托给适当的控制器。
  2. 它管理数据库连接和事务。
  3. 它执行依赖注入。
  4. 它充当视图解析器。

答案:a)

解释: DispatcherServlet是中心Servlet,它处理所有传入的HTTP请求,将它们委托给适当的控制器,并返回相应的视图。它充当Spring MVC框架中的前端控制器。


5. Spring MVC如何支持表单处理中的验证?

  1. 仅使用自定义验证注解。
  2. 通过使用@Valid注解以及BindingResult。
  3. 通过在控制器中手动编写验证逻辑。
  4. 通过使用JSP脚本进行验证。

答案:b)

解释: Spring MVC通过在表单支持对象上使用@Valid注解,然后在控制器中使用BindingResult对象检查验证错误来支持验证。它允许基于模型字段上的@NotNull、@Size等注解进行自动验证。


下一主题多视图页面