#java #spring #tomcat #intellij-idea #servlets
#java #весна #tomcat #intellij-идея #сервлеты
Вопрос:
Я сделал все в этом видео: но когда я печатаю: 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 FilesJavajre1.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!";
}
}
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 для развертывания
После этого я нажал /spring-sample-1.0-SNAPSHOT в модуле tomcat
а затем набрал привет в конце
Есть идеи, что происходит не так? :/
Комментарии:
1. Предоставленное вами видео не на английском языке. Кроме того, вы не должны ожидать, что мы посмотрим 19-минутное видео, чтобы понять, что вы сделали в качестве кода. Поэтому, пожалуйста, предоставьте достаточно кода, чтобы помочь нам понять ваш код и проблему, чтобы мы могли помочь
2. @UsemeAlehosaini Извините, теперь я это исправил
Ответ №1:
Я обнаружил проблему: в классе конфигурации вы указали неправильные значения для сопоставления сервлетов и класса конфигурации сервлета. Пожалуйста, измените класс конфигурации следующим образом:
@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[]{"/"};
}
}
Комментарии:
1. Большое тебе спасибо, брат <3 Создатель видео не упомянул об изменении методов переопределения
Ответ №2:
Прежде всего, я рекомендую установить переменную JAVA_HOME или JRE_HOME env для ОС. Для получения более подробной информации: https://confluence.atlassian.com/doc/setting-the-java_home-variable-in-windows-8895.html В любом случае изменение файлов tomcat — не очень хорошая идея 🙂
Для решения проблемы с недоступным URL, пожалуйста, проверьте:
для установленного 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 ) и найдите ссылку вашего веб-приложения
для встроенного tomcat:
- контекстный путь должен быть похож на artifactId в pom.xml
Комментарии:
1. В моей ситуации имя контекста — это имя файла .war. Также в ( localhost:8080/manager/html ) мое приложение отображается как ссылка: (/spring-sample-1.0-SNAPSHOT). artifactId = ‘spring-sample’ в pom.xml @заставка
2. Каков статус развертывания в tomcat для этого приложения war? Я думаю, что в вашем приложении есть ошибки во время процесса развертывания. И дополнительный вопрос: как вы собираетесь запускать приложение, которое скомпилировано на java 15, но tomcat был запущен под java 1.8? Вы получите исключение несовместимости версии java
Ответ №3:
@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:UsersDamianDesktopJAVAapache-tomcat-8.5.61webappsspring-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:UsersDamianDesktopJAVAapache-tomcat-8.5.61webappsspring-sample3-1.0-SNAPSHOT.war] has finished in [1,907] ms
Итак, какие версии JRE и JDK я должен использовать?
Ответ №4:
@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:UsersDamianDesktopJAVAapache-tomcat-8.5.61webappsspring-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:UsersDamianDesktopJAVAapache-tomcat-8.5.61webappsspring-sample3-1.0-SNAPSHOT.war] has finished in [1,907] ms
попробуйте открыть url: http://localhost:8080/spring-sample3-1.0-SNAPSHOT.war/hello
Комментарии:
1. Я скачал Java 8, так что теперь все Java 8. И все та же проблема. Да, я знаю, я пытался создать новый проект с artifactId: spring-sample3.