Spring папка с шаблонами загрузочных ресурсов загрузки с шаблонами JSP вместо папки webapp?
Я начал проект Spring Boot MVC и понял, что есть две папки с resources
. Один называется templates
, а другой static
. Мне очень нравится эта папка setup.r
Проблема в том, что я использую JSP-шаблоны для своих просмотров. Я не мог разместить шаблон .jsp внутри папки templates
и заставить его работать.
Мне нужно было создать папку webapp
на том же уровне, что и src
и resources
. Размещение моих JSP-шаблонов там, а затем мои взгляды можно найти.
Что мне нужно для переконфигурации для фактического использования моих шаблонов JSP в папке templates
, которая находится в пределах resources
?
Ответы
Ответ 1
Официальная информация:
Обработка ресурсов:
Связи с ресурсами переписываются во время выполнения в шаблоне, благодаря ResourceUrlEncodingFilter, автоматически настроенный для Thymeleaf и FreeMarker. Вы должны вручную объявить этот фильтр при использовании JSP. источник
Поддерживаемый движок шаблонов
Помимо веб-служб REST, вы также можете использовать Spring MVC для обслуживания динамический HTML-контент. Spring MVC поддерживает множество шаблонов технологий, включая Thymeleaf, FreeMarker и JSP.
[...]
Следует избегать JSP, если это возможно, существует несколько известных ограничений при использовании их со встроенными контейнерами сервлетов.
[..]
Если вы используете один из этих шаблонов с настройками по умолчанию конфигурации, ваши шаблоны будут автоматически загружены из SRC/основные/ресурсы/шаблоны.
источник
Spring ограничения загрузки JSP
- С Tomcat он должен работать, если вы используете военную упаковку, т.е. исполняемая война будет работать, а также будет развертываться в стандартном режиме контейнер (не ограничиваясь, но включая Tomcat).
- Исполняемая банка не будет работать из-за жестко закодированного шаблона файла в Tomcat.
- С Jetty он должен работать, если вы используете военную упаковку, т.е. исполняемая война будет работать, а также будет использоваться для любых стандартный контейнер.
- Undertow не поддерживает JSP.
- Создание настраиваемой страницы error.jsp не приведет к переопределению представления по умолчанию для обработки ошибок, вместо этого следует использовать пользовательские страницы ошибок.
источник
Техническое изменение
Скажите Spring загрузку с места загрузки JSP files
. В application.properties
установите
spring.mvc.view.prefix: /WEB-INF/views/
spring.mvc.view.suffix: .jsp
источник
Пример Spring загрузки с JSP
Если вы хотите использовать JSP
с загрузкой Spring, вот два примера:
https://github.com/spring-projects/spring-boot/tree/v1.5.9.RELEASE/spring-boot-samples/spring-boot-sample-web-jsp
https://github.com/joakime/spring-boot-jsp-demo
Ответ 2
В соответствии с документация Maven src/main/resources
закончится в WEB-INF/classes
в WAR.
Это делает трюк для Spring Boot в вашем application.properties
:
spring.mvc.view.prefix = /WEB-INF/classes/templates
spring.mvc.view.suffix = .jsp
Если вы предпочитаете конфигурацию Java, это способ:
@EnableWebMvc
@Configuration
public class ApplicationConfiguration extends WebMvcConfigurerAdapter {
@Bean
public ViewResolver jspViewResolver() {
InternalResourceViewResolver bean = new InternalResourceViewResolver();
bean.setPrefix("/WEB-INF/classes/templates/");
bean.setSuffix(".jsp");
return bean;
}
}
Обновить с полным примером
Этот пример был основан на Spring initializer (Gradle проект с зависимостью "Web" ). Я добавил apply plugin: 'war'
в build.gradle
, добавил/изменил файлы ниже, построил проект с помощью gradle war
и развернул его на моем сервере приложений (Tomcat 8).
Это дерево каталогов этого образца проекта:
\---src
+---main
+---java
| \---com
| \---example
| \---demo
| ApplicationConfiguration.java
| DemoApplication.java
| DemoController.java
|
\---resources
+---static
\---templates
index.jsp
ApplicationConfiguration.java: см. выше
DemoApplication.java:
@SpringBootApplication
public class DemoApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(DemoApplication.class);
}
public static void main(String[] args) throws Exception {
SpringApplication.run(DemoApplication.class, args);
}
}
DemoController.java:
@Controller
public class DemoController {
@RequestMapping("/")
public String index() {
return "index";
}
}
index.jsp:
<html>
<body>
<h1>Hello World</h1>
</body>
</html>
Ответ 3
Подводя итог этому, ни один из предложенных ответов не работал у меня до сих пор. Использование пустого проекта загрузки Spring.
Как-то что-то выглядит жестко внутри Spring или сервлетах, поэтому JSP должен находиться в /webapp
(или вложенной папке). В отличие от шаблонов thymeleaf по умолчанию, которые просматриваются в /resources/templates
.
Я пробовал все изменения, на самом деле много разных конфигураций, но не смог изменить это поведение. Это просто вызвало сложность и больше не могло обслуживать JSP. Итак, в нижней строке, если вы используете JSP, просто поместите их в /webapp
. Он также работает путем добавления нулевой конфигурации с помощью контроллера, например:
@GetMapping("/foo")
public String serveFoo() {
return "relative-path-inside-webapp/foo.jsp";
}
В другой заметке по умолчанию папка /webapp
также будет скрыта в Spring Toolsuite, поэтому вам придется вручную настроить ее как "исходную папку".