> Hello World !!!

     

@syaku

#2 스프링 프로젝트 만들기 - 스프링 프레임워크 게시판 : Spring Framework Create Project

written by Seok Kyun. Choi. 최석균


스프링 프레임워크 연재 포스팅

2014/07/21 - [개발노트/Spring] - 스프링 프레임워크 게시판 #1 STS 설치 및 스프링 프로젝트 만들기 : Spring Framework Hello, World!!!
2014/07/21 - [개발노트/Spring] - 스프링 프레임워크 게시판 #2 스프링 프로젝트 만들기 : Spring Framework Create Project
2014/07/21 - [개발노트/Spring] - 스프링 프레임워크 게시판 #3 스프링 MyBatis 설정하기 및 로그출력 : Spring Framework MyBatis Log4jdbc
2014/07/21 - [개발노트/Spring] - 스프링 프레임워크 게시판 #4 스프링 XML , 스프링 유효성검사 : Spring Framework Hibernate Validator XML Marshaller
2014/07/21 - [개발노트/Spring] - 스프링 프레임워크 게시판 #5 스프링 트랜잭션 : Spring Framework Transaction
2014/07/21 - [개발노트/Spring] - 스프링 프레임워크 게시판 #6 스프링 파일업로드 : Spring Framework FileUpload
2014/07/28 - [개발노트/Spring] - 스프링 프레임워크 게시판 #부록 스프링 검색 및 조회수 올리기 , 스프링 한글깨짐: Spring Framework Cookie


개발 환경

Mac OS X 10.9.4
JAVA 1.6
Apache Tomcat 7.x
MySQL 5.x
Spring 3.1.1
Spring Tool Suite 3.5.1
Maven 2.5.1
myBatis 3.2.7
jQuery 1.11.0

2014.07.19 Written by 최석균 (Syaku)

2. 게시판 프로젝트 만들기

STS 에서 게시판 프로젝트를 생성한다.

project name : syaku-bbs
package : com.syaku.bbs

프로젝트가 생성되고 빌드가 완료되면 src/main/webapp/WEB-INF/spring/appServlet 경로 아래 설정 파일이 자동으로 생성된다. 스프링 프레임워크를 알기 위해 설정 파일에 대해 자세히 알고있어야 하지만 이번 교육은 스프링의 개념을 익히기보단 게시판 어플리케이션을 개발하는 것이 목적이기에 개념에 대한 설명은 생략한다.

스프링 프레임워크 한글 튜토리얼 (전자정부프레임워크 위키)
http://www.egovframe.go.kr/wiki/doku.php?id=egovframework:rtea3.0

프로젝트를 진행하기 전에 자동으로 생성된 예제 Hello World 컨트롤러와 뷰를 삭제하고 게시판 컨트롤러를 생성한다.

ViewController.java 게시판 프로젝트에 컨트롤러를 담당한다.

  • bbs.list.jsp 게시판 목록 뷰
  • bbs.view.jsp 게시판 상세보기 뷰
  • bbs.write.jsp 게시판 쓰기 뷰

@소스 ViewContoller.java

package com.syaku.bbs;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.PathVariable;

@Controller
public class ViewController {

    private static final Logger logger = LoggerFactory.getLogger(ViewController.class);

    // 게시판 목록 
    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String dispBbsList(Model model) {
        logger.info("display view BBS list");
        return "bbs.list";
    }

    // 게시판 상세보기
    // PathVariable 어노테이션을 이용하여 RESTful 방식 적용
    // bbs/1 -> id = 1; id = 게시물 번호로 인식함.
    @RequestMapping("/{idx}")
    public String dispBbsView(@PathVariable int idx, Model model) {
        logger.info("display view BBS view idx = {}", idx);
        return "bbs.view";
    }

    // 게시판 쓰기
    @RequestMapping(value = "/write", method = RequestMethod.GET)
    public String dispBbsWrite(Model model) {
        logger.info("display view BBS write");
        return "bbs.write";
    }

}

스프링 프레임워크는 2.5 버젼 부터 Java 5+ 이상이면 @Controller(Annotation-based Controller)를 개발할 수 있는 환경을 제공한다. XML 기반으로 설정하던 정보들을 어노테이션을 사용해서 정의한 것 이다. 위 소스에서 @어노테이션으로 작성된 코드는 모두 XML로 구현해야 한다고 보면 된다.

컨트롤러에서 사용된 어노테이션은 아래와 같다.

Controller

해당 클래스가 Controller 임을 나타내기 위한 어노테이션.
appServlet/servlet-context.xml 의 <context:component-scan base-package=“com.syaku.bbs” /> 의해 스캔된다.
컨트롤러 명을 정의하고 싶을 때는 @Controller(value = “컨트롤러명”) 하면된다. 정의하지 않으면 자동적으로 지정되며, 첫글자는 소문자로 치횐된다. 그래서 viewController 가 된다.

RequestMapping

요청에 대해 어떤 Controller, 어떤 메서드가 처리할지를 맵핑하기 위한 어노테이션
RequestMapping 에 사용되는 속성은 다음과 같다.

value : URL 값으로 맵핑 조건을 부여한다.
@RequestMapping(“/hello”) , @RequestMapping(value = “/hello”) , @RequestMapping(value = “/hello.do”) 조건을 사용할 수 있으며,
@RequestMapping({ “/hello” , “/hello.db” }) 여러 조건을 이용할땐 배열로 사용할 수 있다.
@RequestMapping(value = “/hello/*.do”) Ant-Style 의 패턴 매칭도 가능하다.

스프링 3.1 부터는 URL 뒤에 중괄호를 이용하여 변수 값을 직접 받을 수 있도록 하였다. dispBbsView 메서드를 확인하면 RequestMapping 에 {변수} 조건을 지정하고
메서드 상수에 @PathVariable 어노테이션을 정의해서 받아올 수 있다.

그외 컨트롤러 어노테이션 정보 : http://www.egovframe.go.kr/wiki/doku.php?id=egovframework:rte2:ptl:annotation-based_controller

컨트롤러에 접근하기 위한 URL 맵핑방식은 REST 방식을 사용하였다.

http://path/ -> dispBbsList
http://path/123 -> dispBbsView
http://path/write -> dispBbsWrite

어떤 URL 이 어떤 메서드에 맵핑되는 지 설명하였다.

접근 메서드에 따라 컨트롤러 메서드에 맵핑도 가능하다.
mehtod = RequestMathod.메서드 방식으로 사용하며, POST, GET, PUT, DELETE 등 메서드를 사용할 수 있다.

컨트롤러에 RequestMapping URL 을 입력하고, 메서드에 접근 메서드 맵핑을 할 수 있다.

@Controller
@RequestMapping("/hello")
clasee ViewContoller {

    @RequestMapping(method = RequestMethod.GET)
    public String dispBbsList() {
        생략 ...
    }

    @RequestMapping(method = RequestMethod.DELETE)
    public String procBbsDelete() {
        생략 ...
    }
}

컨트롤러를 생성하였고, 출력을 담당하는 뷰 페이지를 생성한다.
파일 경로는 /src/main/webapp/WEB-INF/views 에 생성하면 된다.

뷰페이지는 servlet-context.xml 에서 설정할 수 있다.

@소스 servlet-context.xml

<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
     <beans:property name="prefix" value="/WEB-INF/views/" />
     <beans:property name="suffix" value=".jsp" />
</beans:bean>

perfix 프포퍼티에 뷰페이지 경로를 설정한다.

@소스 bbs.list.jsp

<%@ page contentType="text/html; charset=utf-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>스프링프레임워크 게시판</title>
  </head>
  <body>
  <table border="1">
       <colgroup>
     <col width="60"><col><col width="115"><col width="85">
     </colgroup>
     <thead>
       <tr>
            <th scope="col">번호</th>
            <th scope="col">제목</th>
            <th scope="col">작성자</th>
            <th scope="col">등록일</th>
       </tr>
       </thead>
       <tbody>
       <!-- 목록이 반복될 영역 -->
       <tr>
            <td>번호</td>
            <td>제목</td>
            <td>작성자</td>
            <td>등록일</td>
       </tr>
       </tbody>
  </table>
  <div><a href="./write">쓰기</a></div>
  </body>
</html>

ViewController dispBbsList 메서드처리 후 출력을 담당하는 뷰페이지이다.

@소스 bbs.view.jsp

<%@ page contentType="text/html; charset=utf-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>스프링프레임워크 게시판</title>
  </head>
  <body>

    <p>제목을 입력하세요.</p>

    <div>
    내용을 입력하세요.
    </div>

    <div>
    <p>작성자 : </p>
    <p>등록일 : </p>
    </div>
  </body>
</html>

dispBbsView 메서드가 호출되면 출력되는 화면이다.

@소스 bbs.write.jsp

<%@ page contentType="text/html; charset=utf-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>스프링프레임워크 게시판</title>
  </head>
  <body>

  <form id="form">
  <div>
  <span>제목</span>
  <input type="text" id="subject" name="subject" value="" />
  </div>
  <div>
  <span>작성자</span>
  <input type="text" id="user_name" name="user_name" value="" />
  </div>
  <div>
  <span>내용</span>
  <textarea id="content" name="content" rows="10" cols="20"></textarea>
  </div>
  </form>

  <div>
  <button>저장</button>
  <a href="./">목록</a>
  </div>

  </body>
</html>

dispBbsWrite 메서드가 호출되면 출력되는 화면이다.

브라우저를 통해 모든 페이지가 출력이 되는 지 확인한다.



posted syaku blog

Syaku Blog by Seok Kyun. Choi. 최석균.

http://syaku.tistory.com