dev/Java&Spring

SRPING BOOT에서 JSP 사용하기

lugi 2017. 1. 7. 01:49

(다른 곳에 개설 해 뒀던 블로그에 딱 하나 써뒀던 포스트인데 이곳으로 옮겨서 약간 수정한 것)


JAVA 기반의 WEB 개발은 SPRING을 거의 쓰다시피 했는데 요즘은 SPRING BOOT를 쓰고 있다.


SPRING을 쓰면서 가장 크게 느꼈던 점은 PHP나 node.js로 웹개발을 할 때에 비해서 초기 세팅에 들어가는 노력이 너무 커서 캐주얼하게 쓸 엄두가 나지 않았다는 점인데 SPRING BOOT는 그 점에 있어서 매우 간편하게 웹개발을 할 수 있어서 장점이 많다.


SPRING FRAMEWORK를 기반으로 SPRING MVC 쓸 때와 달리 가장 큰 차이점은 boot는 static폴더와 templates 폴더가 있어서 리소스 파일(css 나 js)은 static 폴더에 템플릿(thymeleaf나 velocity 등등)은 templates 폴더에 넣으면 알아서 기본 설정된 경로로 잘 작동하게 해 준다는 점인데 아무래도 thymeleaf 나 velocity는 그다지 정이 가지 않아서 JSP를 애용하는 편.


SPRING BOOT 프로젝트를 만들기 위해서는 http://start.spring.io/ 에서 프로젝트 정보와 사용할 의존성 정보만 입력해주면 손쉽게 MAVEN 이나 GRADLE 프로젝트를 생성 가능하다. 이 프로젝트를 이클립스에서 IMPORT 하면 기본적인 설정이 끝난다.


그러나 SPRING BOOT 에서 JSP를 쓰려면 약간의 손을 봐줘야 한다.


1. spring-boot-starter-web 에 포함된 tomcat은 JSP엔진을 포함하지 않는다.


  <dependency>

      <groupId>org.apache.tomcat.embed</groupId>

      <artifactId>tomcat-embed-jasper</artifactId>

      <scope>provided</scope>

  </dependency>

  

  <dependency>

   <groupId>javax.servlet</groupId>

   <artifactId>jstl</artifactId>

  </dependency>


와 같이 jasper 및 jstl 을 의존성에 포함시켜줘야 JSP파일 구동이 가능하다.


2. JSP 파일은 SPRING BOOT 기본 templates 폴더 안에서 작동하지 않는다

위의 사항을 설정하고 나서 templates 폴더 안에 jsp 파일을 만들고 아무리 접속을 하려해도 404 Not found가 뜬다. view resolver의 prefix를 명시적으로 /templates 로 해도 마찬가지


http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-developing-web-applications.html#boot-features-jsp-limitations 에서 설명하고 있는데, 결론은 표준 컨테이너에 배포가 가능하다는 것. undertows 에서는 JSP를 지원하지 않는다는 것


일반적으로 톰캣에 웹애플리케이션을 배포하는 표준 구조인  src/main/webapp/WEB-INF/ 폴더를 직접 만들어준 다음 

그곳에 jsp파일을 넣어야한다. 보통 View resolver를 사용하는 경우가 많음으로 /WEB-INF/ 밑에 jsp 폴더를 하나 더 만든다.

src

- /main

-- /webapp

--- /WEB-INF

---- /jsp


이런 구조가 될 것이다.


이후 CONTROLLER에서 파일 이름만 RETURN하면 VIEW RESOLVER가 JSP 파일을 찾을 수 있도록

application.properties 에

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

spring.mvc.view.suffix=.jsp

를 추가 해 준다.


그런 다음 컨트롤러에서


@RequestMapping("/")

 public String index(){

  return "index";

 }

이런 메소드를 컨트롤러에 추가 해 준 뒤에 src/main/webapp/WEB-INF/jsp/index.jsp 를 만들어 넣어보면 

/의 경로로 접속했을 때 index.jsp를 정상적으로 불러올 수 있다.