【问题标题】:Error 404, when trying to show something in tomcat尝试在 tomcat 中显示某些内容时出现错误 404
【发布时间】:2021-03-30 18:02:32
【问题描述】:

我在video 中做了所有事情: 但是当我输入:http://localhost:8080/spring-sample-1.0-SNAPSHOT/hello

出现此错误:

HTTP Status 404 – Not Found
Type Status Report

Message The requested resource [/spring-sample-1.0-SNAPSHOT/hello] is not available

Description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists.

我唯一改变的是:tomcat/bin/setclasspath.bat,我在那里添加了一行:

set JRE_HOME=C:\Program Files\Java\jre1.8.0_271

因为没有那个服务器不会启动

好吧,所以我的应用程序真的很简单,我在 java 15 中创建了 mvn 项目,然后是两个类:

配置:


import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

@Configuration
@ComponentScan({"app"})
@EnableWebMvc
public class Config extends AbstractAnnotationConfigDispatcherServletInitializer {
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[0];
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[0];
    }

    @Override
    protected String[] getServletMappings() {
        return new String[0];
    }
}

你好:


import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class Hello {

    @GetMapping("/hello")
    public String get(){
        return "Bycza zagroda!";
    }
}

pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>pl.bykowski</groupId>
    <artifactId>spring-sample</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>

    <properties>
        <maven.compiler.source>15</maven.compiler.source>
        <maven.compiler.target>15</maven.compiler.target>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.1.5.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.9.8</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.9.8</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>3.2.3</version>
                <configuration>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

然后我把所有东西都打包到了war文件中,并在这里添加到tomcat管理器中:要部署的WAR文件

之后我点击了tomcat模块中的/spring-sample-1.0-SNAPSHOT

然后在最后输入你好

有什么想法吗? :/

【问题讨论】:

  • 您提供的视频不是英文的。此外,您不应期望我们观看 19 分钟的视频来了解您作为代码所做的工作。所以,请提供足够的代码来帮助我们理解您的代码和问题,以便我们提供帮助
  • @UsemeAlehosaini 对不起,现在我修好了

标签: java spring tomcat intellij-idea servlets


【解决方案1】:

首先我建议为操作系统设置 JAVA_HOME 或 JRE_HOME 环境变量。 更多详情:https://confluence.atlassian.com/doc/setting-the-java_home-variable-in-windows-8895.html 无论如何更改tomcat的文件都不是好主意:)

如需解决网址无法访问的问题,请查看:

对于已安装的tomcat:

  • 通常,war 文件的名称是上下文名称和 url 的一部分(spring-sample-1.0-SNAPSHOT),但该名称可以在 context.xml 中配置(文档:https://tomcat.apache.org/tomcat-8.0-doc/config/context.html
  • 如您在视频中看到的那样打开管理器窗口 (http://localhost:8080/manager/html) 并找到您的 Web 应用程序的链接

对于嵌入式tomcat:

  • 上下文路径应该类似于 pom.xml 中的 artifactId

【讨论】:

  • 在我的情况下,上下文名称是 .war 文件名。同样在 (localhost:8080/manager/html) 中,我的应用程序作为链接可见:(/spring-sample-1.0-SNAPSHOT)。 ArtifactId = pom.xml 中的'spring-sample' @saver
  • 该war应用程序在tomcat中的部署状态是什么?我认为,您的应用程序在部署过程中出现错误。还有一个问题:你将如何运行编译为 java 15 的应用程序,但 tomcat 是在 java 1.8 下运行的?你会得到不兼容的java版本异常
【解决方案2】:

@saver
部署时从 tomcat 登录:

21-Dec-2020 16:49:22.227 INFO [http-nio-8000-exec-17] org.apache.catalina.startup.HostConfig.deployWAR Deploying web application archive [C:\Users\Damian\Desktop\JAVA\apache-tomcat-8.5.61\webapps\spring-sample3-1.0-SNAPSHOT.war]
21-Dec-2020 16:49:24.113 INFO [http-nio-8000-exec-17] org.apache.jasper.servlet.TldScanner.scanJars 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.
21-Dec-2020 16:49:24.138 INFO [http-nio-8000-exec-17] org.apache.catalina.startup.HostConfig.deployWAR Deployment of web application archive [C:\Users\Damian\Desktop\JAVA\apache-tomcat-8.5.61\webapps\spring-sample3-1.0-SNAPSHOT.war] has finished in [1,907] ms

那么,我应该使用哪些版本的 JRE 和 JDK?

【讨论】:

    【解决方案3】:

    @daniep kajoi 您应该在 java 15 上为 tomcat 设置路径,或者在 1.8 版本的 pom.xml 中更改 maven.compiler.source 属性 - 两个选项之一。 我在你的日志中看到你的路径是'spring-sample3-1.0-SNAPSHOT.war'

    21-Dec-2020 16:49:22.227 INFO [http-nio-8000-exec-17] org.apache.catalina.startup.HostConfig.deployWAR Deploying web application archive [C:\Users\Damian\Desktop\JAVA\apache-tomcat-8.5.61\webapps\spring-sample3-1.0-SNAPSHOT.war]
    21-Dec-2020 16:49:24.113 INFO [http-nio-8000-exec-17] org.apache.jasper.servlet.TldScanner.scanJars 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.
    21-Dec-2020 16:49:24.138 INFO [http-nio-8000-exec-17] org.apache.catalina.startup.HostConfig.deployWAR Deployment of web application archive [C:\Users\Damian\Desktop\JAVA\apache-tomcat-8.5.61\webapps\spring-sample3-1.0-SNAPSHOT.war] has finished in [1,907] ms
    

    尝试打开url:http://localhost:8080/spring-sample3-1.0-SNAPSHOT.war/hello

    【讨论】:

    • 我下载了 Java 8,所以现在一切都是 Java 8。而且还是同样的问题。是的,我知道,我尝试使用 artifactId: spring-sample3 创建新项目。
    【解决方案4】:

    我发现了问题:在 Config 类中,您为 servlet 映射和 servlet 配置类提供了不正确的值。 请按如下方式更改 Config 类:

    @Configuration
    @ComponentScan({"app"})
    @EnableWebMvc
    public class Config extends AbstractAnnotationConfigDispatcherServletInitializer {
        @Override
        protected Class<?>[] getRootConfigClasses() {
            return new Class[0];
        }
    
        @Override
        protected Class<?>[] getServletConfigClasses() {
            return new Class[] {Config.class};
        }
    
        @Override
        protected String[] getServletMappings() {
            return new String[]{"/"};
        }
    }
    

    【讨论】:

    • 非常感谢兄弟
    猜你喜欢
    • 2018-09-24
    • 2019-08-04
    • 2021-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-16
    • 2015-01-10
    • 2012-05-30
    相关资源
    最近更新 更多