spring board - boss
환경설정
1. 프로젝트 설정
1) pom.xml 설정
- pom.mxl 파일의 properties 태그에서 java version을 1.8로 spring 버전을 5.0.7로 변경
<properties>
<java-version>1.8</java-version>
<org.springframework-version>5.0.7.RELEASE</org.springframeworkversion>
<org.aspectj-version>1.6.10</org.aspectj-version>
<org.slf4j-version>1.6.6</org.slf4j-version>
</properties>
- pom.xml 파일의 dependencies 태그 안에서 juit(4.12)과 servlet 버전(3.1.0)을 변경
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
- pom.xml 파일의 build 태그 안에서 java source와 target을 1.8로 변경
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.5.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<compilerArgument>-Xlint:all</compilerArgument>
<showWarnings>true</showWarnings>
<showDeprecation>true</showDeprecation>
</configuration>
</plugin>
- 프로젝트를 선택하고 마우스 오른쪽을 눌러서 [Maven] – [UpdateProject] 프로젝트 실행
2) 애플리케이션의 contextPath를 / 로 변경
- 프로젝트를 선택하고 마우스 오른쪽을 눌러서 [Properties] 에서 [WebProject Settings]를 선택하고 수정

- Servers 탭에서 tomcat을 더블클릭하고 module 탭에서 수정

2. 파라미터 인코딩 설정
- web.xml 파일에 파라미터 인코딩 설정을 위한 필터 등록
<filter>
<filter-name>encoding</filter-name>
<filter-class>
org.springframework.web.filter.CharacterEncodingFilter
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3. bootstrap 사용 설정
- bootstrap은 반응형 웹 페이지를 만들기 위한 템플릿
- http://bootstrapk.com/ 에서 다운로드
- 다운로드 받은 bootstrap 파일들은 webapp 디렉토리의 resources 디렉토리에 bootstrap 디렉토리를 만들어서 복사
- jQuery 파일을 다운로드 받아서 webapp 디렉토리의 resources 의 jquery 디렉토리를 생성해서 복사(파일 이름 확인 – jquery.min.js)

- WEB-INF 디렉토리의 views 디렉토리에 include 디렉토리를 생성
- include 디렉토리에 jsp 파일들의 상단에 동일한 메뉴를 출력하기 위한 파일을 생성 – header.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Spring MVC Board</title>
<meta
content='width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no'
name='viewport'>
<link href="${pageContext.request.contextPath}/resources/bootstrap/css/bootstrap.min.css" rel="stylesheet"
type="text/css" />
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.comrespond/1.4.2respond.min.js"></script>
<![endif ]-->
</head>
<script src="${pageContext.request.contextPath}/resources/jquery/jquery.min.js"></script>
<body class="skin-blue sidebar-mini">
<div class="wrapper">
<header class="main-header">
<div class="page-header">
<h1>Spring MVC 게시판</h1>
</div>
</header>
</div>
<aside class="main-sidebar">
<section class="sidebar">
<ul class="nav nav-tabs">
<li role="presentation" class="active"><a href="#">메인</a></li>
<li role="presentation"><a href="#">목록보기 </a></li>
<li role="presentation"><a href="#">게시물 쓰기 </a></li>
<li role="presentation"><a href="#">회원가입 </a></li>
</ul>
</section>
</aside>
</body>
</html>
- include 디렉토리에 jsp 파일들의 하단에 동일한 메뉴를 출력하기 위한 파일을 생성 – footer.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<footer class="main-footer">
<div class="pull-right hidden-xs">
<b>Version</b> 1.0
</div>
<strong>Copyright © 2019 <a href="/">Spring MVC Board</a>.
</strong> All rights reserved.
</footer>
<script src="${pageContext.request.contextPath}/resources/bootstrap/js/bootstrap.min.js" type="text/javascript"></script>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@include file="include/header.jsp"%>
<section class="content">
<div class="box">
<div class="box-header with-border">
<a href="#"><h3 class="box-title">회원가입</h3></a>
</div>
</div>
</section>
<%@include file="include/footer.jsp"%>
4. 데이터베이스 연결 설정

- pom.xml에 mariaDB spring-jdbc, mybatis, mybatis-spring, spring-test 의존성 추가
<dependency>
<groupId>org.mariadb.jdbc</groupId>
<artifactId>mariadb-java-client</artifactId>
<version>2.2.5</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<dependency>
<groupId>org.bgee.log4jdbc-log4j2</groupId>
<artifactId>log4jdbc-log4j2-jdbc4</artifactId>
<version>1.16</version>
</dependency>
- src/main/resources 디렉토리에 log4jdbc.log4j2.properties 파일을생성하고 작성
log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
- root-context.xml 파일에 DataSource를 등록
<bean class="org.springframework.jdbc.datasource.DriverManagerDataSource" id="dataSource">
<property name="driverClassName" value="org.mariadb.jdbc.Driver"/>
<property name="url" value="host주소"/>
<property name="username" value="아이디" />
<property name="password" value="비밀번호" />
</bean>
- src/test/java 디렉토리에 테스트 클래스를 만들고 테스트
package com.gmail.hi;
import java.sql.Connection;
import javax.inject.Inject;
import javax.sql.DataSource;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "file:src/main/webapp/WEB-INF/spring/root-context.xml" })
public class BoardTest {
@Inject
private DataSource ds;
@Test
public void testConection() throws Exception {
Connection con = null;
try {
con = ds.getConnection();
System.out.println(con);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (con != null) {
con.close();
}
}
}
}
5. 예외 처리
- 기본 패키지 아래에 util 패키지를 생성하고 CommonExceptionAdvice 클래스를 추가하고 작성 - Controller에서 발생하는 예외 처리
package com.gmail.hi.util;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.servlet.ModelAndView;
@ControllerAdvice("com.gmail.hi")
public class CommonExceptionAdvice {
@ExceptionHandler(Exception.class)
private ModelAndView errorModelAndView(Exception ex) {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("/error/error");
modelAndView.addObject("exception", ex);
return modelAndView;
}
}
- views 디렉토리에 error 디렉토리를 만들고 error.jsp 파일을 생성하고 작성
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!-- 이 페이지가 에러가 발생했을 때 출력되는 페이지라는 설정 -->
<%@ page isErrorPage="true"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<!-- IE는 에러 내용이 512바이트가 안되면 자체 페이지를 출력하므로
강제로 512바이트 이상을 만들기 위한 코드 -->
<meta name="dummy1" content="에러페이지 에러페이지 에러페이지" />
<meta name="dummy2" content="에러페이지 에러페이지 에러페이지" />
<meta name="dummy3" content="에러페이지 에러페이지 에러페이지" />
<meta name="dummy4" content="에러페이지 에러페이지 에러페이지" />
<meta name="dummy5" content="에러페이지 에러페이지 에러페이지" />
<meta name="dummy6" content="에러페이지 에러페이지 에러페이지" />
<meta name="dummy7" content="에러페이지 에러페이지 에러페이지" />
<meta name="dummy8" content="에러페이지 에러페이지 에러페이지" />
<meta name="dummy9" content="에러페이지 에러페이지 에러페이지" />
<meta name="dummy10" content="에러페이지 에러페이지 에러페이지" />
<meta name="dummy11" content="에러페이지 에러페이지 에러페이지" />
<meta name="dummy12" content="에러페이지 에러페이지 에러페이지" />
<meta name="dummy13" content="에러페이지 에러페이지 에러페이지" />
<meta name="dummy14" content="에러페이지 에러페이지 에러페이지" />
<meta name="dummy15" content="에러페이지 에러페이지 에러페이지" />
<meta name="dummy16" content="에러페이지 에러페이지 에러페이지" />
<title>예외발생</title>
</head>
<body>
<%@ include file="../include/header.jsp"%>
<h4>${exception.getMessage()}</h4>
<ul>
<c:forEach var="stack" items="${exception.getStackTrace() }">
<li>${stack.toString()}</li>
</c:forEach>
</ul>
<%@ include file="../include/footer.jsp"%>
</body>
</html>
- servlet-context.xml 파일에 코드 추가
<default-servlet-handler/>
- web.xml 파일에 404 에러 코드가 발생했을 때 처리하는 설정을 추가
<error-page>
<error-code>404</error-code>
<location>/WEB-INF/views/error/404code.jsp</location>
</error-page>
- views 디렉토리에 error 디렉토리에 404code.jsp 파일을 생성하고 작성
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!-- 이 페이지가 에러가 발생했을 때 출력되는 페이지라는 설정 -->
<%@ page isErrorPage="true"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<!-- IE는 에러 내용이 512바이트가 안되면 자체 페이지를 출력하므로
강제로 512바이트 이상을 만들기 위한 코드 -->
<meta name="dummy1" content="에러페이지 에러페이지 에러페이지" />
<meta name="dummy2" content="에러페이지 에러페이지 에러페이지" />
<meta name="dummy3" content="에러페이지 에러페이지 에러페이지" />
<meta name="dummy4" content="에러페이지 에러페이지 에러페이지" />
<meta name="dummy5" content="에러페이지 에러페이지 에러페이지" />
<meta name="dummy6" content="에러페이지 에러페이지 에러페이지" />
<meta name="dummy7" content="에러페이지 에러페이지 에러페이지" />
<meta name="dummy8" content="에러페이지 에러페이지 에러페이지" />
<meta name="dummy9" content="에러페이지 에러페이지 에러페이지" />
<meta name="dummy10" content="에러페이지 에러페이지 에러페이지" />
<meta name="dummy11" content="에러페이지 에러페이지 에러페이지" />
<meta name="dummy12" content="에러페이지 에러페이지 에러페이지" />
<meta name="dummy13" content="에러페이지 에러페이지 에러페이지" />
<meta name="dummy14" content="에러페이지 에러페이지 에러페이지" />
<meta name="dummy15" content="에러페이지 에러페이지 에러페이지" />
<meta name="dummy16" content="에러페이지 에러페이지 에러페이지" />
<title>예외발생</title>
</head>
<body>
<%@ include file="../include/header.jsp"%>
<h4>
URL이 잘못되었습니다.<br /> 빠른 시간에 복구하겠습니다.
</h4>
<%@ include file="../include/footer.jsp"%>
</body>
</html>