🏆시리즈에서의 목표 혹은 구현할 프로젝트
Spring Framework을 사용해서 간단한 게시판을 만들어볼 것 입니다.
이 MVC패턴을 통해서 데이터가 UI로부터 분리되어 따로 검수하거나 사용하는 것이 가능하고 Spring Framework는 이 MVC패턴을 따릅니다.
우리는 Spring Framework을 이용하여서 Backend를 구현하는데 초점을 맞출 것이므로 이미 구현되있는 View를 이용하여서 View를 구현하겠습니다. 이 링크를 통해 테마를 다운 후 압축을 해제하고 webapp 하위의 resources에 아래와 같이 복사합니다.
여기서 그리고 이후에 나오는 HTML과 JS코드들을 모두 설명을 하진 못합니다. HTML과 JS은 찾아서 공부하시길 바랍니다.
테마 안의 table.html의 내용을 복사하여서 board.jsp를 WEB-INF 하위의 views 폴더에 생성합니다. 그 후 html의 lang을 kr로 변경합니다.
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html lang="kr">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="description" content="">
<meta name="author" content="">
<title>SB Admin 2 - Tables</title>
정적 리소스들의 요청 주소를 상대 주소에서 오류가 나지 않도록 안전하게 아래와 같이 절대 주소로 변경합니다.
<script src="/vendor/datatables/dataTables.bootstrap4.min.js"></script>
ServletConfig 클래스의 addResourceHandlers 메소드를 수정합니다.
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
WebMvcConfigurer.super.addResourceHandlers(registry);
registry.addResourceHandler("/vendor/**").addResourceLocations("/resources/vendor/");
registry.addResourceHandler("/css/**").addResourceLocations("/resources/css/");
registry.addResourceHandler("/scss/**").addResourceLocations("/resources/scss/");
registry.addResourceHandler("/img/**").addResourceLocations("/resources/img/");
registry.addResourceHandler("/js/**").addResourceLocations("/resources/js/");
}
정적 자원을 아래 경로처럼 요청을 보내므로 위와 같이 수정합니다. 위의 코드를 말로 해석하면 /vendor/ 등등으로 오는 모든 요청을 /resources/vendor/로 보낸다라는 말입니다. 따라서 아래 경로로 오는 요청은 /resources/vendor/fontawesome-free/css/all.min.css를 반환받게 됩니다.
<link href="/vendor/fontawesome-free/css/all.min.css" rel="stylesheet" type="text/css">
유저의 요청을 받는 Controller를 작성합니다. ac.kr.smu.controller 패키지 안에 BoardController 클래스를 아래와 같이 생성합니다.
@Controller
@RequestMapping("/board")
public class BoardController {
@GetMapping
public void getBoard(){}
}
@RequestMapping
value에 지정된 경로로 들어오는 요청을 처리한다.
@GetMapping
value에 지정된 경로로 들어오는 Get요청을 처리한다.
여기서 처리를 하는 Controller의 메소드의 반환값이 void라면 들어온 경로를 그대로 반환합니다. 여기서는 board가 반환됩니다. 그리고 이 Controller의 반환값은 지난 번에 ServletConfig에서 설정한 ViewResolver의 설정에 맞게 유저에게 view를 반환합니다. 이 것에 의해서 /board로 들어오는 Get요청은 /WEB-INF/views/board.jsp를 반환하게 됩니다.
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
WebMvcConfigurer.super.configureViewResolvers(registry);
registry.jsp("/WEB-INF/views/",".jsp");
}