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

举报
TiAmoZhang 发表于 2023/04/18 13:36:28 2023/04/18
【摘要】 本文通过一个简单的Web应用来演示Spring MVC入门程序的实现过程。具体步骤如下。
简介: 本文通过一个简单的Web应用来演示Spring MVC入门程序的实现过程。具体步骤如下。


640.jpg


01、创建项目

创建一个名为springmvc的Maven项目。并加入相关依赖,具体如下:
d3faaa7a746b38f588423315db87676e.pngb96fc7bbfaccf95a51fa0bfd482a44c0.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 控制台输出的测试结果

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。