css,js 파일들의 링크는 모든 페이지에서 사용될 것이므로 화면에서 디자인이 깨지지 않는 것을 확인한 후 다음 내용을 진행한다.
includes 적용
jsp를 작성할 때마다 많은 양의 html 코드를 이용하는 것을 피하기 위해 jsp의 includes 지시자를 활용해서 페이지 제작시에 필요한 내용만을 작성할 수 있게 사전에 작업을 해야 한다.
현재 프로젝트 views 폴더에 includes 폴더를 작성하고 header.jsp와 footer.jsp를 선언한다.
header.jsp 적용
header.jsp는 페이지에서 핵심적인 부분이 아닌 영역 중에서 위쪽의 html 내용을 처리하기 위해서 작성한다.
브라우저에서 검사 기능을 활용하면 특정한 <div>가 어떤 부분을 의미하는지 확인 할 수 있다.
SB Admin2는 <div>들 중에서 id 속성값이 page-wrapper 부터가 핵심적인 페이지의 내용이므로
list.jsp 파일의 처음 부분에서 <div id='page=wrapper'> 라인까지 잘라서 header.jsp의 내용으로 처리한다.
footer.jsp 적용
가 끝나는 태그부터 마지막까지는 footer.jsp의 내용으로 작성한다.
최종적으로 수정하였다면 브라우저를 통해 정상적으로 동작하는지 테스트해보는것이 좋다.
### jQuery 라이브러리 변경
jsp 페이지를 작성하다 보면 js로 브라우저 내에서의 조작이 필요한 경우가 많다.
예제는 jQuery를 이용할 것인데 문제는 위의 방식대로 처리했을 때 jQuery 라이브러리가 footer.jsp 내에 포함되어 있다는 점이다.성능을 조금 손해 보더라도 jQuery를 header.jsp에 선언해 두면 작성하는 jsp에서 자유롭게 사용할 수 있으므로 수정해야 한다.
footer.jsp의 상단에 있는 jquery.min.js 파일의
...
```
*반응형 웹 처리*
SB Admin2는 반응형으로 설계되어 있어서 브라우저의 크기에 맞게 모바일용으로 자동으로 변경되지만 jQuery의 최신 버전을 사용한 상태에서는 모바일 크기에서 새로고침시 메뉴가 펼쳐지는 문제가 발생한다.
이 문제를 해결하기 위해서 includes 폴더 내 footer.jsp에 아래와 같은 코드를 기존 코드 대신에 추가한다.
```javascript
```
### 목록 화면 처리
list.jsp 페이지의 일부를 include 하는 방식으로 처리했음에도 많은 html의 내용들이 존재하므로 아래와 같이 최소한의 태그들만 적용시킨다.
list.jsp에는 JSTL의 출력과 포멧을 적용할 수 있는 태그 라이브러리를 추가한다.
```javascript
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<!DOCTYPE html>
<%@include file="../includes/header.jsp"%>
Tables
Board List Page
#번호
제목
작성자
작성일
수정일
<%@include file="../includes/footer.jsp"%>
```
수정된 list.jsp를 저장하고 브라우저를 통해서 원하는 형태로 출력되는지 확인한다.
#### Model에 담긴 데이터 출력
/board/list를 실행했을 때 이미 BoardController는 Model을 이용해서 게시물의 목록을 list라는 이름으로 담아서 전달했으므로 list.jsp에서는 이를 출력한다.출력은 JSTL을 이용해서 처리한다.
list.jsp내에 태그와 각
을 아래와 같이 입력한다.
```java
...
#번호
제목
작성자
작성일
수정일
...
```
브라우저를 통해서 결과를 확인하면 데이터베이스에 있는 전체 목록이 출력된다.

### 등록 입력 페이지와 등록 처리
게시물의 등록 작업은 POST 방식으로 처리하지만,화면에서 입력을 받아야 하므로 GET 방식으로 입력 페이지를 볼 수 있도록 BoardController에 메서드를 추가한다.
BoardController.class
```java
@GetMapping("/register")
public void register() {
}
```
register()는 입력 페이지를 보여주는 역할만을 하기 때문에 별도의 처리가 필요하지 않는다.
views 폴더에는 includes를 적용한 입력 페이지를 작성한다.
register.jsp
```java
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<!DOCTYPE html>
<%@include file="../includes/header.jsp" %>