Java Web实战 | Spring MVC案例:设计一个简单的Web应用

简介: 本文通过一个简单的Web应用来演示Spring MVC入门程序的实现过程。具体步骤如下。
+关注继续查看

640.jpg

01、创建项目

创建一个名为springmvc的Maven项目。并加入相关依赖,具体如下:
d3faaa7a746b38f588423315db87676e.png
b96fc7bbfaccf95a51fa0bfd482a44c0.png

02、配置前端控制器

Spring MVC通过前端控制器拦截客户端请求并进行转发,因此在使用Spring MVC时,配置前端控制器是必不可少的一步。Spring MVC的前端控制器是一个Servlet,既可以在项目的web.xml文件中配置,又可以使用Java代码

在Servlet容器中配置。其中,web.xml文件的内容如文件1所示。
【文件1】web.xml

640.png


如文件1所示,第2行指定了前端控制器的名字,第4行指定前端控制器类的全限定名。第6~11行配置了前端控制器DispatcherServlet的初始化参数,即DispatcherServlet启动时要加载classpath路径下的springmvc-config.xml配置文件。第12行配置了元素,取值为1意味着在项目启动时立即加载DispatcherServlet。第16行的则规定了在项目运行时,Spring MVC会拦截所有请求,并交由DispatcherServlet处理。文件内容省去了元素和相关约束信息,这些内容可以从使用的Tomcat的{Tomcat}\webapps\examples目录下的相关文件中复制。

03、编写Spring MVC配置文件

在src/main/resources目录下创建一个名为springmvc-config.xml的配置文件,用于配置处理器映射信息和视图解析器,内容如文件2所示。
【文件2】springmvc-config.xml

640.png


如文件2所示,第10~11行通过设置<context:component-scan>元素来扫描相关的包。Spring容器会将包中所有的控制器加载到Spring MVC中。第13~19行配置视图解析器来解析视图,并将结果视图呈现给用户。其中第16行和第18行prefix属性名和suffix属性名分别代表查找视图页面的前缀和后缀。最终显示给用户的地址格式如下:视图页面的前缀+逻辑视图名+视图页面的后缀,其中逻辑视图名需要由处理请求的处理器指定。

04、创建控制器

在src/main/java目录下创建一个名为com.example.springmvc.controller的包。在包中创建控制器MyFirstController,用于处理客户端请求并指定逻辑视图名,具体内容如文件3所示。
【文件3】MyFirstController.java

640.png


如文件3所示,@Controller注解用于将MyFirstController类设置为控制器(第8行),当应用程序启动时结合Spring MVC配置文件的包扫描配置,该类会被实例化并作为控制器被注册到Spring MVC容器中;第11行用@RequestMapping注解设置当前处理器的访问映射地址;第12行定义handleRequest()方法处理请求,该方法可称为处理器;第14行调用了Model类的setAttribute()方法,向视图传递一个名为 msg 的属性,其值为“Hello,SpringMVC”;第15行用于设置逻辑视图名,结合Spring MVC的配置文件,将返回值与视图解析器的前后缀进行拼接以确定结果视图的最终路径,同时将结果视图解析后呈现给用户。

05、创建视图页面

在WEB-INF文件夹下创建名为jsp的文件夹,并在该文件夹下创建名为first.jsp的文件,用于生成视图,代码如文件4所示。
【文件4】first.jsp

640.png

06、测试

启动Tomcat服务器,在浏览器的地址栏输入“http://localhost:8080/springmvc/firstController”,向处理器MyFirstController发请求,浏览器会跳转到first.jsp页面,如图2所示。

640.png


■ 图2 浏览器显示结果

从Spring 3.2开始,Spring提供了一种Spring MVC Test测试框架(MockMVC),可以按照控制器的方式来测试Spring MVC中的控制器。MockMVC可以测试完整的Spring MVC请求处理流程,即从发送请求到处理器,直到视图渲染。这样,使得单元测试可以延伸到控制层。

MockMVC实现了对HTTP请求的模拟,能够直接使用网络的形式,转换到对控制器的调用。在测试控制器的时候,无须启动Web服务器和浏览器。MockMVC测试速度快、不依赖网络环境,而且提供了一套验证工具,这样可以使得请求的验证统一而且方便。测试用例可以保存并循环使用。

要使用MockMVC对控制器执行单元测试,需添加spring-test和JUnit的依赖,内容如下:

640.png


下面演示如何用MockMVC测试Spring MVC的控制器,测试代码如文件5所示。

【文件5】MyFirstControllerTest.java

b67ea8b64e914e7ff3a8c1891e9d3352.png


640.png


如文件5所示,第3行导入的MockMvc类是测试的主入口,其核心方法是perform(RequestBuilder rb),该方法会自动执行Spring MVC的流程并映射到相应的处理器处理请求,方法返回值是ResultActions。第4~10行导入相关的测试工具类。其中,MockMvcBuilders用来访问所有可以用来构建MockMvc实例的构建器;MockMvc-RequestBuiders类是用来构建HTTP请求的,其主要有两个子类MockHttpServlet-RequestBuilder和MockMultipartHttpServletRequestBuilder(文件上传使用)。MockMult-ipartHttpServletRequestBuilder可以用来模拟客户端请求需要的所有数据。MockMvc-ResultMatchers用于验证执行结果是否正确。MockMvcResultHandlers是结果处理器,提供了对测试结果将执行的操作。

MockMvc可以通过以下两种方式之一进行实例化。第一,直接指向要测试的控制器,并以编程方式配置Spring MVC,即使用StandaloneMockMvcBuilder实例化。第二,通过Spring配置,其中包含Spring MVC和控制器基础设置,即通过WebApplicationContext实例化。本案例使用第一种方式,指明被测试的控制器mc,如第17~19行所示。第20~21行利用perform()方法执行一个GET请求。第22~25行对相应的视图名称、状态码、模型属性及属性值等内容做出判定。第26行配置结果处理器,在控制台输出测试结果。

借助MockMvc,可以像测试普通Java类一样测试Spring MVC控制器。执行测试代码,在控制台上输出的测试结果如图3所示。

640.png


■ 图3 控制台输出的测试结果

目录
相关文章
|
3天前
|
Java 数据库连接 数据库
Spring 应用如何访问数据库,看这一篇就够了!
当我们开发应用时,访问数据库是一种常见的需求。 基本上所有需要持久化的数据,一般都存储在数据库中,例如常用的开源数据库 MySQL。 在今天的文章中,我将盘点一下 Java 应用访问数据的几种方式。
33417 6
|
6天前
|
Java 数据库连接 数据库
深入浅出:SPI 机制在 JDK 与 Spring Boot 中的应用
本文分享自华为云社区《Spring 高手之路 14—— 深入浅出:SPI 机制在 JDK 与 Spring Boot 中的应用》,作者:砖业洋__ 。 Spring Boot 不仅是简化 Spring 应用开发的工具,它还融合了许多先进的机制。本文深入探讨了 Spring Boot 中与 Java 的标准 SPI 相似的机制,揭示了它的工作原理、应用场景及与标准 SPI 的异同。文章通过实际代码示例为你展示了如何在 Spring Boot 中使用这一机制,并以形象的比喻帮助你理解其背后的思想
116 0
|
8天前
|
Java 数据库连接 数据库
Spring高手之路14——深入浅出:SPI机制在JDK与Spring Boot中的应用
Spring Boot不仅是简化Spring应用开发的工具,它还融合了许多先进的机制。本文深入探讨了Spring Boot中与Java的标准SPI相似的机制,揭示了它的工作原理、应用场景及与标准SPI的异同。文章通过实际代码示例为你展示了如何在Spring Boot中使用这一机制,并以形象的比喻帮助你理解其背后的思想。
96 0
Spring高手之路14——深入浅出:SPI机制在JDK与Spring Boot中的应用
|
24天前
|
JSON Java 数据库
Spring Data JPA构建Restful服务应用Demo
昨天介绍了什么是Rest和Restful,没有看到的同学可以参考我的这篇文章:深入理解REST与RESTfulAPI 那么说了这么多咱就实战一把,如何用SpringBoot来实现Rest,只需要Spring DataJPA和Spring Data Rest两个依赖包,快速开发一个restful应用。
|
1月前
|
Java 开发者 微服务
深入解析@SpringBootApplication注解:简化Spring Boot应用的配置
在现代的Java开发中,Spring Boot框架成为了构建微服务和快速开发应用的首选。Spring Boot的成功部分归功于其简化的配置和约定大于配置的理念。而`@SpringBootApplication`注解则是Spring Boot应用的入口,负责自动配置和启动Spring Boot应用。本文将深入探讨`@SpringBootApplication`注解的作用、用法,以及在Spring Boot应用中的应用场景。
74 0
|
1月前
|
Java 测试技术 开发者
深入解析Spring的IOC与AOP及其在项目中的应用
深入解析Spring的IOC与AOP及其在项目中的应用
83 1
|
1月前
|
缓存 监控 网络协议
【Spring Cloud系列】Hystrix应用详解
【Spring Cloud系列】Hystrix应用详解
13873 6
|
2月前
|
设计模式 缓存 算法
设计模式在Spring中的应用
设计模式在Spring中的应用
|
2月前
|
算法 Java Maven
Spring Boot 应用自动退出剖析
今天因技术群里的小伙伴们在请教关于 Spring Boot 微服务应用启动成功后自动退出问题,故特此顺便整理下,以供大家在实际的业务场景中能够有所借鉴及参考。
304 0
Spring Boot 应用自动退出剖析
|
2月前
|
缓存 Cloud Native 安全
对Spring的理解及其在现代应用中的重要性
Spring作为一个轻量级的开源框架,已经成为Java应用开发中不可或缺的重要组件。它提供了一种简单而强大的方式来构建企业级应用程序,并且具有高度可扩展性和灵活性。分享我对Spring的理解以及它在现代应用中的重要性。
59 0
相关产品
云迁移中心
推荐文章
更多