JavaWeb——SpringBoot 系列(5)SpringBoot内嵌 Tomcat的配置_springboot内置tomcat怎么放web文件-程序员宅基地

技术标签: Javaweb系列笔记  

  • spring Boot 内嵌有 Tomcat 容器。

一、使用 application.properties 配置

  • Spring Boot 在 org.springframework.boot.autoconfigure.web.ServerProperties 文件中定义 Tomcat 的所有属性:
    @ConfigurationProperties(
    prefix = "server",
    ignoreUnknownFields = false
    )
    public class ServerProperties implements EmbeddedServletContainerCustomizer, Ordered {
          
        private Integer port;
        private InetAddress address;
        private Integer sessionTimeout;
        private String contextPath;
        private String displayName = "application";
        @NestedConfigurationProperty
        private Ssl ssl;
        @NotNull
        private String servletPath = "/";
        private final ServerProperties.Tomcat tomcat = new ServerProperties.Tomcat();
        private final ServerProperties.Undertow undertow = new ServerProperties.Undertow();
        @NestedConfigurationProperty
        private JspServlet jspServlet;
        private final Map<String, String> contextParameters = new HashMap();
        }
    
  • 因此,我们配置 Tomcat 时只需要在 application.properties 中进行属性配置即可。

1、Servlet 容器配置

  • 因为 Spring Boot 默认内嵌的 Tomcat 为 Servlet 容器。
  • 通用的 Servlet 容器配置以 “server” 为前缀。
  • 示例:
    server.port = #配置程序的端口,供外部设备访问,默认为8080
    server.seesion-timeout=#用户会话 session 的过期时间,以秒为单位
    server.context-path=#配置访问路径,默认为/
    

2、Tomcat 特有配置

  • Tomcat 特有的配置,用 “server.tomcat" 作为前缀。
  • 示例:
    server.tomcat.uri-encoding=#配置 Tomcat 编码,默认为 UTF-8
    server.tomcat.compression=#Tomcat 是否开启压缩,默认关闭 off
    
  • 详细的 servlet 和 Tomcat 配置可以查看链接导向的官方文档:servlet 详细配置

二、代码方式配置 Tomcat

1、通用配置

  • 用代码的方式为 Servlet 进行通用配置的操作,就是建立一个实现 EmbeddedServletContaintCustomizer 接口的 Bean。
1.1、新建类的方式
  • 示例如下:
    import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer;
    import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer;
    import org.springframework.boot.context.embedded.ErrorPage;
    import org.springframework.http.HttpStatus;
    import org.springframework.stereotype.Component;
    
    import java.util.concurrent.TimeUnit;
    
    @Component
    public class CustomServletContainer implements EmbeddedServletContainerCustomizer {
          
        @Override
        public void customize(ConfigurableEmbeddedServletContainer container) {
          
            container.setPort(8888);    //设置启动端口
            container.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND,"/404.html"));   //设置错误页面
            container.setSessionTimeout(10, TimeUnit.MINUTES);  //设置访问超时时间
        }
    }
    
1.2、在已有配置文件中
  • 在项目现有的配置文件中增加 Bean 的方式来配置的话,需要将类声明为 static,示例如下:
    import com.wisely.ch5_2_3.bean.Person;
    import com.wisely.ch5_2_3.config.AuthorSettings;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.boot.builder.SpringApplicationBuilder;
    import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer;
    import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer;
    import org.springframework.boot.context.embedded.ErrorPage;
    import org.springframework.http.HttpStatus;
    import org.springframework.stereotype.Component;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import java.util.ArrayList;
    import java.util.List;
    import java.util.concurrent.TimeUnit;
    
    @Controller
    @SpringBootApplication
    public class Ch523Application {
          
    
    //    @Value("${author.name}")
    //    private String authorName;
    //    @Value("${author.mail}")
    //    private String authorMail;
    //    @Autowired
    //    private AuthorSettings authorSettings;
    
        @RequestMapping("/")
        public String index(Model model){
          
            Person single = new Person("aa",11);
            List<Person> people = new ArrayList<>();
            Person p1 = new Person("xx",11);
            Person p2 = new Person("yy",22);
            Person p3 = new Person("zz",33);
            people.add(p1);
            people.add(p2);
            people.add(p3);
            model.addAttribute("singlePerson",single);
            model.addAttribute("people",people);
            return "index";
    //        return "author name is"+authorSettings.getName()+", age is:"+authorSettings.getAge()
    //                +", mail is:"+authorSettings.getMail();
    //        return "Spring Boot Demo Project, "+"author name is:"+authorName
    //                +", author mail is:"+authorMail;
        }
    
        public static void main(String[] args) {
          
    
    //        SpringApplication.run(Ch523Application.class, args);
    //        SpringApplication app = new SpringApplication(Ch523Application.class);
    //        app.setShowBanner(false);
    //        app.run(args);
            new SpringApplicationBuilder(Ch523Application.class)
                    .showBanner(true)
                    .run(args);
        }
    
        @Component
        public static class CustomServerContainer implements EmbeddedServletContainerCustomizer{
          
            @Override
            public void customize(ConfigurableEmbeddedServletContainer container) {
          
                container.setPort(8888);    //设置启动端口
                container.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND,"/404.html"));   //设置错误页面
                container.setSessionTimeout(10, TimeUnit.MINUTES);  //设置访问超时时间
            }
        }
    }
    
  • 以上两例各自运行后,控制台局部信息:
    在这里插入图片描述
  • 值得注意的是,因为两个文件的类名一样,内容也一样,不要同时注解为 @Component,也就是说要用其中一个就把另一个的注解注释掉。

2、针对容器的特定配置

  • 除了可以通用配置外,Spring Boot 还支持针对某个容器的特定配置,例如针对 Tomcat 容器的,有一个 TomcatEmbeddedServletContainerFactory,使用示例如下:
    @Bean
    public EmbeddedServletContainerFactory servletContainer(){
          
        TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory();
        factory.setPort(8888);
        factory.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND,"/404.html"));
        factory.setSessionTimeout(10,TimeUnit.MINUTES);
        return factory;
    }
    

三、替换 Tomcat

  • Spring Boot 支持将默认的容器 Tomcat 进行替换。

1、Jetty

  • 要将容器从 Tomcat 替换为 Jetty,只需要在 pom 文件进行依赖修改即可,将 spring-boot-starter-tomcat 替换为 spring-boot-starter-Jetty,代码如下:
    <!--        将 Tomcat 容器替换为 Jetty-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-tomcat</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jetty</artifactId>
        </dependency>
    
  • 再次启动项目,可以看到控制台现实的是 Jetty
    在这里插入图片描述

2、Undertow

  • 也可以将容器改为 Undertow,则 POM 文件的相关代码如下:
    <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-tomcat</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    <!--        替换为 Undertow-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-undertow</artifactId>
        </dependency>
    
  • 运行结果
    在这里插入图片描述

上一篇
下一篇

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_42896653/article/details/104169719

智能推荐

Servlet过滤器处理中文乱码问题_servlet 过滤器处理中文乱码-程序员宅基地

文章浏览阅读1.7k次。一Filter开发步骤1导包2编写过滤器二实战1编写Servlet,用于测试package com.cakin.servlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;/*** @Clas..._servlet 过滤器处理中文乱码

项目管理PMP好考吗,没有经验?_pmp项目管理证书好考吗-程序员宅基地

文章浏览阅读501次。PMP 目前还是好考的,只有选择题(大陆地区),技巧很多,可以看看这篇文章,从怎么选择培训机构到如何 5A 通关都有写,应该对你有点帮助~PMP考试并不难,我觉得备考 PMP 就是心态+方法+坚持,能做到这三点通过 PMP 是一件很容易的事情。心态方法>>>技巧一:>>>技巧二:有针对性目的性的刷题,拒绝盲目刷题刷题阶段,其实最好是跟上直播课,上一节课刷一章的练习题,这有助于知识掌握,也不会太赶时间,每次听完串讲后直接刷的模拟试卷,尤其是模考 1、2 、3 套,绝对要刷,我碰到了类似的题(非原题)。但_pmp项目管理证书好考吗

一步步学习如何安装并使用SAP HANA Express Edition_连接hana express-程序员宅基地

文章浏览阅读692次。使用Jerry这篇文章在Google Cloud platform上的Kubernetes集群部署HANA Express里介绍的方法在Google Cloud Platform的Kubernetes cluster上安装SAP HANA Express.文中介绍了一个yaml文件,里面声明了容器镜像文件store/saplabs/hanaexpress:2.00.033.00.20180925..._连接hana express

c++教你唱响天空之城(源码奉上)_c加加编程歌曲-程序员宅基地

文章浏览阅读818次。这段代码用Beep来演奏一段天空之城代码如下:#include <cstdio>#include <windows.h>#define qdo 262 #define qre 294#define qmi 330 //q前缀为低音,1后缀为高音,s前缀为半音阶 #define qfa 349#define qso 392#define qla 440#define qsi 494#define do 523#define re 578#define _c加加编程歌曲

转录组组装软件--SPAdes--安装和使用_spades软件-程序员宅基地

文章浏览阅读6.7k次,点赞6次,收藏23次。这是一个组装软件,运行很快。_spades软件

DM644x达芬奇平台交叉编译工具链的制作_达芬奇程序编译-程序员宅基地

文章浏览阅读2.3k次。最近在做davinci平台的系统开发,用的是ti公司的dm6446芯片,这款芯片比较经典所以资料也挺多的,而且ti官方给提供一个dvsdk的软件包,里面包含了包括bootloader、kernel、fs、DSP算法及各种编解码codec,可谓给开发者提供了很多便利。当然里面也包含了arm-linux的交叉编译工具链,但是版本比较旧了,是基于gcc-4.2.0版本的,现在最新的gcc的版本已经到了4_达芬奇程序编译

随便推点

2021程序员进阶宝典!Flutter中的widget_flutter widget进阶-程序员宅基地

文章浏览阅读136次。decoration: TextDecoration.lineThrough, decorationColor: Colors.black, //solid:实线,double:双线,dotted:点虚线,dashed:横虚线,wavy:波浪线decorationStyle:TextDecorationStyle.wavy),);}class TextApp extends StatelessWidget {@overrideWidgetbuild(Bui..._flutter widget进阶

npm install报错code ERR_SOCKET_TIMEOUT(proxy相关)-程序员宅基地

文章浏览阅读1.1w次,点赞14次,收藏17次。npm ERR! code ERR_SOCKET_TIMEOUTnpm ERR! network Socket timeoutnpm ERR! network This is a problem related to network connectivity.npm ERR! network In most cases you are behind a proxy or have bad network settings.npm ERR! network npm ERR! network If y_err_socket_timeout

Oracle数据库(六):表类型_oracle表类型不能接收多行数据-程序员宅基地

文章浏览阅读3.7k次,点赞3次,收藏3次。表类型也叫做嵌套表。使用记录类型变量只能保存一行数据,这限制了SELECT语句的返回行数​,如果SELECT语句返回多行就会错。Oracle提供了另外一种自定义类型,也就是表类型,它是对记录类型的扩展,允许处理多行数据,类似于表。创建表类型的语法如下:TYPE table_name AS | IS TABLE OF data_type [ NOT NULL ];语法说明如下:..._oracle表类型不能接收多行数据

C# Winform通用开发框架,可用于各种定制软件开发(赠 全部源码)_winform框架源码-程序员宅基地

文章浏览阅读4.6k次。C# Winform通用开发框架,可用于各种定制软件开发(赠 全部源码)。框架自带标签打印、自动更新、多语言等功能。_winform框架源码

iOS 返回上一页,内容下移问题_ios 弹出键盘 返回界面下移-程序员宅基地

文章浏览阅读510次。上图问题描述:今天突然发现页面点击返回时候,整体内容下移,准确的说是:返回过程中,页面会出现整体往右下角移动,而不是直接向右移动出现原因:我这边的原因,是因为点击了输入框,然后返回的时候,键盘退下导致整体页面下移!- (void)actionBack { [self.view endEditing:YES]; [super actionBack];}索性我就在返回方法前,添加了默认退出键盘方法解决总结:此处是因为返回过程中,有一个下移动画和返回动画一起所导致的后记:上诉只_ios 弹出键盘 返回界面下移

Windows上彻底卸载软件及清理残留数据的详细步骤_windows可以彻底卸载软件的-程序员宅基地

文章浏览阅读2.2w次,点赞11次,收藏73次。在Windows操作系统上安装和卸载软件是常见的操作。然而,仅仅通过常规的卸载过程并不能完全清除软件的所有残留数据。为了彻底卸载软件并清理相关的残留数据,我们需要采取额外的步骤。本文将详细介绍在Windows上彻底卸载软件以及清理残留数据的步骤。_windows可以彻底卸载软件的

推荐文章

热门文章

相关标签