SpringBoot 整合 SpringMVC:配置嵌入式服务器

  1. 修改和 server 相关的配置(ServerProperties):
    server.port=8081
    server.context‐path=/tx
    server.tomcat.uri‐encoding=UTF‐8
  2. 注册 Servlet 三大组件:Servlet、Fileter、Listener
    1. SpringBoot 默认是以 jar 包的方式启动嵌入式的 Servlet 容器来启动 SpringBoot 的 web应用,没有外部文件
    2. Servlet:
      //注册三大组件
      @Bean
      public ServletRegistrationBean myServlet(){
          ServletRegistrationBean registrationBean = new ServletRegistrationBean(new
                  MyServlet(),"/myServlet");
          return registrationBean;
      }
    3. FilterRegisttratinBean:
      @Bean
      public FilterRegistrationBean myFilter(){
          FilterRegistrationBean registrationBean = new FilterRegistrationBean();
          registrationBean.setFilter(new MyFilter());
          registrationBean.setUrlPatterns(Arrays.asList("/hello","/myServlet"));
          return registrationBean;
      }
    4. SErvletListenerRegistrationBean:
      @Bean
      public ServletListenerRegistrationBean myListener(){
          ServletListenerRegistrationBean<MyListener> registrationBean = new
                  ServletListenerRegistrationBean<>(new MyListener());
          return registrationBean;
      }
    5. SpringBoot 帮我们自动整合 SpringMVC 的时候,自动的注册 SpringMVC 的前端控制器:DispatherServlet
    6. 在 DispatherServletAutoConfiguration 中:
      @Bean(name = DEFAULT_DISPATCHER_SERVLET_REGISTRATION_BEAN_NAME)
          @ConditionalOnBean(value = DispatcherServlet.class, name =
                  DEFAULT_DISPATCHER_SERVLET_BEAN_NAME)
          public ServletRegistrationBean dispatcherServletRegistration(
                  DispatcherServlet dispatcherServlet) {
              ServletRegistrationBean registration = new ServletRegistrationBean(
                      dispatcherServlet, this.serverProperties.getServletMapping());
      //默认拦截: / 所有请求;包静态资源,但是不拦截jsp请求; /*会拦截jsp
      //可以通过server.servletPath来修改SpringMVC前端控制器默认拦截的请求路径
              registration.setName(DEFAULT_DISPATCHER_SERVLET_BEAN_NAME);
              registration.setLoadOnStartup(
                      this.webMvcProperties.getServlet().getLoadOnStartup());
              if (this.multipartConfig != null) {
                  registration.setMultipartConfig(this.multipartConfig);
              }
              return registration;
          }

使用外置的 Servlet 容器:

  1. 嵌入式 Servlet 容器:应用打成可执行的 jar 包
  2. 优点:简单、便携
  3. 缺点:默认不支持 JSP、优化定制比较复杂
  4. 外置的 Servlet 容器:外面安装 Tomcat ,应用打包方式为 war 包
  5. 步骤:
    1. 创建一个 war 项目
    2. 将嵌入式的 Tomcat 指定为 provided
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring‐boot‐starter‐tomcat</artifactId>
          <scope>provided</scope>
      </dependency>
    3. 配置项目的目录结构:

    4. 部署 Tomcat
    5. 必须编写一个 SpringBootSerbletInitializer 的子类,并调用 configure 方法
      public class ServletInitializer extends SpringBootServletInitializer {
          @Override
          protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
              return application.sources(DemoApplication.class);
          }
      }

    6. 启动服务即可使用
  6. 原理:
    1. jar 包:执行 SpringBoot 主类的 main 方法,启动 IOC 容器,创建嵌入式的 Servlet 容器
    2. war 包:启动服务器,服务器启动 SpringBoot 应用[ SpringBootServletInitializer ],启动 IOC 容器

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何实现滑动网格的功能

文章目录 1 概念介绍2 使用方法3 示例代码 我们在上一章回中介绍了SliverList组件相关的内容&#xff0c;本章回中将介绍SliverGrid组件.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1 概念介绍 我们在本章回中介绍的SliverGrid组件是一种网格类组件&#xff0c;主要用来…

17.[前端开发]Day17-形变-动画-vertical-align

1 transform CSS属性 - transform transform的用法 表示一个或者多个 不用记住全部的函数&#xff0c;只用掌握这四个常用的函数即可 位移 - translate <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta ht…

高清种子资源获取指南 | ✈️@seedlinkbot

在如今的数字时代&#xff0c;高清影视、音乐、游戏等资源的获取方式不断丰富。对于追求高质量资源的用户而言&#xff0c;一个高效的资源分享平台至关重要。而 ✈️seedlinkbot 正是这样一个便捷的资源获取工具&#xff0c;为用户提供高质量的种子资源索引和下载信息。 1. ✈️…

DeepSeek R1安装与使用

DeepSeek R1安装与使用 1、安装 Ollama 如果之前没有安装过 Ollama&#xff0c;先在 Ollama官网 下载对应系统的 Ollama 进行安装。 2、部署 DeepSeek R1 模型 选择需要下载的模型。这里我们选择 deepseek-r1 根据自己机器配置&#xff0c;选择不同参数的模型。这里我们选择…

Van-Nav:新年,将自己学习的项目地址统一整理搭建自己的私人导航站,供自己后续查阅使用,做技术的同学应该都有一个自己网站的梦想

嗨&#xff0c;大家好&#xff0c;我是小华同学&#xff0c;关注我们获得“最新、最全、最优质”开源项目和高效工作学习方法 Van-Nav是一个基于Vue.js开发的导航组件库&#xff0c;它提供了多种预设的样式和灵活的配置选项&#xff0c;使得开发者可以轻松地定制出符合项目需求…

C++ Primer 命名空间的using声明

欢迎阅读我的 【CPrimer】专栏 专栏简介&#xff1a;本专栏主要面向C初学者&#xff0c;解释C的一些基本概念和基础语言特性&#xff0c;涉及C标准库的用法&#xff0c;面向对象特性&#xff0c;泛型特性高级用法。通过使用标准库中定义的抽象设施&#xff0c;使你更加适应高级…

Python 中最大堆和最小堆的构建与应用:以寻找第 k 大元素为例

引言 在数据处理和算法设计中&#xff0c;堆&#xff08;Heap&#xff09;是一种非常重要的数据结构。它是一种特殊的完全二叉树&#xff0c;具有高效的插入和删除操作特性&#xff0c;时间复杂度为 O ( log ⁡ n ) O(\log n) O(logn)。堆主要分为最大堆和最小堆&#xff0c;…

如果把Linux主机作为路由器转发流量,性能可靠吗?

正文共&#xff1a;666 字 13 图&#xff0c;预估阅读时间&#xff1a;1 分钟 strongSwan是一个开源的基于IPsec的VPN解决方案&#xff0c;我计划是将strongSwan部署在CentOS系统中&#xff0c;但是这中间涉及到一个小问题&#xff0c;那就是strongSwan网关的子网怎么处理&…

Qt Creator 中使用 vcpkg

Qt Creator 中使用 vcpkg Qt Creator 是一个跨平台的轻量级 IDE&#xff0c;做 Qt 程序开发的同学们肯定对这个 IDE 都比较属于。这个 IDE 虽然没有 Visual Stdio 功能那么强&#xff0c;但是由于和 Qt 集成的比较深&#xff0c;用来开发 Qt 程序还是很顺手的。 早期&#xf…

Linux防火墙基础

一、Linux防火墙的状态机制 1.iptables是可以配置有状态的防火墙&#xff0c;其有状态的特点是能够指定并记住发送或者接收信息包所建立的连接状态&#xff0c;其一共有四种状态&#xff0c;分别为established invalid new related。 established:该信息包已建立连接&#x…

智能小区物业管理系统推动数字化转型与提升用户居住体验

内容概要 在当今快速发展的社会中&#xff0c;智能小区物业管理系统的出现正在改变传统的物业管理方式。这种系统不仅仅是一种工具&#xff0c;更是一种推动数字化转型的重要力量。它通过高效的技术手段&#xff0c;将物业管理与用户居住体验紧密结合&#xff0c;无疑为社区带…

马铃薯叶子病害检测数据集VOC+YOLO格式1332张9类别

数据集中大约1000张是单个叶子图片 数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;1332 标注数量(xml文件个数)&#xff1a;1332 标注数…

【LeetCode: 81. 搜索旋转排序数组 II + 二分查找】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

解锁FPGA的故障免疫密码

我们身处“碳基智能”大步迈向“硅基智能”序曲中,前者更像是后者的引导程序,AI平民化时代,万物皆摩尔定律。 越快越好,几乎适用绝大多数场景。 在通往人工智能的征程中,算力无处不在,芯片作用无可替代。 十六年前,就已宣称自己是一家软件公司的英伟达,现已登顶全球…

Skyeye 云 VUE 版本 v3.15.6 发布

Skyeye 云智能制造&#xff0c;采用 Springboot winUI 的低代码平台、移动端采用 UNI-APP。包含 30 多个应用模块、50 多种电子流程&#xff0c;CRM、PM、ERP、MES、ADM、EHR、笔记、知识库、项目、门店、商城、财务、多班次考勤、薪资、招聘、云售后、论坛、公告、问卷、报表…

数据结构课程设计(三)构建决策树

3 决策树 3.1 需求规格说明 【问题描述】 ID3算法是一种贪心算法&#xff0c;用来构造决策树。ID3算法起源于概念学习系统&#xff08;CLS&#xff09;&#xff0c;以信息熵的下降速度为选取测试属性的标准&#xff0c;即在每个节点选取还尚未被用来划分的具有最高信息增益的…

w187社区养老服务平台的设计与实现

&#x1f64a;作者简介&#xff1a;多年一线开发工作经验&#xff0c;原创团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339;赠送计算机毕业设计600个选题excel文…

如何让跨域文件管控简单又高效

在当今全球化和数字化的商业环境中&#xff0c;企业往往需要跨越不同的地理区域进行协作。这种多区域协作的一个关键挑战就是如何实现高效且安全的跨域文件传输。随着企业的规模不断扩大&#xff0c;并在全球范围内设立分支机构&#xff0c;跨域文件管控已经成为了一个必不可少…

HarmonyOS:ArkWeb进程

ArkWeb是多进程模型,分为应用进程、Web渲染进程、Web GPU进程、Web孵化进程和Foundation进程。 说明 Web内核没有明确的内存大小申请约束,理论上可以无限大,直到被资源管理释放。 ArkWeb进程模型图 应用进程中Web相关线程(应用唯一) 应用进程为主进程。包含网络线程、Vi…

Flutter开发环境配置

下载 Flutter SDK 下载地址&#xff1a;https://docs.flutter.cn/get-started/install M1/M2芯片选择带arm64字样的Flutter SDK。 解压 cd /Applications unzip ~/Downloads/flutter_macos_arm64_3.27.3-stable.zip执行 /Applications/flutter/bin/flutterManage your Flut…