Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring引导错误页面无法使用独立Tomcat_Java_Spring Mvc_Tomcat_Spring Boot - Fatal编程技术网

Java Spring引导错误页面无法使用独立Tomcat

Java Spring引导错误页面无法使用独立Tomcat,java,spring-mvc,tomcat,spring-boot,Java,Spring Mvc,Tomcat,Spring Boot,我仍然在努力让Spring引导错误页面的东西在一个独立的tomcat中完全工作,并部署了WAR文件 我有一个配置类,如下所示: @Configuration @ComponentScan @EnableAutoConfiguration(exclude = [ GroovyTemplateAutoConfiguration, SecurityAutoConfiguration, ErrorMvcAutoConfiguration, JmxAutoConfiguration ] ) class A

我仍然在努力让Spring引导错误页面的东西在一个独立的tomcat中完全工作,并部署了WAR文件

我有一个配置类,如下所示:

@Configuration
@ComponentScan
@EnableAutoConfiguration(exclude = [ GroovyTemplateAutoConfiguration, SecurityAutoConfiguration, ErrorMvcAutoConfiguration, JmxAutoConfiguration ] )
class Application extends SpringBootServletInitializer {

    @Override protected SpringApplicationBuilder configure( SpringApplicationBuilder application ) {
        application.sources( Application )
    }
@Configuration
class ErrorConfiguration implements EmbeddedServletContainerCustomizer {

    @Override public void customize( ConfigurableEmbeddedServletContainer container ) {
        container.addErrorPages(new ErrorPage( HttpStatus.NOT_FOUND, "/errors/404" ))
    }
还有我的错误处理配置,如下所示:

@Configuration
@ComponentScan
@EnableAutoConfiguration(exclude = [ GroovyTemplateAutoConfiguration, SecurityAutoConfiguration, ErrorMvcAutoConfiguration, JmxAutoConfiguration ] )
class Application extends SpringBootServletInitializer {

    @Override protected SpringApplicationBuilder configure( SpringApplicationBuilder application ) {
        application.sources( Application )
    }
@Configuration
class ErrorConfiguration implements EmbeddedServletContainerCustomizer {

    @Override public void customize( ConfigurableEmbeddedServletContainer container ) {
        container.addErrorPages(new ErrorPage( HttpStatus.NOT_FOUND, "/errors/404" ))
    }
这些信息似乎正在被使用,但并不像我预期的那样-如果我只是转到一个不存在的URL,那么我将得到tomcat默认的404页面-然而,Spring似乎正在返回我的ErrorPage路径,因为tomcat页面如下所示:

HTTP Status 404 - //errors/404

type Status report

message //errors/404

description The requested resource is not available.

Apache Tomcat/7.0.54
如果我更改错误配置并使用不同的路径,那么该路径将作为404消息传递-有人知道我错过了什么吗?我希望消息类似于“notfound”,路径/errors/404用于解析视图/控制器以呈现错误页面


更新 我在web配置中将错误路径映射为标准视图控制器:

@Configuration
@EnableWebMvc
class WebMvcConfiguration extends WebMvcConfigurerAdapter {

    /**
     * Register static views that dont need controller calls - map URLs direct to views
     */
    @Override public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/errors/404").setViewName("errors/404")
        registry.addViewController("/errors/500").setViewName("errors/500")
    }
另外,如果我直接进入浏览器中的错误路径-/errors/404-那么我会得到我期望的错误页面


更新2

我已经创建了一个具有自动错误处理功能的虚拟SpringBootWeb应用程序,并将其部署到在Eclipse中运行的tomcat上,并且白标签错误页面显示正确。然后我将它部署到我的开发服务器tomcat上,白标签错误页面停止工作(我看到默认的tomcat 404页面)

My web.xml在这两个版本中都是相同的(将web.xml从eclipse复制到dev server),下面是server.xml(实际上与eclipse版本相同)

但以下情况确实如此:

servletContext.getRequestDispatcher("/errors/404").forward(request,response);
(其中请求和响应为HttpServletRequest/response,servletContext为自动连接的servletContext对象)


上面的两个示例都可以在干净的本地tomcat安装上正常工作—您知道在ServletContext RequestDispatcher仍然工作时,什么可能会导致与请求链接的RequestDispatcher出现问题吗?ErrorPageFilter使用了与请求链接的RequestDispatcher,因此遇到了这个问题。

最后,这是因为tomcat appBase中创建了一个根目录(这是作为WAR部署过程的一部分创建的),看起来这导致了与两个根上下文的混淆(这场战争被部署为根本战争)


修复tomcat设置,使其能够像预期的那样使用WAR文件。这开始起作用。

您在哪里定义了“/errors/404”的处理程序?它在我的web配置中定义为视图控制器-只是映射到src/main/resources/templates/errors/404.HTML(我使用的是thymeleaf,但这只是静态HTML文件)你能发布那段代码吗?它看起来像是找不到的viewhandler。谢谢@DaveSyer-已经用配置更新了。我尝试过包括/排除引导错误配置,但这两种配置似乎都没有改变这种行为-我缺少任何其他错误配置吗?是不是坏了“/”(双斜杠)(Tomcat无法解决这个问题,也懒得尝试规范化路径)。我想您需要在容器中不使用前导“/”的情况下注册它?