Я работаю над веб-приложением, которое должно быть расширяемым таким образом, чтобы 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? Если да, то как настроить несколько распознавателей?
- Я что-то не так делаю?