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>
<!-- Test -->
<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]를 선택하고 수정

image-20200322194118647

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

image-20200322194400911

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)

image-20200322194926007

  • 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 &copy; 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>
  • home.jsp 파일을 수정
<%@ 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. 데이터베이스 연결 설정

image-20200322200529148

  • pom.xml에 mariaDB spring-jdbc, mybatis, mybatis-spring, spring-test 의존성 추가
        <!-- mariaDB 의존성 추가 -->
        <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>

results matching ""

    No results matching ""