2016-07-27 7 views
1

내가 보여주고 싶은 간단한 JSP 페이지가 있습니다. Tomcat 8 서버에서 Spring Boot를 사용합니다.스프링 부트에서 JSP 페이지를 활성화하는 방법은 무엇입니까?

TEST.JSP : 나는 JSP의 경로를 구성

<!DOCTYPE html> 

<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
     <title>JSP Page</title> 
    </head> 
    <body> 
     <h1>Hello World!</h1> 
    </body> 
</html> 

application.properties에서 :

spring.mvc.view.prefix=/WEB-INF/ 
spring.mvc.view.suffix=.jsp 

내 프로젝트 구조 (받는다는) :

src/main/java 
src/main/resources 
WebContent/WEB-INF/test.jsp 

컨트롤러 :

@RestController 
@RequestMapping("/web/test") 
public class MyController { 
    @RequestMapping(value = "/", method = RequestMethod.GET) 
    public String getMissingContent(ModelMap model) { 
     model.put("time", new Date()); 
     model.put("message", "testmsg"); 
      return "test"; 
    } 
} 

@SpringBootApplication 
public class MyConfig extends SpringBootServletInitializer { 
} 

결과 : HTML 페이지가 표시되지 않고 빈 페이지에 "test"문자열 만 표시됩니다. 왜?

+1

시동자를 위해'@ RestController' 대신'@ Controller'를 시도하십시오. – xnakos

+1

간단히 말해'@ RestController'는 "test"를 응답 자체로 간주하고, "@ Controller"는 "test"를 렌더링 할 뷰로 간주합니다. 접두사와 접미사가 제대로 설정되어 있으면 "테스트"보기가 렌더링되어야합니다. – xnakos

+0

이것을 실제 답변으로 추가 하시겠습니까? 이것이 원인이었습니다. – membersound

답변

3

MyController@RestController에서 @Controller으로 변환하십시오. 관찰 된 동작의 이유는 @RestController@Controller의 차이입니다. the docs for @RestController에 따르면 :

[@RestController는] @Controller 및 @ResponseBody로 주석이 첨부 된 편리한 주석입니다.

@ResponseBody 주석 때문에 메서드의 반환 값은 응답 자체로 간주됩니다.

스프링 MVC의 @Controller annotation은 메소드의 리턴 값이 렌더링 될 뷰의 이름이 될 것으로 예상하므로 렌더링 된 뷰는 응답 본문으로 리턴 될 수 있습니다. 뷰의 접두사와 접미사가 올바르게 설정되면 모델이 뷰에 전달되어 뷰가 렌더링됩니다.

귀하의 경우 모델을 "테스트"뷰에 전달 (및 반환)하려했지만 숨겨진 @ResponseBody이 계획을 망쳤으며 응답으로 "test"(문자열)가 반환되었습니다. 신체.

1

@RestController 자체

@Controller 렌더링 할 뷰로 "테스트"간주한다 응답으로 "테스트"를 생각한다.

접두사와 접미사가 제대로 설정되어 있으면 "테스트"보기가 렌더링되어야합니다.

관련 문제