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, поэтому вам придется вручную настроить ее как "исходную папку".