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
여기에 있는 JSP와 관련된 제약 사항과 관련이 있는 것 같은데, WAS에 대한 지식은 모자라서 원인을 정확히 설명할 수 없다. 어쨌거나간에 일반적인 웹프로젝트에서 사용했던 src/main/webapp/WEB-INF/ 폴더를 직접 만들어준 다음 그곳에 jsp파일을 넣어야한다. 나는 /WEB-INF/ 밑에 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 를 만들어 넣으면 localhost/ 에 접속했을 때 index.jsp를 정상적으로 불러올 수 있다.