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

目录
相关文章
|
10月前
|
安全 Java 应用服务中间件
Spring Boot + Java 21:内存减少 60%,启动速度提高 30% — 零代码
通过调整三个JVM和Spring Boot配置开关,无需重写代码即可显著优化Java应用性能:内存减少60%,启动速度提升30%。适用于所有在JVM上运行API的生产团队,低成本实现高效能。
1124 3
|
10月前
|
监控 Java 数据库
从零学 Dropwizard:手把手搭轻量 Java 微服务,告别 Spring 臃肿
Dropwizard 整合 Jetty、Jersey 等成熟组件,开箱即用,无需复杂配置。轻量高效,启动快,资源占用少,内置监控、健康检查与安全防护,搭配 Docker 部署便捷,是构建生产级 Java 微服务的极简利器。
1029 117
|
9月前
|
安全 前端开发 Java
《深入理解Spring》:现代Java开发的核心框架
Spring自2003年诞生以来,已成为Java企业级开发的基石,凭借IoC、AOP、声明式编程等核心特性,极大简化了开发复杂度。本系列将深入解析Spring框架核心原理及Spring Boot、Cloud、Security等生态组件,助力开发者构建高效、可扩展的应用体系。(238字)
|
10月前
|
人工智能 Java API
构建基于Java的AI智能体:使用LangChain4j与Spring AI实现RAG应用
当大模型需要处理私有、实时的数据时,检索增强生成(RAG)技术成为了核心解决方案。本文深入探讨如何在Java生态中构建具备RAG能力的AI智能体。我们将介绍新兴的Spring AI项目与成熟的LangChain4j框架,详细演示如何从零开始构建一个能够查询私有知识库的智能问答系统。内容涵盖文档加载与分块、向量数据库集成、语义检索以及与大模型的最终合成,并提供完整的代码实现,为Java开发者开启构建复杂AI智能体的大门。
5551 58
|
9月前
|
前端开发 Java 微服务
《深入理解Spring》:Spring、Spring MVC与Spring Boot的深度解析
Spring Framework是Java生态的基石,提供IoC、AOP等核心功能;Spring MVC基于其构建,实现Web层MVC架构;Spring Boot则通过自动配置和内嵌服务器,极大简化了开发与部署。三者层层演进,Spring Boot并非替代,而是对前者的高效封装与增强,适用于微服务与快速开发,而深入理解Spring Framework有助于更好驾驭整体技术栈。
|
9月前
|
消息中间件 缓存 Java
Spring框架优化:提高Java应用的性能与适应性
以上方法均旨在综合考虑Java Spring 应该程序设计原则, 数据库交互, 编码实践和系统架构布局等多角度因素, 旨在达到高效稳定运转目标同时也易于未来扩展.
791 8
|
Web App开发 存储 Java
Spring Web应用的最大瑕疵
Spring Web应用的最大瑕疵 众所周知, 现在的Spring框架已经成为构建企业级Java应用事实上的标准了,众多的企业项目都构建在Spring项目及其子项目之上,特别是Java Web项目,很多都使用了Spring并且遵循着Web、Service、Dao这样的分层原则,下层向上层提供服务;不过Petri Kainulainen在其博客中却指出了众多Spring Web应用的最大瑕疵,请继续阅读看看文中所提到的问题是否也出现在你的项目当中。
970 0
|
Java Spring 容器
SpringBoot自动配置的原理是什么?
Spring Boot自动配置核心在于@EnableAutoConfiguration注解,它通过@Import导入配置选择器,加载META-INF/spring.factories中定义的自动配置类。这些类根据@Conditional系列注解判断是否生效。但Spring Boot 3.0后已弃用spring.factories,改用新格式的.imports文件进行配置。
1425 0
|
人工智能 Java 测试技术
Spring Boot 集成 JUnit 单元测试
本文介绍了在Spring Boot中使用JUnit 5进行单元测试的常用方法与技巧,包括添加依赖、编写测试类、使用@SpringBootTest参数、自动装配测试模块(如JSON、MVC、WebFlux、JDBC等),以及@MockBean和@SpyBean的应用。内容实用,适合Java开发者参考学习。
1334 0
|
前端开发 Java 数据库
微服务——SpringBoot使用归纳——Spring Boot集成Thymeleaf模板引擎——Thymeleaf 介绍
本课介绍Spring Boot集成Thymeleaf模板引擎。Thymeleaf是一款现代服务器端Java模板引擎,支持Web和独立环境,可实现自然模板开发,便于团队协作。与传统JSP不同,Thymeleaf模板可以直接在浏览器中打开,方便前端人员查看静态原型。通过在HTML标签中添加扩展属性(如`th:text`),Thymeleaf能够在服务运行时动态替换内容,展示数据库中的数据,同时兼容静态页面展示,为开发带来灵活性和便利性。
584 0

热门文章

最新文章