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 控制台输出的测试结果

目录
相关文章
|
1月前
|
人工智能 安全 Java
Java和Python在企业中的应用情况
Java和Python在企业中的应用情况
52 7
|
2天前
|
安全 算法 Java
Java CAS原理和应用场景大揭秘:你掌握了吗?
CAS(Compare and Swap)是一种乐观锁机制,通过硬件指令实现原子操作,确保多线程环境下对共享变量的安全访问。它避免了传统互斥锁的性能开销和线程阻塞问题。CAS操作包含三个步骤:获取期望值、比较当前值与期望值是否相等、若相等则更新为新值。CAS广泛应用于高并发场景,如数据库事务、分布式锁、无锁数据结构等,但需注意ABA问题。Java中常用`java.util.concurrent.atomic`包下的类支持CAS操作。
18 2
|
8天前
|
设计模式 前端开发 Java
步步深入SpringMvc DispatcherServlet源码掌握springmvc全流程原理
通过对 `DispatcherServlet`源码的深入剖析,我们了解了SpringMVC请求处理的全流程。`DispatcherServlet`作为前端控制器,负责请求的接收和分发,处理器映射和适配负责将请求分派到具体的处理器方法,视图解析器负责生成和渲染视图。理解这些核心组件及其交互原理,有助于开发者更好地使用和扩展SpringMVC框架。
23 4
|
5天前
|
Java
Java基础却常被忽略:全面讲解this的实战技巧!
本次分享来自于一道Java基础的面试试题,对this的各种妙用进行了深度讲解,并分析了一些关于this的常见面试陷阱,主要包括以下几方面内容: 1.什么是this 2.this的场景化使用案例 3.关于this的误区 4.总结与练习
|
22天前
|
XML Java 数据格式
Spring Core核心类库的功能与应用实践分析
【12月更文挑战第1天】大家好,今天我们来聊聊Spring Core这个强大的核心类库。Spring Core作为Spring框架的基础,提供了控制反转(IOC)和依赖注入(DI)等核心功能,以及企业级功能,如JNDI和定时任务等。通过本文,我们将从概述、功能点、背景、业务点、底层原理等多个方面深入剖析Spring Core,并通过多个Java示例展示其应用实践,同时指出对应实践的优缺点。
48 14
|
20天前
|
XML 前端开发 安全
Spring MVC:深入理解与应用实践
Spring MVC是Spring框架提供的一个用于构建Web应用程序的Model-View-Controller(MVC)实现。它通过分离业务逻辑、数据、显示来组织代码,使得Web应用程序的开发变得更加简洁和高效。本文将从概述、功能点、背景、业务点、底层原理等多个方面深入剖析Spring MVC,并通过多个Java示例展示其应用实践,同时指出对应实践的优缺点。
48 2
|
24天前
|
缓存 Java 开发者
Java多线程并发编程:同步机制与实践应用
本文深入探讨Java多线程中的同步机制,分析了多线程并发带来的数据不一致等问题,详细介绍了`synchronized`关键字、`ReentrantLock`显式锁及`ReentrantReadWriteLock`读写锁的应用,结合代码示例展示了如何有效解决竞态条件,提升程序性能与稳定性。
98 6
|
22天前
|
Java 程序员
Java基础却常被忽略:全面讲解this的实战技巧!
小米,29岁程序员,分享Java中`this`关键字的用法。`this`代表当前对象引用,用于区分成员变量与局部变量、构造方法间调用、支持链式调用及作为参数传递。文章还探讨了`this`在静态方法和匿名内部类中的使用误区,并提供了练习题。
22 1
|
23天前
|
监控 Java 数据库连接
Java线程管理:守护线程与用户线程的区分与应用
在Java多线程编程中,线程可以分为守护线程(Daemon Thread)和用户线程(User Thread)。这两种线程在行为和用途上有着明显的区别,了解它们的差异对于编写高效、稳定的并发程序至关重要。
29 2
|
29天前
|
JSON 安全 算法
Spring Boot 应用如何实现 JWT 认证?
Spring Boot 应用如何实现 JWT 认证?
66 8