복붙노트

[SPRING] 스프링 부트는 webapp 폴더 대신 JSP 템플릿을 사용하여 리소스 템플릿 폴더를 사용합니까?

SPRING

스프링 부트는 webapp 폴더 대신 JSP 템플릿을 사용하여 리소스 템플릿 폴더를 사용합니까?

나는 Spring Boot MVC 프로젝트를 시작했고 리소스 내에 두 개의 폴더가 있음을 깨달았다. 하나는 템플릿이라고하고 다른 하나는 정적이라고합니다. 이 폴더 설정이 정말 마음에 듭니다.

문제는 내가보기에 JSP 템플릿을 사용한다는 것이다. 템플릿 폴더 안에 .jsp 템플릿을 놓을 수 없어 작동하도록했습니다. 내가해야 할 일은 src와 resources와 같은 레벨에 webapp 폴더를 만드는 것이다. 내 JSP 템플리트를 배치하면 내보기를 찾을 수 있습니다.

리소스 내에있는 템플릿 폴더 내에서 실제로 JSP 템플릿을 사용하기 위해 재구성해야하는 것은 무엇입니까?

해결법

  1. ==============================

    1.Maven 문서에 따르면 src / main / resources는 WAR의 WEB-INF / classes로 끝납니다.

    Maven 문서에 따르면 src / main / resources는 WAR의 WEB-INF / classes로 끝납니다.

    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의 초기화 프로그램 ( "Web"종속성을 가진 Gradle 프로젝트)을 기반으로합니다. 방금 build.gradle에 'war'플러그인을 추가하고, 아래 파일을 추가 / 변경하고, 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>
    
  2. ==============================

    2.[...]

    [...]

    [..]

    출처

    출처

    JSP 파일을로드 할 위치에서부터 스프링 부트를 지시하십시오. application.properties 세트에서

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

    출처

    스프링 부트와 함께 JSP를 사용하고 싶다면 두 가지 예가 있습니다 :

    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

  3. ==============================

    3.요약하면, 제안 된 답변 중 지금까지 나와 관련된 답변이 없습니다. 빈 스프링 부트 스타터 프로젝트 사용하기.

    요약하면, 제안 된 답변 중 지금까지 나와 관련된 답변이 없습니다. 빈 스프링 부트 스타터 프로젝트 사용하기.

    어쨌든, 뭔가 JSP 또는 서블릿 안에 / webapp (또는 하위)에 있어야합니다 hardwired 보인다. / 리소스 / 템플릿에서 찾은 기본 thymeleaf 템플릿과는 다릅니다.

    나는 모든 종류의 변경을 시도했지만 실제로는 다른 구성을 많이했지만 그 동작을 수정할 수는 없었습니다. 방금 복잡성이 생겨서 더 이상 JSP를 제공 할 수 없었습니다. JSP를 사용하는 경우 결론을 / webapp에 넣으십시오. 또한 다음과 같은 컨트롤러를 사용하여 제로 구성을 추가하여 작동합니다.

    @GetMapping ( "/ foo") public String serveFoo () {     return "relative-path-inside-webapp / foo.jsp"; }

    또 다른 메모에서 기본적으로 / webapp 폴더는 Spring Toolsuite에서도 숨겨져 있으므로 "소스 폴더"로 수동 구성해야합니다.

  4. from https://stackoverflow.com/questions/46183633/spring-boot-use-resources-templates-folder-with-jsp-templates-instead-of-webapp by cc-by-sa and MIT license