Spring Boot -> War File | 404 in Tomcat

Sternenregen

Mitglied
Guten Tag,

Mein Ziel:
ich habe ein Spring Boot Projekt, das ich in ein WAR File umwandeln möchte und dieses dann in Tomcat deploye und ich dann via Browser aufrufen kann.

Was ich nutze:
Thymeleaf, Maven, Spring Boot, JDBC, H2, Java Version 11 Tomcat Version 7(XAMPP)/Tomcat Version 9

Ich habe nur eine Startklasse.

Folgende Vorbereitungen habe ich getroffen:

Der Startklasse habe ich
Java:
...extends SpringBootServletInitializer
und
Java:
 @Override
        protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
            return builder.sources(______.class);
        }

Der POM.XML wurden folgende Dinge eingefügt:

Java:
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>

Java:
<packaging>war</packaging>

Dann hatte ich das Mavenproject geupdated und gerefreshed. Danach Bin ich mit Rechtsklick auf das Projekt gegangen und habe es als Maven-Build compiliert. Als Goals hab ich "clean install" eingegeben.

Es wurde erfolgreich gebaut.

Anschließend habe ihc das WAR File in den webapp Ordner von Tomcat reinverfrachtet. Dann wurde Catalina_start ausgeführt. Das File wurde ohne Fehler deployed.
Auch in den anderen Logs sind KEINE Fehler vorhanden.

[CODE lang="java" title="Tomcat Test"]
localhost:8080[/CODE]
Funktioniert.


Java:
localhost:8080/meinProject
Funktioniert nicht.

Folgende Meldung taucht auf:

Java:
The requested resource [/meinProjekt-0.0.1-SNAPSHOT/] is not available
Beschreibung The origin server did not find a current representation for the target resource or is not willing to disclose that one exists.


Ich hatte mal ein Projekt erstellt mit einem Controller und einer html Seite.

Da hatte es funktioniert.

Wie gesagt. Ich erhalte keinerlei Fehler.
 
Ja, das hatte ich nicht erwähnt.

Ich habe keine Welcomepage festgelegt. Weil ich dachte, wenn ich die URL sowieso händisch angebe, spielt das erstmal keine Rolle. Ich hoffe das war kein Irrglaube.

Der erste Controler startet im Rootverzeichnis. Ich weiß, man muss es nicht so hinschreiben, aber ich habe es so:
Java:
@RequestMapping("/")
 
Hab ein bisschen rumgespielt.

Statt im Root-Tomcat-Verzeichnis habe ich laut eines Forenbeitrages mal im bin Ordner von Tomcat die startup Batchdatei ausgeführt. Da werden diverse Fehler angezeigt.

Wo genau ist denn der Unterschied zwischen Catalina_Start und dem bin/startup?

Hier ist mal meine POM.xml

Java:
<packaging>war</packaging>

    <properties>
        <java.version>11</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>6.1.6.Final</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

Java:
java.lang.Exception: Socket bind failed: [730013] [Der Zugriff auf einen Socket war aufgrund der Zugriffsrechte des Sockets unzulässig.  ]
    at org.apache.tomcat.util.net.AprEndpoint.bind(AprEndpoint.java:500)
    at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:750)
    at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:467)
    at org.apache.catalina.connector.Connector.initInternal(Connector.java:1030)
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:136)
    at org.apache.catalina.core.StandardService.initInternal(StandardService.java:560)
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:136)
    at org.apache.catalina.core.StandardServer.initInternal(StandardServer.java:826)
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:136)
    at org.apache.catalina.startup.Catalina.load(Catalina.java:663)
    at org.apache.catalina.startup.Catalina.load(Catalina.java:686)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:244)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)

Okt 19, 2020 1:11:42 PM org.apache.catalina.core.StandardService initInternal
SCHWERWIEGEND: Failed to initialize connector [Connector[HTTP/1.1-8080]]
org.apache.catalina.LifecycleException: Protocol handler initialization failed
    at org.apache.catalina.connector.Connector.initInternal(Connector.java:1032)
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:136)
    at org.apache.catalina.core.StandardService.initInternal(StandardService.java:560)
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:136)
    at org.apache.catalina.core.StandardServer.initInternal(StandardServer.java:826)
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:136)
    at org.apache.catalina.startup.Catalina.load(Catalina.java:663)
    at org.apache.catalina.startup.Catalina.load(Catalina.java:686)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:244)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
Caused by: java.lang.Exception: Socket bind failed: [730013] [Der Zugriff auf einen Socket war aufgrund der Zugriffsrechte des Sockets unzulässig.  ]
    at org.apache.tomcat.util.net.AprEndpoint.bind(AprEndpoint.java:500)
    at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:750)
    at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:467)
    at org.apache.catalina.connector.Connector.initInternal(Connector.java:1030)
    ... 13 more
  
    SCHWERWIEGEND: StandardServer.await: create[localhost:8005]:
java.net.BindException: Address already in use: JVM_Bind
    at java.net.DualStackPlainSocketImpl.bind0(Native Method)
    at java.net.DualStackPlainSocketImpl.socketBind(Unknown Source)
    at java.net.AbstractPlainSocketImpl.bind(Unknown Source)
    at java.net.PlainSocketImpl.bind(Unknown Source)
    at java.net.ServerSocket.bind(Unknown Source)
    at java.net.ServerSocket.<init>(Unknown Source)
    at org.apache.catalina.core.StandardServer.await(StandardServer.java:428)
    at org.apache.catalina.startup.Catalina.await(Catalina.java:800)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:746)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:284)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:415)
 
Jou. Da lief noch ne andere Version. Noch ne Idee warum ich das

Java:
The requested resource [/meinProjekt-0.0.1-SNAPSHOT/] is not available
Beschreibung The origin server did not find a current representation for the target resource or is not willing to disclose that one exists.

erahlte?
 
Ich hab das Projekt mal innerhalb von Eclipse auf einem Tomcat laufen lassen. Das geht!

Was hat es denn mit den goals auf sich? Hab da "clean install" gewählt.

Nur die WAR geht nicht.

Hat jemand noch ne Idee? :/
 
Zuletzt bearbeitet:
Was hat es denn mit den goals auf sich? Hab da "clean install" gewählt.
clean löscht die Ergebnisse des bisherigen Builds, install baut deine Applikation, führt alle Tests aus, und installiert das Ergebnis im lokalen Maven-Repo (grob gesagt): http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html

Für deinen Fall würde auch package oder, wenn du Integration-Tests hast, verify, reichen.

Hat jemand noch ne Idee? :/
Pfade stimmen alle?
Fehler stehen im Tomcat-Log nicht?
Startet die Spring-Boot Anwendung denn korrekt, sollte im Log ersichtlich sein?


Spring boot Applikationen sind eigentlich Standalone.
Lassen sich aber auch problelos als war in einem Servletcontainer ausführen 🙂
 
Ok ok ok...

Wie gesagt. Wenn ich das ganze auf einen Tomcatserver innerhalb von Eclipse starte, geht es. Nur nicht mehr, nachdem ich es zum WAR File exportiert habe.

Hab jetzt mal ein kleines Projekt gemacht. Ne HTML und ein Controller. Gleiches Problem. Das Thema ist echt zum kotzen.

Java:
 CATALINA_BASE:         C:\xampp\tomcat
Okt 19, 2020 5:43:21 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMATION: CATALINA_HOME:         C:\xampp\tomcat
Okt 19, 2020 5:43:21 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMATION: Command line argument: -Djava.util.logging.config.file=C:\xampp\tomcat\conf\logging.properties
Okt 19, 2020 5:43:21 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMATION: Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
Okt 19, 2020 5:43:21 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMATION: Command line argument: -Djdk.tls.ephemeralDHKeySize=2048
Okt 19, 2020 5:43:21 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMATION: Command line argument: -Dignore.endorsed.dirs=
Okt 19, 2020 5:43:21 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMATION: Command line argument: -Dcatalina.base=C:\xampp\tomcat
Okt 19, 2020 5:43:21 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMATION: Command line argument: -Dcatalina.home=C:\xampp\tomcat
Okt 19, 2020 5:43:21 PM org.apache.catalina.startup.VersionLoggerListener log
INFORMATION: Command line argument: -Djava.io.tmpdir=C:\xampp\tomcat\temp
Okt 19, 2020 5:43:21 PM org.apache.catalina.core.AprLifecycleListener lifecycleEvent
INFORMATION: The Apache Tomcat Native library which allows using OpenSSL was not found on the java.library.path: [C:\Program Files\Java\jre1.8.0_261\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:\Program Files\Common Files\Oracle\Java\javapath;C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\NVIDIA Corporation\NVIDIA NvDLISR;C:\Program Files\Git\cmd;C:\Program Files\dotnet\;C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\170\Tools\Binn\;C:\Program Files\Java\jdk-14.0.1\bin;C:\Users\Skynet\AppData\Local\Microsoft\WindowsApps;;C:\Users\Skynet\AppData\Local\Programs\Microsoft VS Code\bin;.]
Okt 19, 2020 5:43:21 PM org.apache.coyote.AbstractProtocol init
INFORMATION: Initialisiere ProtocolHandler["http-bio-8080"]
Okt 19, 2020 5:43:21 PM org.apache.catalina.startup.Catalina load
INFORMATION: Initialization processed in 336 ms
Okt 19, 2020 5:43:21 PM org.apache.catalina.core.StandardService startInternal
INFORMATION: Starting service [Catalina]
Okt 19, 2020 5:43:21 PM org.apache.catalina.core.StandardEngine startInternal
INFORMATION: Starting Servlet Engine: Apache Tomcat/7.0.105
Okt 19, 2020 5:43:21 PM org.apache.catalina.startup.HostConfig deployWAR
INFORMATION: Deploying web application archive [C:\xampp\tomcat\webapps\makewarnotlove.war]
Okt 19, 2020 5:43:23 PM org.apache.catalina.startup.TldConfig execute
INFORMATION: 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.
Okt 19, 2020 5:43:23 PM org.apache.catalina.startup.HostConfig deployWAR
INFORMATION: Deployment of web application archive [C:\xampp\tomcat\webapps\makewarnotlove.war] has finished in [1.579] ms
Okt 19, 2020 5:43:23 PM org.apache.catalina.startup.HostConfig deployDirectory
INFORMATION: Deploye Web-Applikations-Verzeichnis [C:\xampp\tomcat\webapps\docs]
Okt 19, 2020 5:43:23 PM org.apache.catalina.startup.HostConfig deployDirectory
INFORMATION: Deployment of web application directory [C:\xampp\tomcat\webapps\docs] has finished in [33] ms
Okt 19, 2020 5:43:23 PM org.apache.catalina.startup.HostConfig deployDirectory
INFORMATION: Deploye Web-Applikations-Verzeichnis [C:\xampp\tomcat\webapps\examples]
Okt 19, 2020 5:43:23 PM org.apache.catalina.startup.HostConfig deployDirectory
INFORMATION: Deployment of web application directory [C:\xampp\tomcat\webapps\examples] has finished in [136] ms
Okt 19, 2020 5:43:23 PM org.apache.catalina.startup.HostConfig deployDirectory
INFORMATION: Deploye Web-Applikations-Verzeichnis [C:\xampp\tomcat\webapps\host-manager]
Okt 19, 2020 5:43:23 PM org.apache.catalina.startup.HostConfig deployDirectory
INFORMATION: Deployment of web application directory [C:\xampp\tomcat\webapps\host-manager] has finished in [28] ms
Okt 19, 2020 5:43:23 PM org.apache.catalina.startup.HostConfig deployDirectory
INFORMATION: Deploye Web-Applikations-Verzeichnis [C:\xampp\tomcat\webapps\manager]
Okt 19, 2020 5:43:23 PM org.apache.catalina.startup.HostConfig deployDirectory
INFORMATION: Deployment of web application directory [C:\xampp\tomcat\webapps\manager] has finished in [26] ms
Okt 19, 2020 5:43:23 PM org.apache.catalina.startup.HostConfig deployDirectory
INFORMATION: Deploye Web-Applikations-Verzeichnis [C:\xampp\tomcat\webapps\ROOT]
Okt 19, 2020 5:43:23 PM org.apache.catalina.startup.HostConfig deployDirectory
INFORMATION: Deployment of web application directory [C:\xampp\tomcat\webapps\ROOT] has finished in [20] ms
Okt 19, 2020 5:43:23 PM org.apache.coyote.AbstractProtocol start
INFORMATION: Starting ProtocolHandler ["http-bio-8080"]
Okt 19, 2020 5:43:23 PM org.apache.catalina.startup.Catalina start
INFORMATION: Server startup in 1855 ms





1233.PNG



0:0:0:0:0:0:0:1 - - [19/Oct/2020:17:44:06 +0200] "GET /makewarnotlove/ HTTP/1.1" 404 774



Vielleicht hilft das.
 
Tomcat 7 ist doch uralt und seit längere von Spring Boot nicht mehr unterstützt?

Dem Log nach wird Spring in dem Projekt auch nicht korrekt initialisiert (oder ich übersehe was), kannst du das Projekt mal teilen?
 
Klar. Hier:

Das ist die Version die bei XAMPP dabei ist. Das Problem war bei dem Tomcat 9er auch.

Habs auch grad nochmal getestet um alle Zweifel auszuräumen. Bin mal gespannt ob du was entdeckst.
Fast 50MB? 🤨 was hast du da hochgeladen? 😅 pom + die paar Java-Dateien reicht 🙂
 
Ich konnte die rar-Dateien in Eclipse nicht öffnen. Wäre gut wenn die Poster darauf achten würden. Mein versuch: "File/Import/J2EE/rar/" und dann Datei herausgesucht. Bei der ersten Datei hat er mir nur die Compilierungen angezeigt ohne Quellcode.
 

Zurück
Oben