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

对spring boot RestController的REST调用在tomcat中生成404,但在嵌入式tomcat中有效

柳俊健
2023-03-14

我是Spring启动的新手。我了解Spring mvc。我开发了一个带有@RestController的小应用程序,如下文更新中所述。当我使用mvn spring-boot: run(即嵌入式tomcat)执行时,这工作正常

>

  • 当我将打包的war部署到tomcat时,相同的REST调用导致404未找到。目标urlhttp://localhost:8086/myapp/demo给出404。

    我创建了log4j2.xml,当我使用嵌入式tomcat执行时,它会创建预期的日志文件,但对于外部tomcat部署,它也不会创建日志文件,并且我在下的任何tomcat日志中找不到任何日志

    我错过了什么?

    更新:

    spring boot入口点类:

    @SpringBootApplication
    @RestController
    public class App extends SpringBootServletInitializer {
        public static void main(String[] args) {
            SpringApplication.run(App.class, args);
        }
    
        @Override
        protected SpringApplicationBuilder configure(
                SpringApplicationBuilder application) {
            return application.sources(App.class);
        }
    
        @RequestMapping("/demo")
        public String demo() {
            return "Helloo.. !!";
        }
    }
    

    Spring启动版本=

    部署到tcServer时的日志

    INFO: Deploying web application archive C:\Users\a\vfabric-tc-server\vm1\webapps\myapp.war
    Sep 12, 2016 5:07:23 PM org.apache.catalina.loader.WebappClassLoader validateJarFile
    INFO: validateJarFile(C:\Users\a\vfabric-tc-server\vm1\webapps\myapp\WEB-INF\lib\tomcat-embed-el-8.0.30.jar) - jar not loaded. See Servlet Spec 3.0, section 10.7.2. Offending class: javax/el/Expression.class
    Sep 12, 2016 5:07:24 PM org.apache.catalina.startup.TldConfig execute
    INFO: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
    Sep 12, 2016 5:07:24 PM org.apache.catalina.core.ApplicationContext log
    INFO: Spring WebApplicationInitializers detected on classpath: [org.springframework.boot.autoconfigure.jersey.JerseyAutoConfiguration$JerseyWebApplicationInitializer@47b35d]
    Sep 12, 2016 5:07:24 PM org.apache.catalina.startup.HostConfig deployWAR
    INFO: Deployment of web application archive C:\Users\a\vfabric-tc-server\vm1\webapps\myapp.war has finished in 1,913 ms
    

    更新1:我删除了Angular,只保留了restcontroller的spring boot。问题仍然存在。


  • 共有2个答案

    万俟浩
    2023-03-14

    这是指向JDK6的目标外部Tomcat服务器的问题,但我的应用程序是使用jdk7构建的。一旦我将外部Tomcat指向jdk7,问题就解决了。

    羊舌洛华
    2023-03-14

    您是否可以在POM文件中将Tomcat嵌入式服务器的范围更改为“提供”,或者将其部署到非嵌入式Tomcat容器中,最好排除JAR(因此注释掉它也是一个不错的选择)。

    我在旧的v1.3中遇到了类似的问题。Spring防尘套的x。我在新版本(即v1.4.0)中没有观察到这一点。

    我假设您正在项目POM中使用Spring BOOT父POM和“Spring BOOT starter”库。

     类似资料:
    • null ServerEndpoint: 谢谢你。

    • 问题内容: 我需要在Tomcat中启动Hazelcast,而无需单独的war文件。因此,将hazelcast.jar放入lib文件夹中的hazelczast.xml某处…接下来呢?还是不可能? 问题答案: 第一步是好的,只需将Hazelcast lib和配置放在Tomcat的libs文件夹中。接下来,如果您不需要单独的WAR文件,则是构建一个小的Valve类来启动/关闭Hazelcast节点。问题

    • 我有时会在pom中看到以下声明。xml。。。 如您所见,sping-boo-starter-web被声明为tomcat-embed-jasper。 是不是sping-boo-starter-web已经有一个嵌入式tomcat了?为什么一些开发人员仍然声明tomcat-embed-jasper以及boot-starter-web?还是有什么原因?

    • 我正在使用SpringBoot(2.1.3.RELEASE)和嵌入式tomcat(版本9.0.16)开发一个java应用程序(jar文件)。 我想重写tomcat的Catalina错误报告阀错误页面, 为此,我需要指示Tomcat使用为此目的而创建的自定义类,而不是默认类。这可以通过更新Tomcat配置文件“server”中的主机元素来实现。xml’。 自定义类: 服务器xml(或使用嵌入式tom

    • 我需要将我的Spring Boot ZuL网关中的MaxKeepAliverRequests值修改为高于默认值100的值。注意到该值未在Spring Boo的公共属性列表中公开,我尝试通过@Configuration class设置属性: 但似乎并没有起到预期的效果。有没有一种合适的方法可以让我更改没有通过Spring common properties公开的Tomcat属性?

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