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

embedded/2025/2/5 12:18:22/
  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(newMyServlet(),"/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 = newServletListenerRegistrationBean<>(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 {@Overrideprotected SpringApplicationBuilder configure(SpringApplicationBuilder application) {return application.sources(DemoApplication.class);}
      }

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

http://www.ppmy.cn/embedded/159747.html

相关文章

python Flask-Redis 连接远程redis

当使用Flask-Redis连接远程Redis时&#xff0c;首先需要安装Flask-Redis库。可以通过以下命令进行安装&#xff1a; pip install Flask-Redis然后&#xff0c;你可以使用以下示例代码连接远程Redis&#xff1a; from flask import Flask from flask_redis import FlaskRedisa…

Machine Learning Engineering Open Book 机器学习工程开放书

文章目录 一、关于 Machine Learning Engineering Open Book二、书籍目录三、关键对照表四、快捷方式 一、关于 Machine Learning Engineering Open Book 这是一个开放的方法、工具和分步说明集合&#xff0c;有助于成功训练和微调大型语言模型和多模态模型及其推理。 这是一…

对比DeepSeek、ChatGPT和Kimi的学术写作中搜集参考文献能力

参考文献 列出引用过的文献&#xff0c;按引用顺序排列&#xff0c;并确保格式规范。只列举确实阅读过的文献&#xff0c;包括书籍、期刊文章等&#xff0c;以便读者进一步查阅相关资料。也可以利用endnotes和zotero等文献管理工具插入文献。由于ChatGPT4无法联网进行检索&…

深度解读 Docker Swarm

一、引言 随着业务规模的不断扩大和应用复杂度的增加,容器集群管理的需求应运而生。如何有效地管理和调度大量的容器,确保应用的高可用性、弹性伸缩和资源的合理分配,成为了亟待解决的问题。Docker Swarm 作为 Docker 官方推出的容器集群管理工具,正是在这样的背景下崭露头…

【Convex Optimization Stanford】Lec7. Statistical estimation

【Convex Optimization Stanford】Lec7. Statistical estimation 前言参数化分布估计带有独立同分布噪声的线性估计Logistic 回归二分假说检验 实验设计 前言 略 参数化分布估计 极大似然估计&#xff0c;大概意思就是调整参数&#xff0c;让 y y y出现的概率的对数值最大。…

部署keepalvied+lVS(dr)高可用集群

第一步&#xff0c;环境准备 服务器名称 IP 描述 master VIP:192.168.244.100 DIP:192.168.244.101 高可用keeplived_master LVS负载均衡 backup VIP:192.168.244.100 DIP:192.168.244.102 高可用keeplived_backup LVS负载均衡 server1 RIP:192.168.244.103 Web服务…

【Redis】缓存+分布式锁

目录 缓存 Redis最主要的使用场景就是作为缓存 缓存的更新策略&#xff1a; 1.定期生成 2.实时生成 面试重点&#xff1a; 缓存预热&#xff08;Cache preheating&#xff09;&#xff1a; 缓存穿透&#xff08;Cache penetration&#xff09; 缓存雪崩 (Cache avalan…

消息队列篇--通信协议篇--STOMP(STOMP特点、格式及示例,WebSocket上使用STOMP,消息队列上使用STOMP等)

STOMP&#xff08;Simple Text Oriented Messaging Protocol&#xff0c;简单面向文本的消息传递协议&#xff09;是一种轻量级、基于文本的协议&#xff0c;旨在为消息代理&#xff08;消息队列&#xff09;和客户端之间的通信&#xff08;websocket&#xff09;提供一种简单的…