当前位置: 首页 > 知识库问答 >
问题:

在Spring引导中配置嵌入式apache tomcat中的tomcat-server.xml文件

慕璞
2023-03-14

我正在使用SpringBoot(2.1.3.RELEASE)和嵌入式tomcat(版本9.0.16)开发一个java应用程序(jar文件)。

我想重写tomcat的Catalina错误报告阀错误页面,

为此,我需要指示Tomcat使用为此目的而创建的自定义类,而不是默认类。这可以通过更新Tomcat配置文件“server”中的主机元素来实现。xml’。

定义类:

import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.logging.Logger;

import org.apache.catalina.connector.Request;
import org.apache.catalina.connector.Response;
import org.apache.catalina.valves.ErrorReportValve;

public class CustomErrorReportValve extends ErrorReportValve {

    // Create a simple logger
    Logger log = Logger.getLogger(CustomErrorReportValve.class.getName());

    @Override
    protected void report(Request request, Response response, Throwable t) {
        try {
            // Write a more friendly, less technical message to the user
            BufferedWriter out = new BufferedWriter(new OutputStreamWriter(response.getOutputStream()));
            out.write("<html><head><title>Oops</title><body>");
            out.write("<h1>Oops</h1>");
            out.write("<p>Well, that didn't go as we had expected.</p>");
            out.write("<p>Don't worry though, we're working on it.</p>");
            out.write("</body></html>");
            out.close();

            // Log the error with your favorite logging framework...
            log.severe("Uncaught throwable was thrown: " + t.getMessage());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

服务器xml(或使用嵌入式tomcat时的tomcat-server.xml):

    <Valve className="org.apache.catalina.valves.ErrorReportValve" showReport="false" showServerInfo="false" />

我在Spring文档中发现,当在Spring中使用嵌入式tomcat时,配置文件被称为tomcat-server.xml而不是server.xml.

现在,问题是我找不到tomcat服务器。springboot项目中的xml,或者如何配置/覆盖它,如果没有,是否有其他方法使用嵌入式tomcat定制springboot中的catalina ErrorReportValve错误页面?

谢谢你的帮助!!

共有1个答案

董凡
2023-03-14

看来你的问题涉及以下问题:

  • Tomcat直接调用错误的URL的错误报告阀门#21257
import org.apache.catalina.Container;
import org.apache.catalina.core.StandardHost;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.server.WebServerFactoryCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MyConfig {
    // https://docs.spring.io/spring-boot/docs/2.4.4/reference/htmlsingle/#howto-use-tomcat-legacycookieprocessor
    // https://github.com/spring-projects/spring-boot/issues/21257#issuecomment-745565376
    @Bean
    public WebServerFactoryCustomizer<TomcatServletWebServerFactory> errorReportValveCustomizer() {

        return (factory) -> {
            factory.addContextCustomizers(context -> {
                final Container parent = context.getParent();
                if (parent instanceof StandardHost) {
                    ((StandardHost) parent).setErrorReportValveClass(
                        "your.package.CustomErrorReportValve");
                }
            });
        };
    }
}
 类似资料:
  • 我需要将我的Spring Boot ZuL网关中的MaxKeepAliverRequests值修改为高于默认值100的值。注意到该值未在Spring Boo的公共属性列表中公开,我尝试通过@Configuration class设置属性: 但似乎并没有起到预期的效果。有没有一种合适的方法可以让我更改没有通过Spring common properties公开的Tomcat属性?

  • 本文向大家介绍详述 tomcat 中的 server.xml 配置文件示例,包括了详述 tomcat 中的 server.xml 配置文件示例的使用技巧和注意事项,需要的朋友参考一下 正文 1 前言   Tomcat 隶属于 Apache 基金会,是开源的轻量级 Web 应用服务器,使用非常广泛。server.xml是 Tomcat 中最重要的配置文件,server.xml的每一个元素都对应了 T

  • 文件结构 Spring配置文件 将上下文初始化事件发送到类org的侦听器实例时发生异常。springframework。网状物上下文ContextLoaderListener组织。springframework。豆。工厂BeanInitializationException:无法加载属性;嵌套的异常是java。木卫一。FileNotFoundException:无法打开类PATH资源[WEB-IN

  • 这将启动一个嵌入式Tomcat实例,这很好。 问题是,其他配置文件不需要嵌入式服务器(例如,我使用JMS来处理传入的消息,而不是REST)。 有什么方法可以阻止在默认情况下启动Tomcat,并且只在REST配置类中使用它?例如,通过使用注释该类 谢谢

  • 我试图配置与。但得到这么多的麻烦与版本不同的包我想出了这个 这是的依赖项,它是的依赖项。 当我启动服务器时,一切都正常,但是当我试图用这段代码访问neo4j服务器时。 通过在控制器中调用方法,我得到了拒绝的连接。 我认为嵌入式neo4j没有启动,这就是原因。那么如何启动嵌入式服务器呢。我想如果我使用spring boot,它会自动启动,但事实并非如此。 注:文件包含这是我遵循的项目https://

  • 在将非spring应用程序转换为Spring Boot时,您希望使用现有上下文。嵌入tomcat中的xml文件。 使用Spring Boot 1.5.1和Tomcat 8.5.11 TomcatEmbeddedServletContainerFactory配置 检查数据库连接的方法, 那么如何在Spring Boot中加载现有的context.xml。