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

目录
相关文章
|
8天前
|
JSON Java Apache
非常实用的Http应用框架,杜绝Java Http 接口对接繁琐编程
UniHttp 是一个声明式的 HTTP 接口对接框架,帮助开发者快速对接第三方 HTTP 接口。通过 @HttpApi 注解定义接口,使用 @GetHttpInterface 和 @PostHttpInterface 等注解配置请求方法和参数。支持自定义代理逻辑、全局请求参数、错误处理和连接池配置,提高代码的内聚性和可读性。
|
17天前
|
前端开发 JavaScript 安全
前端性能调优:HTTP/2与HTTPS在Web加速中的应用
【10月更文挑战第27天】本文介绍了HTTP/2和HTTPS在前端性能调优中的应用。通过多路复用、服务器推送和头部压缩等特性,HTTP/2显著提升了Web性能。同时,HTTPS确保了数据传输的安全性。文章提供了示例代码,展示了如何使用Node.js创建一个HTTP/2服务器。
30 3
|
17天前
|
人工智能 前端开发 Java
基于开源框架Spring AI Alibaba快速构建Java应用
本文旨在帮助开发者快速掌握并应用 Spring AI Alibaba,提升基于 Java 的大模型应用开发效率和安全性。
基于开源框架Spring AI Alibaba快速构建Java应用
|
5天前
|
缓存 安全 网络安全
HTTP/2与HTTPS在Web加速中的应用
HTTP/2与HTTPS在Web加速中的应用
|
7天前
|
SQL 安全 前端开发
PHP与现代Web开发:构建高效的网络应用
【10月更文挑战第37天】在数字化时代,PHP作为一门强大的服务器端脚本语言,持续影响着Web开发的面貌。本文将深入探讨PHP在现代Web开发中的角色,包括其核心优势、面临的挑战以及如何利用PHP构建高效、安全的网络应用。通过具体代码示例和最佳实践的分享,旨在为开发者提供实用指南,帮助他们在不断变化的技术环境中保持竞争力。
|
10天前
|
SQL Java 数据库连接
从理论到实践:Hibernate与JPA在Java项目中的实际应用
本文介绍了Java持久层框架Hibernate和JPA的基本概念及其在具体项目中的应用。通过一个在线书店系统的实例,展示了如何使用@Entity注解定义实体类、通过Spring Data JPA定义仓库接口、在服务层调用方法进行数据库操作,以及使用JPQL编写自定义查询和管理事务。这些技术不仅简化了数据库操作,还显著提升了开发效率。
24 3
|
16天前
|
jenkins Java 测试技术
如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例详细说明
本文介绍了如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例,详细说明了从 Jenkins 安装配置到自动构建、测试和部署的全流程。文中还提供了一个 Jenkinsfile 示例,并分享了实践经验,强调了版本控制、自动化测试等关键点的重要性。
48 3
|
18天前
|
前端开发 安全 应用服务中间件
前端性能调优:HTTP/2与HTTPS在Web加速中的应用
【10月更文挑战第26天】随着互联网的快速发展,前端性能调优成为开发者的重要任务。本文探讨了HTTP/2与HTTPS在前端性能优化中的应用,介绍了二进制分帧、多路复用和服务器推送等特性,并通过Nginx配置示例展示了如何启用HTTP/2和HTTPS,以提升Web应用的性能和安全性。
17 3
|
18天前
|
SQL Java 数据库连接
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率。本文介绍了连接池的工作原理、优势及实现方法,并提供了HikariCP的示例代码。
32 3
|
18天前
|
前端开发 JavaScript API
前端框架新探索:Svelte在构建高性能Web应用中的优势
【10月更文挑战第26天】近年来,前端技术飞速发展,Svelte凭借独特的编译时优化和简洁的API设计,成为构建高性能Web应用的优选。本文介绍Svelte的特点和优势,包括编译而非虚拟DOM、组件化开发、状态管理及响应式更新机制,并通过示例代码展示其使用方法。
33 2