Настройка расположения веб-ресурсов при упаковке в WAR для Apache Tomcat - PullRequest
1 голос
/ 23 сентября 2019

Я пытаюсь развернуть свое веб-приложение на Apache Tomcat без использования встроенного сервера в Spring Boot.Я выполнил все шаги, описанные в руководствах, и успешно развернул приложение (я имею в виду, что оно найдено в диспетчере Tomcat), но когда я перехожу к URL-адресу веб-приложения, я получаю 404.

Проблема заключается в том, чточто мои HTML-файлы находятся в webapps / mywebapp / WEB-INF / classes.Когда я перемещаю HTML-файлы в просто webapps / mywebapp, страница успешно загружается, но без ресурсов, таких как мои файлы javascript или файлы изображений.При запуске приложения с использованием встроенного сервера весенней загрузки веб-приложение работает просто отлично.Вот моя структура проекта:

enter image description here

My pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<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>io.johnnathan.springboot</groupId>
    <artifactId>product-store</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>

    <name>product-store</name>
    <description>Product storefront using Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.4.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <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>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>

        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>

        </dependency>
        <dependency>
            <groupId>org.webjars</groupId>
            <artifactId>bootstrap</artifactId>
            <version>4.1.3</version>

        </dependency>
        <dependency>
            <groupId>org.webjars</groupId>
            <artifactId>jquery</artifactId>
            <version>3.3.1</version>

        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.12</version><!--$NO-MVN-MAN-VER$-->

        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.0.8.RELEASE</version><!--$NO-MVN-MAN-VER$-->

        </dependency>
    </dependencies>

    <build>
        <finalName>${project.artifactId}</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>


</project>

Структура файла распакованного файла WAR при развертывании черезApache Tomcat (содержится в папке product-store (mywebapp):

+---META-INF
|   |   MANIFEST.MF
|   |   war-tracker
|   |
|   \---maven
|       \---io.johnnathan.springboot
|           \---product-store
|                   pom.properties
|                   pom.xml
|
+---org
|   \---springframework
|       \---boot
|           \---loader
|               |   ExecutableArchiveLauncher.class
|               |   JarLauncher.class
|               |   LaunchedURLClassLoader$UseFastConnectionExceptionsEnumeration.class
|               |   LaunchedURLClassLoader.class
|               |   Launcher.class
|               |   MainMethodRunner.class
|               |   PropertiesLauncher$1.class
|               |   PropertiesLauncher$ArchiveEntryFilter.class
|               |   PropertiesLauncher$PrefixMatchingArchiveFilter.class
|               |   PropertiesLauncher.class
|               |   WarLauncher.class
|               |
|               +---archive
|               |       Archive$Entry.class
|               |       Archive$EntryFilter.class
|               |       Archive.class
|               |       ExplodedArchive$1.class
|               |       ExplodedArchive$FileEntry.class
|               |       ExplodedArchive$FileEntryIterator$EntryComparator.class
|               |       ExplodedArchive$FileEntryIterator.class
|               |       ExplodedArchive.class
|               |       JarFileArchive$EntryIterator.class
|               |       JarFileArchive$JarFileEntry.class
|               |       JarFileArchive.class
|               |
|               +---data
|               |       RandomAccessData.class
|               |       RandomAccessDataFile$1.class
|               |       RandomAccessDataFile$DataInputStream.class
|               |       RandomAccessDataFile$FileAccess.class
|               |       RandomAccessDataFile.class
|               |
|               +---jar
|               |       AsciiBytes.class
|               |       Bytes.class
|               |       CentralDirectoryEndRecord.class
|               |       CentralDirectoryFileHeader.class
|               |       CentralDirectoryParser.class
|               |       CentralDirectoryVisitor.class
|               |       FileHeader.class
|               |       Handler.class
|               |       JarEntry.class
|               |       JarEntryFilter.class
|               |       JarFile$1.class
|               |       JarFile$2.class
|               |       JarFile$JarFileType.class
|               |       JarFile.class
|               |       JarFileEntries$1.class
|               |       JarFileEntries$EntryIterator.class
|               |       JarFileEntries.class
|               |       JarURLConnection$1.class
|               |       JarURLConnection$JarEntryName.class
|               |       JarURLConnection.class
|               |       StringSequence.class
|               |       ZipInflaterInputStream.class
|               |
|               \---util
|                       SystemPropertyUtils.class
|
\---WEB-INF
    +---classes
    |   |   application.properties
    |   |
    |   +---io
    |   |   \---johnnathan
    |   |       \---springboot
    |   |           |   ProductStoreApp.class
    |   |           |
    |   |           +---index
    |   |           |       IndexController.class
    |   |           |
    |   |           \---product
    |   |                   Product.class
    |   |                   ProductController.class
    |   |                   ProductDAO$1.class
    |   |                   ProductDAO$ProductRowMapper.class
    |   |                   ProductDAO.class
    |   |                   ProductService.class
    |   |
    |   +---static
    |   |   +---css
    |   |   |       bootstrap.min.css
    |   |   |       custom.css
    |   |   |
    |   |   +---images
    |   |   |   |   lights.jpg
    |   |   |   |   mountain.jpg
    |   |   |   |
    |   |   |   \---svg
    |   |   |           house-with-wifi-svgrepo-com.svg
    |   |   |
    |   |   \---js
    |   |           addProduct.js
    |   |           bootstrap.min.js
    |   |           custom.js
    |   |           jquery-3.3.1.js
    |   |
    |   \---templates
    |           addProduct.html
    |           index.html
    |           productPage.html
    |           products.html
    |
    +---lib
    |       accessors-smart-1.2.jar
    |       android-json-0.0.20131108.vaadin1.jar
    |       asm-5.0.4.jar
    |       assertj-core-3.9.1.jar
    |       attoparser-2.0.4.RELEASE.jar
    |       bootstrap-4.1.3.jar
    |       byte-buddy-1.7.11.jar
    |       byte-buddy-agent-1.7.11.jar
    |       hamcrest-core-1.3.jar
    |       hamcrest-library-1.3.jar
    |       HikariCP-2.7.9.jar
    |       javax.annotation-api-1.3.2.jar
    |       jquery-3.3.1.jar
    |       json-path-2.4.0.jar
    |       json-smart-2.3.jar
    |       jsonassert-1.5.0.jar
    |       jul-to-slf4j-1.7.25.jar
    |       junit-4.12.jar
    |       log4j-api-2.10.0.jar
    |       log4j-to-slf4j-2.10.0.jar
    |       logback-classic-1.2.3.jar
    |       logback-core-1.2.3.jar
    |       mockito-core-2.15.0.jar
    |       mysql-connector-java-8.0.12.jar
    |       objenesis-2.6.jar
    |       popper.js-1.14.3.jar
    |       protobuf-java-2.6.0.jar
    |       slf4j-api-1.7.25.jar
    |       snakeyaml-1.19.jar
    |       spring-aop-5.0.8.RELEASE.jar
    |       spring-beans-5.0.8.RELEASE.jar
    |       spring-boot-2.0.4.RELEASE.jar
    |       spring-boot-autoconfigure-2.0.4.RELEASE.jar
    |       spring-boot-starter-2.0.4.RELEASE.jar
    |       spring-boot-starter-jdbc-2.0.4.RELEASE.jar
    |       spring-boot-starter-logging-2.0.4.RELEASE.jar
    |       spring-boot-starter-test-2.0.4.RELEASE.jar
    |       spring-boot-starter-thymeleaf-2.0.4.RELEASE.jar
    |       spring-boot-test-2.0.4.RELEASE.jar
    |       spring-boot-test-autoconfigure-2.0.4.RELEASE.jar
    |       spring-context-5.0.8.RELEASE.jar
    |       spring-core-5.0.8.RELEASE.jar
    |       spring-expression-5.0.8.RELEASE.jar
    |       spring-jcl-5.0.8.RELEASE.jar
    |       spring-jdbc-5.0.8.RELEASE.jar
    |       spring-test-5.0.8.RELEASE.jar
    |       spring-tx-5.0.8.RELEASE.jar
    |       thymeleaf-3.0.9.RELEASE.jar
    |       thymeleaf-extras-java8time-3.0.1.RELEASE.jar
    |       thymeleaf-spring5-3.0.9.RELEASE.jar
    |       unbescape-1.1.5.RELEASE.jar
    |       xmlunit-core-2.5.1.jar
    |
    \---lib-provided
            classmate-1.3.4.jar
            hibernate-validator-6.0.11.Final.jar
            jackson-annotations-2.9.0.jar
            jackson-core-2.9.6.jar
            jackson-databind-2.9.6.jar
            jackson-datatype-jdk8-2.9.6.jar
            jackson-datatype-jsr310-2.9.6.jar
            jackson-module-parameter-names-2.9.6.jar
            javafx.base-11.0.0-SNAPSHOT-linux.jar
            javafx.base-11.0.0-SNAPSHOT-mac.jar
            javafx.base-11.0.0-SNAPSHOT-win.jar
            javafx.base-11.0.0-SNAPSHOT.jar
            jboss-logging-3.3.2.Final.jar
            spring-boot-starter-json-2.0.4.RELEASE.jar
            spring-boot-starter-tomcat-2.0.4.RELEASE.jar
            spring-boot-starter-web-2.0.4.RELEASE.jar
            spring-web-5.0.8.RELEASE.jar
            spring-webmvc-5.0.8.RELEASE.jar
            tomcat-embed-core-8.5.32.jar
            tomcat-embed-el-8.5.32.jar
            tomcat-embed-websocket-8.5.32.jar
            validation-api-2.0.1.Final.jar

Нужно ли перемещать все мои веб-ресурсы в другую файловую структуру? Если да, какова правильная файловая структура при развертывании как WAR??

1 Ответ

0 голосов
/ 23 сентября 2019

Проблема была с моим pom.xml.

Зависимость:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <scope>provided</scope>
    </dependency>

поставляется со встроенным сервером, поэтому я установил область действия как «предоставленную».Однако в этой зависимости есть и другие вещи, необходимые для правильного развертывания как WAR.Поэтому я изменил эту зависимость на:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-tomcat</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>provided</scope>
    </dependency>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...