Ошибка 404 при попытке показать что-то в tomcat

Я сделал все в этом видео: Но когда я печатаю: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

Потому что без этого сервер не запускается

Итак, мое приложение действительно простое, я создал проект mvn в java 15, затем два класса:

Конфигурация:


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!";
    }
}

пом.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>

Затем я упаковал все в файл войны и добавил его в диспетчере tomcat здесь: файл WAR для развертывания

После этого я нажал /spring-sample-1.0-SNAPSHOT в модуле tomcat.

а потом напечатал привет в конце

Любые идеи, что происходит не так? :/

Видео, которое вы предоставили, не на английском языке. Также не стоит ожидать, что мы просмотрим 19-минутное видео, чтобы понять, что вы сделали в виде кода. Поэтому, пожалуйста, предоставьте достаточно кода, чтобы помочь нам понять ваш код и проблему, чтобы мы могли помочь

Useme Alehosaini 21.12.2020 01:04

@UsemeAlehosaini Извините, теперь я исправил

daniep kajoi 21.12.2020 01:19
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
2
1 816
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Прежде всего, я рекомендую настроить переменную env JAVA_HOME или JRE_HOME для ОС. Подробнее: https://confluence.atlassian.com/doc/setting-the-java_home-variable-in-windows-8895.html В любом случае менять файлы tomcat не очень хорошая идея :)

Для решения проблемы с недоступным URL-адресом проверьте:

для установленного кота:

  • как правило, имя файла войны является контекстным именем и частью URL-адреса (spring-sample-1.0-SNAPSHOT), но это имя можно настроить в context.xml (Документация: https://tomcat.apache.org/ tomcat-8.0-doc/config/context.html)
  • откройте окно менеджера, как показано на видео (http://localhost:8080/manager/html), и найдите ссылку на свое веб-приложение.

для встроенного кота:

  • путь контекста должен быть похож на ArtiftId в pom.xml

Имя контекста — это имя файла .war в моей ситуации. Также в (localhost:8080/manager/html) мое приложение отображается как ссылка: (/spring-sample-1.0-SNAPSHOT). ArtifactId = 'spring-sample' в pom.xml @saver

daniep kajoi 21.12.2020 00:57

Каков статус развертывания в tomcat для этого военного приложения? Я думаю, ваше приложение имеет ошибки во время процесса развертывания. И дополнительный вопрос: как вы собираетесь запускать приложение, которое скомпилировано в java 15, но tomcat запускался под java 1.8? Вы получите исключение несовместимости версии Java

saver 21.12.2020 16:15

@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 мне следует использовать?

@daniep kajoi, вы должны указать путь к java 15 для tomcat или изменить атрибут maven.compiler.source в pom.xml в версии 1.8 — один из двух вариантов. И я вижу в вашем журнале, что ваш путь - «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. И все та же проблема. Да, я знаю, я пытался создать новый проект с идентификатором артефакта: spring-sample3.

daniep kajoi 21.12.2020 17:45
Ответ принят как подходящий

Я обнаружил проблему: в классе 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[]{"/"};
    }
}

Большое спасибо, братан <3 Создатель видео не упомянул об изменении методов переопределения

daniep kajoi 21.12.2020 18:07

Другие вопросы по теме