복붙노트

[SPRING] 봄 부팅으로 WAR 파일에서 JSP 페이지 찾기

SPRING

봄 부팅으로 WAR 파일에서 JSP 페이지 찾기

스프링 부트 프로젝트 (java -jar /path/to/war.war)를 실행할 때 .jsp 파일을 찾을 수 없습니다.

@ResponseBody로 주석 된 메소드는 정상적으로 작동합니다. 뷰 해석기가 JSP 페이지에 대한 올바른 경로를 찾고 있지만 찾을 수 없습니다. 이 프로젝트에는 하나의 구성 클래스가 있으며 web.xml은 없습니다.

구성 클래스 :

@Configuration
@EnableAutoConfiguration
@EnableWebMvc
@ComponentScan (basePackages = "org.ghc.security.web")
class ScMain extends WebMvcConfigurerAdapter {


    // SpringBoot BootStrap...
    static void main (String[] args) {
        ApplicationContext ctx = SpringApplication.run (ScMain, args)

        System.out.println("Let's inspect the beans provided by Spring Boot:");

        String[] beanNames = ctx.getBeanDefinitionNames();
        Arrays.sort(beanNames);
        beanNames.each { beanName ->
            System.out.println(beanName);
        }
    }


    @Bean
    InternalResourceViewResolver internalResourceViewResolver () {
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver()
        viewResolver.setPrefix("/WEB-INF/jsp/")
        viewResolver.setSuffix(".jsp")
        viewResolver
    }
}

제어 장치

@Controller
class Running {

    @RequestMapping ("/alive")  // This works fine
    @ResponseBody
    String amIAlive () {
        "ALIVE!"
    }


    @RequestMapping ("/alive/page")  // Path to page resolved, but file not found!
    ModelAndView amIAlivePage () {
        new ModelAndView("alivepage")
    }
}

오류 기록

로그 항목의 .war 파일 경로가 올 바르고 war 파일 (WEB-INF / jsp / alivepage.jsp)의 경로가 올바른지 확인하십시오. Jetty 또는 Tomcat (위의 로그는 Jetty에서 온 로그)을 사용하든 응답이 동일합니다. 또한 위와 같이 뷰 리졸버를 사용하지 않거나 속성을 통해 뷰 리졸버를 설정하려고 시도했습니다. 나는이 모든 작은 세부 사항을 제외하고는 모든 것이 실제로 작동하는 것처럼 보이기 때문에 완전히 난처했다. 그리고 컨트롤러에서 @ResponseBody 주석이 달린 메서드는 정상적으로 작동합니다.

누구든지 어떤 제안이라도 있으면 분명히 그 의견을 고맙게 생각할 것입니다!

해결법

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

    1.나는 같은 문제를 겪었고 나의 경우에는 클래스 패스에 도서관이 없어서 일어났다.

    나는 같은 문제를 겪었고 나의 경우에는 클래스 패스에 도서관이 없어서 일어났다.

    Spring Boot는 Jasper를 기본값으로 포함하지 않으므로 명시 적으로 라이브러리를 포함하지 않으면 JSP 렌더링이 작동하지 않습니다.

    Gradle의 경우 :

    compile("org.apache.tomcat.embed:tomcat-embed-jasper")
    

    위장 :

    <dependency>
        <groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-jasper</artifactId>
        <scope>provided</scope>
    </dependency>
    
  2. ==============================

    2.실행 가능한 아카이브의 JSP가 스프링 부트에서 완벽하게 지원되지 않는다고 생각합니다. 목록에 있습니다. 따라서 배포 된 WAR 및 / 또는 b) 압축 아카이브 (또는 실행 IDE에서) 또는 소스에서 실행 중일 수 있습니다. 이것이 작동하면 여전히 전체 JSP 지원이 추가 될 때까지 기다려야 할 수도 있지만 (기부 환영) 적어도 작동한다는 것을 알게 될 것입니다. 배포 된 WAR (매핑 없음)에 표시되는 오류로 인해 다른 일이 발생하고 있음을 알 수 있습니다. 비교할 항목을 원한다면 Spring Boot에 JSP 샘플이 있다는 점에 유의하십시오. 포인트까지 작동합니다 (JSP가 해석되고 렌더링 됨).

    실행 가능한 아카이브의 JSP가 스프링 부트에서 완벽하게 지원되지 않는다고 생각합니다. 목록에 있습니다. 따라서 배포 된 WAR 및 / 또는 b) 압축 아카이브 (또는 실행 IDE에서) 또는 소스에서 실행 중일 수 있습니다. 이것이 작동하면 여전히 전체 JSP 지원이 추가 될 때까지 기다려야 할 수도 있지만 (기부 환영) 적어도 작동한다는 것을 알게 될 것입니다. 배포 된 WAR (매핑 없음)에 표시되는 오류로 인해 다른 일이 발생하고 있음을 알 수 있습니다. 비교할 항목을 원한다면 Spring Boot에 JSP 샘플이 있다는 점에 유의하십시오. 포인트까지 작동합니다 (JSP가 해석되고 렌더링 됨).

    편집 : 봄 taglibs, JSTL 및 EL 지원 위의 샘플에서 작동하는 것 같다. 방금 JSTL을 추가하고 IDE에서 테스트하고 실행 가능한 WAR로 테스트했습니다.

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

    3.비슷한 서블릿이 매핑되지 않아서 비슷한 문제가 발생했습니다. 내 확장 DelegatingWebMvcConfiguration 클래스에서이 작업을 수행해야했습니다.

    비슷한 서블릿이 매핑되지 않아서 비슷한 문제가 발생했습니다. 내 확장 DelegatingWebMvcConfiguration 클래스에서이 작업을 수행해야했습니다.

    @Override
    protected void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }
    
  4. ==============================

    4.Bean 정의에서 약간의 수정을 통해이 문제를 해결했습니다.

    Bean 정의에서 약간의 수정을 통해이 문제를 해결했습니다.

    @Bean
        InternalResourceViewResolver internalResourceViewResolver () {
            InternalResourceViewResolver viewResolver = new InternalResourceViewResolver()
            viewResolver.setPrefix("WEB-INF/jsp/")
            viewResolver.setSuffix(".jsp")
            return viewResolver;
        }
    
  5. ==============================

    5.귀하의 pom.xml 모르겠지만이 스레드와 비슷한 것

    귀하의 pom.xml 모르겠지만이 스레드와 비슷한 것

    스프링 부트 웹 애플리케이션에서 렌더링되지 않는 JSP 파일

    귀하의 pom에 의존성 목록을 추가하십시오.

  6. from https://stackoverflow.com/questions/20199609/spring-boot-not-finding-jsp-pages-in-war-file by cc-by-sa and MIT license