Почему мои jsp-файлы не отображаются при развертывании Tomcat в war-файле? - PullRequest
0 голосов
/ 08 февраля 2019

ДРУГОЕ РЕДАКТИРОВАНИЕ: Я просто перечитал его, и вопрос очень двусмысленный: проблема в том, что Tomcat не покажет мне взгляды.Они находятся в папке в каталоге веб-приложений Tomcat.

РЕДАКТИРОВАТЬ: BOUNTY доступно.Код: здесь

У меня есть веб-приложение с весенней загрузкой, которое нормально работает на сервере Eclipse Tomcat, когда я перехожу на http://localhost:8080/swa-boot/. Когда я пытаюсь развернуть его как войнуTomcat 9.0.14 извне я получаю:

Сообщение /swa-boot/WEB-INF/views/home.jsp

Описание Исходный сервер не нашел текущего представления дляцелевой ресурс или не желает раскрывать, что он существует.

home.jsp находится в папке views.

Я попытался добавить ресурс в ресурс:

        <directory>${basedir}/src/main/webapp</directory>
        <includes>
            <include>**/**</include>
        </includes>

И зависимость

    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
    <scope>provided</scope>

Я также попытался удалить «предоставленную» область.

У меня есть в application.properties:

spring.mvc.view.prefix=/WEB-INF/views/ 
spring.mvc.view.suffix=.jsp

Я изменил все теги <a на страницах jsp в форме: <a href=" <spring:url value="/mappedpath" /> ">TakeMeToTheController</a>.

Я добавил папку представлений в сборку развертывания.

Папки в папке tomcatвеб-приложения выглядят так: enter image description here

А в каталоге веб-приложений сервера tomcat: enter image description here

Есть идеи?

РЕДАКТИРОВАТЬ: сборки развертывания: enter image description here

Ответы [ 3 ]

0 голосов
/ 13 февраля 2019

Мне кажется, что ваша конфигурация неверна:

<servlet>
    <servlet-name>appServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

Файл, на который ссылается - servlet-context.xml - не существует в WEB-INF, но в src/main/resources, что означает, что во время выполнения он будет находиться подкорень пути к классу, и поэтому на него следует ссылаться, как показано ниже:

<param-value>classpath:/servlet-context.xml</param-value>

Вы также можете удалить это из POM и полностью удалить папку WebContent, поскольку корень вашего веб-приложения, являющегося проектом Maven, теперьвеб-приложение, а не веб-контент.

<warSourceDirectory>WebContent</warSourceDirectory> 
0 голосов
/ 13 февраля 2019

Вы должны внести пару изменений.

Первое изменение - удалить конфигурацию ресурсов.Это упаковывает все в / src / main / webapp в классы WEB-INF / с той же исходной структурой.

<resources>
   <resource>
    <directory>${basedir}/src/main/webapp</directory>
       <includes>
          <include>**/**</include>
       </includes>
   </resource>
   <resource>
    <directory>src/main/webapp</directory>
   </resource>
   <resource>
    <directory>${basedir}/src/main/resources</directory>
      <includes>
         <include>**/**</include>
      </includes>
   </resource>
</resources>

Следующее изменение - удалить <warSourceDirectory>WebContent</warSourceDirectory> из плагина войны.Это не позволяет обрабатывать веб-ресурсы.

<plugin>
    <artifactId>maven-war-plugin</artifactId>
</plugin>

Следующим шагом является запуск maven clean install. В вашей войне вы должны получить следующую структуру, и Spring сможет правильно найти ваш jsps.

WEB-INF
   classes
      org
      META-INF
      static
      templates
   lib
   spring
   tags
   views
resources

Обновление - Наконец-то удалось оформить заказ.Чтобы запустить загрузочное приложение Spring как традиционную войну внутри контейнера, вам нужно внести еще несколько изменений.

Web.xml изменить, чтобы правильно найти сервлет приложения и удалить SpringBoot ServletIntializer и удалить аннотацию ресурсов импорта.

Вот и все изменения.

Доступны изменения в github - https://github.com/saagar2000/springboot-traditional

enter image description here

enter image description here

0 голосов
/ 12 февраля 2019

Похоже, что сгенерированная война не захватывает содержимое вашей папки src / main / webapp.

Изменить строку №.72 в вашем pom.xml, как показано ниже <warSourceDirectory>src/main/webapp</warSourceDirectory>

Таким образом, сгенерированная война будет иметь содержимое src / main / webapp.Испытай новую войну и посмотри.Проверьте этот вопрос, чтобы увидеть, как правильно указать warSourceDirectory.

Редактировать Кроме того, вам необходимо удалить файл web.xml из папки src/main/webapp/WEB-INF.Либо удалите его, либо переместите за пределы папки src.

Затем запустите mvn clean install и разверните target/swa-boot.war на tomcat.

Рабочая копия здесь - https://storage.googleapis.com/schoon/swa-boot.zip

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...