Spring MVC с jsp файлами в WAR, а также в JAR-файлах - PullRequest
0 голосов
/ 25 января 2020

Я работаю над веб-приложением, которое должно быть расширяемым таким образом, чтобы jar-файлы содержали все, что требуется для расширения или модуля, включая модели, представления, а также контроллеры. Одна банка для одного расширения. Я, однако, застрял со ссылкой на JSP внутри JAR, хотя после дня попыток и поиска в Google я больше не уверен, возможно ли это вообще.

Среда и библиотеки, если они актуальны: STS 4, Tomcat 9, Java 8, Spring 5.2.2.RELEASE, servlet-api 4.0.1

Конфигурация платформы основана на XML, а расширения основаны на аннотациях.

Что у меня есть:

mvc -диспетчер-сервлет. xml (переходит в WAR)

<mvc:annotation-driven />

<!-- it instantiates BarController from the JAR that meant to use bar.jsp from the JAR -->
<context:component-scan base-package="acme.jar.with.jsps.controllers.are.in.this.pkg" />

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  <property name="prefix" value="/WEB-INF/views/jsp/"></property>
  <property name="suffix" value=".jsp"></property>
</bean>

<!-- it instantiates FooController that uses foo.jsp -->
<bean class="acme.this.controller.is.not.in.jar.FooController" /> 

bar. jsp в банке

пом. xml

<build>
  <resources>
    <resource>
      <directory>src/main/webapp</directory>
    </resource>
...

и бар. jsp

$ find . -name "*.jsp"
./target/classes/WEB-INF/views/jsp/bar.jsp
./src/main/webapp/WEB-INF/views/jsp/bar.jsp

foo. jsp от WAR все хорошо

DEBUG|org.springframework.web.servlet.view.JstlView|View name 'FooController', model {...
DEBUG|org.springframework.web.servlet.view.JstlView|Forwarding to [/WEB-INF/views/jsp/foo.jsp]
DEBUG|org.springframework.web.servlet.DispatcherServlet|Completed 200 OK

бар . jsp из JAR не может быть найдено

DEBUG|org.springframework.web.servlet.view.JstlView|View name 'BarController', model {...
DEBUG|org.springframework.web.servlet.view.JstlView|Forwarding to [/WEB-INF/views/jsp/bar.jsp]
DEBUG|org.springframework.web.servlet.DispatcherServlet|Completed 404 NOT_FOUND

Мои вопросы

  • Можно ли вообще указать JSP в JAR? Я пытался использовать много разных префиксов для InternalResourceViewResolver, но ни один из них не смог получить JSP из JAR.
  • Существует ли преобразователь представлений, способный извлекать JSP из JAR? Если да, то как настроить несколько распознавателей?
  • Я что-то не так делаю?

1 Ответ

1 голос
/ 26 января 2020

Что ж, вся история 'JSP внутри JAR' длинна и полна боли.

Если вкратце: даже если вы сможете заставить это работать - всегда будет что-то сломанное parts.

Вот более-менее рабочий образец: https://github.com/hengyunabc/spring-boot-fat-jar-jsp-sample

Вот аналогичный вопрос с некоторыми деталями:
Возможно ли это с помощью Spring Загрузка для обслуживания JSP с JAR-упаковкой?

Лучше всего будет использовать WAR-упаковку вместо JAR.

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