개요
Spring Boot는 다양한 View 계층의 기술을 지원한다. 그런데 기본적으로는 JSP를 지원하지 않는다. Spring Boot의 기본 View 계층 기술은 Thymeleaf, FreeMarker와 같은 템플릿 엔진이다. Thymeleaf을 선택하면 특별한 설정이 필요 없지만, JSP를 View 레이어로 선택했다면 추가 설정을 해주어야 한다.
여기에서는 Spring Boot로 Web Application을 만들고 JSP를 사용하는 방법을 보여준다.
개발환경은 다음과 같다:
● Spring Tool Suite 3 (Version: 3.9.11)
● Spring Boot Version : 2.7.10
● Java : JDK 8
※ 관련글 목록: http://yellow.kr/lifeView.jsp?s=spring
Spring Boot project 생성
● eclips에서 Spring Boot project를 생성한다.
File > New > Project… > Spring Boot > Spring Starter Project
Name, Group, Package에 적당한 내용을 입력하고 [Next] 클릭
● 필요한 Dependency들을 선택한다.
여기에서는 Spring Web만 있으면 된다.
[Finish] 클릭
● Project 생성 됨
yellow-jsp 라는 이름으로 Project가 생성되었고, YellowJspApplication.java 가 생성되었다.
package com.yellow.jsp;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class YellowJspApplication {
public static void main(String[] args) {
SpringApplication.run(YellowJspApplication.class, args);
}
}
Maven Dependencies
pom.xml을 보면 다음과 같은 dependency를 확인할 수 있다.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
기본적으로 Spring Boot는 내장 Tomcat을 가지고 있지만, jsp 엔진이 존재하지 않기 때문에 jasper와 jsp의 라이브러리 jstl을 사용할 수 있는 dependency를 아래와 같이 추가해줘야 한다.
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
View : JSP
● webapp 폴드 생성
src/main 폴드에 webapp 이름으로 하위 폴드를 생성한다. jsp 파일의 root 폴드이다. 그리고 아래와 같이 2개의 jsp 파일을 생성한다.
● index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Main Page</title>
</head>
<body>
<h1>Main Page</h1>
<a href="/listBook">List Book</a>
</body>
</html>
● listBook.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Book List</title>
</head>
<body>
<h1>Book List</h1>
<br/>
<div>
<table border="1">
<tr>
<th>ID</th>
<th>제목</th>
<th>저자</th>
</tr>
<c:forEach items="${allBooks}" var="book">
<tr>
<td>${book.bookId}</td>
<td>${book.title}</td>
<td>${book.author}</td>
</tr>
</c:forEach>
</table>
</div>
<br/><br/>
<a href="/">Main Page</a>
</body>
</html>
● application.properties
src/main/resources 밑에 있는 application.properties에 다음과 같은 속성을 추가한다. jsp 파일의 경로와 확장자를 Spring Boot에 알려준다. prefix의 / 는 src/main/webapp 를 의미한다.
spring.mvc.view.prefix=/
spring.mvc.view.suffix=.jsp
Model, Controller, Service
● Book.java
package com.yellow.jsp;
public class Book {
private String bookId;
private String title;
private String author;
public Book() {}
public Book(String bookId, String title, String author) {
this.setBookId(bookId);
this.setTitle(title);
this.setAuthor(author);
}
public String getBookId() {
return bookId;
}
public void setBookId(String bookId) {
this.bookId = bookId;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
@Override
public String toString() {
return "bookId:" + bookId + ",title:" + title + ",author:" + author;
}
}
● MainController.java
package com.yellow.jsp;
import java.util.List;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class MainController {
private BookService bookService;
public MainController(BookService bookService) {
this.bookService = bookService;
}
@GetMapping("/")
public String index() {
return "index";
}
@GetMapping("/listBook")
public String viewBookList(Model model) {
List<Book> books = bookService.getAllBooks();
model.addAttribute("allBooks", books);
return "listBook";
}
}
● BookService.java
package com.yellow.jsp;
import java.util.ArrayList;
import java.util.List;
import org.springframework.stereotype.Service;
@Service
public class BookService {
public List<Book> getAllBooks() {
List<Book> books = new ArrayList<Book>();
books.add(new Book("1001", "장기20세기", "조반니 아리기"));
books.add(new Book("1002", "신의 지문", "그레이엄 핸콕"));
books.add(new Book("1003", "신화의 이미지", "조지프 캠벨"));
books.add(new Book("1004", "블랙아테나 1", "마틴 버낼"));
books.add(new Book("1005", "판다의 엄지", "스티븐 제이 굴드"));
books.add(new Book("1006", "이기적 유전자", "리처드 도킨스"));
return books;
}
}
● Project 최종 모습
Application 실행
Project를 선택한 후, Run AS > Spring Boot App 를 하면 내장 Tomcat 서버에 배포된다. 브라우저에서 다음의 URL을 실행한다.
● http://localhost:8080/
● http://localhost:8080/listBook