Spring Boot 中的 WebMvc 是什么,原理,如何使用

Spring Boot 中的 WebMvc 是什么,原理,如何使用

介绍

在 Spring Boot 中,WebMvc 是非常重要的一个模块。它提供了一系列用于处理 Web 请求的组件和工具。在本文中,我们将介绍 Spring Boot 中的 WebMvc 是什么,其原理以及如何使用它来处理 Web 请求。

在这里插入图片描述

WebMvc 是什么

WebMvc 是 Spring 框架中的一个模块,它提供了一系列用于处理 Web 请求的组件和工具。它包括了诸如控制器、视图解析器、拦截器、数据绑定器等一系列的组件和工具,可以帮助开发者快速地开发 Web 应用程序。

在 Spring Boot 中,WebMvc 是一个默认的模块,它提供了许多默认配置和便利的注释,可以使 Web 应用程序的开发更加方便和快速。

WebMvc 的原理

WebMvc 的原理非常简单。它主要是通过控制器、视图解析器、拦截器、数据绑定器等一系列组件和工具来处理 Web 请求。下面我们将介绍一下这些组件和工具的作用。

控制器

控制器是 WebMvc 中最重要的组件之一。控制器负责接收和处理 Web 请求,并将结果返回给客户端。控制器可以使用注释或实现特定接口来定义。例如,以下代码演示了如何使用 @Controller 注释定义一个控制器:

@Controller
public class MyController {@GetMapping("/hello")public String hello() {return "hello";}}

在上面的代码中,我们使用 @Controller 注释定义了一个名为 MyController 的控制器。控制器中的 hello() 方法使用 @GetMapping 注释来处理 GET 请求,并返回一个名为 “hello” 的视图。

视图解析器

视图解析器负责将控制器返回的逻辑视图名称解析为实际的视图。在 Spring Boot 中,默认使用 Thymeleaf 作为视图解析器。您可以使用 @Controller 或 @RestController 注释中的 @ResponseBody 注释来返回 JSON 或 XML 格式的数据。例如,以下代码演示了如何使用 Thymeleaf 视图解析器:

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {@Beanpublic ViewResolver viewResolver() {ThymeleafViewResolver resolver = new ThymeleafViewResolver();resolver.setTemplateEngine(templateEngine());resolver.setCharacterEncoding("UTF-8");return resolver;}@Beanpublic SpringTemplateEngine templateEngine() {SpringTemplateEngine engine = new SpringTemplateEngine();engine.setTemplateResolver(templateResolver());return engine;}@Beanpublic ClassLoaderTemplateResolver templateResolver() {ClassLoaderTemplateResolver resolver = new ClassLoaderTemplateResolver();resolver.setPrefix("templates/");resolver.setSuffix(".html");resolver.setTemplateMode(TemplateMode.HTML);resolver.setCharacterEncoding("UTF-8");resolver.setCacheable(false);return resolver;}}

在上面的代码中,我们使用 Thymeleaf 视图解析器来解析控制器返回的视图。视图解析器使用 Thymeleaf 模板引擎来处理 HTML 模板,并将其渲染为实际的视图。

拦截器

拦截器是 WebMvc 中的一个重要组件,它可以在处理 Web 请求之前或之后执行某些操作。例如,您可以使用拦截器来记录请求日志、检查用户身份验证等。以下代码演示了如何使用拦截器:

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new MyInterceptor());}private class MyInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {// 在处理请求之前执行return true;}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {// 在处理请求之后执行}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {// 在请求完成后执行}}}

在上面的代码中,我们创建了一个 MyInterceptor 拦截器,并将其添加到了拦截器注册表中。拦截器中的 preHandle() 方法将在处理请求之前执行,postHandle() 方法将在处理请求之后执行,而 afterCompletion() 方法将在请求完成后执行。

数据绑定器

数据绑定器是 WebMvc 中的一个重要组件,它可以将请求参数绑定到控制器中的方法参数上。Spring Boot 中,使用 @RequestParam 或 @PathVariable 注释来绑定请求参数。例如,以下代码演示了如何使用 @RequestParam 注释来绑定请求参数:

@Controller
public class MyController {@GetMapping("/hello")public String hello(@RequestParam("name") String name, Model model) {model.addAttribute("name", name);return "hello";}}

在上面的代码中,我们使用 @RequestParam 注释将请求参数 “name” 绑定到控制器中的方法参数 name 上,并将其添加到模型中。

如何使用 WebMvc

在 Spring Boot 中,WebMvc 是一个默认的模块,可以直接使用。如果需要自定义 WebMvc 的配置,可以使用 @Configuration 注释和实现 WebMvcConfigurer 接口来实现。例如,以下代码演示了如何自定义 WebMvc 的配置:

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");}@Overridepublic void addViewControllers(ViewControllerRegistry registry) {registry.addViewController("/").setViewName("index");}}

在上面的代码中,我们创建了一个 WebMvcConfig 类,并使用 @Configuration 注释将其标记为配置类。我们还实现了 WebMvcConfigurer 接口,并重写了其中的两个方法:addResourceHandlers() 和 addViewControllers()。addResourceHandlers() 方法将静态资源目录 “/static/” 映射到 classpath 下的 static 目录,而 addViewControllers() 方法将 “/” 路径映射到名为 “index” 的视图。

总结

在本文中,我们介绍了 Spring Boot 中的 WebMvc 是什么,其原理以及如何使用它来处理 Web 请求。WebMvc 是一个非常重要的模块,它提供了一系列用于处理 Web 请求的组件和工具。通过掌握 WebMvc 的原理和使用方法,开发者可以更加方便和快速地开发 Web 应用程序。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/2155.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

“配置DHCP Snooping实验:保护网络中的DHCP服务和防止欺骗攻击“

"配置DHCP Snooping实验:保护网络中的DHCP服务和防止欺骗攻击" 【实验目的】 部署DHCP服务器。熟悉DHCP Snooping的配置方法。验证拓扑。 【实验拓扑】 实验拓扑如图所示。 设备参数如下表所示。 设备 接口 IP地址 子网掩码 默认网关 R1 F0/0 …

vue element UI在button按钮使用 @keyup.enter不生效

如图所示,没效果。在按钮上绑定keyup事件,加上.native覆盖原有封装的keyup事件 解决办法 created () {document.onkeyup e > {if (e.keyCode 13 && e.target.baseURI.match(/login/)) {// 调用登录 验证方法this.submitForm()}}}成功解决&…

MySQL子查询

😇作者介绍:一个有梦想、有理想、有目标的,且渴望能够学有所成的追梦人。 🎆学习格言:不读书的人,思想就会停止。——狄德罗 ⛪️个人主页:进入博主主页 🗼专栏系列:进入MySQL专栏知…

如何使用upupw搭建服务器,并映射外网访问

作为计算机行业从业人员,相信很多人都接触并使用过phpstudy等类似环境集成包,着对于upupw就比较好理解了。UPUPW绿色服务器平台是Windows下很有特色的一款免费服务器PHP套件,UPUPW PHP套件简化了PHP环境搭建步骤,一个压缩包解压到…

【MOOC 作业】第4章 网络层

不是标答也不是参考答案 仅从个人理解出发去做题 1、(20分) 考虑如图示的网络。 a. 假定网络是一个数据报网络。显示路由器 A 中的转发表,其中所有指向主机 H3 的流量通过接口 3 转发。 目的网络链路接口H33 b. 假定网络是一个数据报网络。你能写出路由器 A 中的…

设计模式篇(Java):单例模式

上一篇:设计模式篇(Java):前言(UML类图、七大原则) 四、单例模式 所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法(静态方法)…

【Linux系列P5】gccg++与【动静态库】的美妙邂逅

前言 大家好吖,欢迎来到 YY 滴 Linux系列 ,热烈欢迎!本章主要内容面向接触过Linux的老铁,主要内容含 欢迎订阅 YY 滴Linux专栏!更多干货持续更新!以下是传送门! 订阅专栏阅读:YY的《…

快速部署K8s仪表板,助力管理轻松搞定!

https://kubernetes.io/zh-cn/docs/tasks/access-application-cluster/web-ui-dashboard/ Dashboard 是基于网页的 Kubernetes 用户界面。 你可以使用 Dashboard 将容器应用部署到 Kubernetes 集群中,也可以对容器应用排错,还能管理集群资源。 你可以使…

CaffeineCache+Redis 接入系统做二层缓存思路实现(借鉴 mybatis 二级缓存、自动装配源码)

本文目录 前言本文术语本文项目地址设计思路开发思路DoubleCacheAble 双缓存注解(如何设计?)动态条件表达式?例如:#a.id?(如何解析?)缓存切面(如何设计?&…

async异步任务_同步任务选项

需要先看完上文:async创建异步任务_御坂美琴1的博客-CSDN博客 让类里面的一个成员函数当作线程的参数。 async里面有三个参数,一个是成员函数的地址,第二个是 类,第三个是传入的参数。 接下来介绍async的同步线程创建。 asy…

华为云Classroom一站式教学实践平台,开启云端教学新征程

随着高考落下帷幕,各高校将迎来新一届大学新生入学,他们的学长学姐们经过四年的学习,也即将步入社会,迈向一段新的人生旅程。 在这里小智先祝大家未来一切顺意,不忘初心,大鹏一日同风起,扶摇直…

Android跨平台语言分析

跨平台技术发展的三个阶段 第一阶段是混合开发的web容器时代 为了解决原生开发的高成本、低效率,出现了Hybrid混合开发原生中嵌入依托于浏览器的WebViewWeb浏览器中可以实现的需求在WebView中基本都可以实现但是Web最大的问题是,它的性能和体验与原生开发…