첫 번째 단계로 Spring MVC와 게시판의 기본 개념에 대한 이해를 돕기 위한 내용으로 구성하였다.

따라서, 기본 기능과 아주 짧은 코드로 작성하였다.

board1 폴더에 관련 소스가 있다.

설치가 제대로 되었다면 http://localhost:8080/board/board1List으로 실행해 볼 수 있다.


예제를 실행하기 위해 다음과 같이 게시판용 테이블(TBL_BOARD)을 생성해야 한다.

CREATE TABLE TBL_BOARD (

  BRDNO int(11) NOT NULL AUTO_INCREMENT,         -- 번호

  BRDTITLE varchar(255),                         -- 제목

  BRDWRITER varchar(20),                         -- 작성자

  BRDMEMO   varchar(4000),                       -- 내용

  BRDDATE     datetime,                          -- 작성일자

  PRIMARY KEY (BRDNO)

) ;

테이블에서 작성자(BRDWRITER), 글제목(BRDTITLE), 내용(BRDMEMO)는 웹 상에서 사용자가 값을 입력하는 필드이다. 

작성자는 회원제일 경우 아이디가 저장되겠지만 예제에서는 관련 기능이 없기 때문에 이름을 직접 입력하게 구현하였다.

글번호(BRDNO)는 MariaDB가 자동으로 고유값(AUTO_INCREMENT)을 부여하도록 하였다. 

이 글번호를 이용하여 데이터를 식별하고 처리하게 된다 (Primary Key, PK). 

작성일자(BRDDATE)는 사용자가 값을 입력하고 저장한 날짜와 시간을 의미하는 것으로

데이터 베이스에 저장(Insert)할 때 시스템에서 읽어와서 같이 저장하도록 제작한다.


테이블을 생성했으면, 이 테이블과 동일하게 boardVO클래스를 생성한다.

테이블의 내용을 boardVO클래스에 담아서 사용하기 때문에

테이블 필드명과 boardVO클래스 변수명은 동일하게 일치 시켜준다. 


public class boardVO {

    private String brdno, brdtitle, brdwriter, brdmemo, brddate;

           public String getBrdno() {

                     return brdno;

           }

           public void setBrdno(String brdno) {

                     this.brdno = brdno;

           }

            ~~ 생략 ~~

}

위 내용을 모두 입력하지 말고 이클립스에서 "private String brdno, brdtitle, brdwriter, brdmemo, brddate" 행의 아무 곳이나 선택하고

마우스 오른쪽 버튼을 눌러 컨텍스트 메뉴를 실행한다.

source > generater Getters and Setters 메뉴를 선택하여 실행하면 한번에 생성된다.


'Java > 게시판 1' 카테고리의 다른 글

2. 기본게시판 - 리스트  (0) 2016.03.28
3. 기본게시판 - 글 쓰기  (4) 2016.03.28
4. 기본게시판 - 글 읽기  (0) 2016.03.28
5. 기본게시판 - 글 수정  (2) 2016.03.28
6. 기본게시판 - 글 삭제  (0) 2016.03.28

게시판 리스트는 게시판 테이블(TBL_BOARD)의 내용을 가져와 보여주는 페이지로,

SQL문의 SELECT를 실행하여 반환 받은 데이터 집합(Record Set, Result Set, List)을 화면에 출력한다.

리스트의 MVC 개념은 게시판 첫 글에서 설명하니 다시 확인하면 좋을 것이다.


먼저, 컨트롤 파일인 board1Ctr.java 파일에 다음 내용을 입력한다.

@Controller
public class board1Ctr {
    @Autowired
    private board1Svc boardSvc;

    @RequestMapping(value = "/board1List")
    public String boardList(ModelMap modelMap) throws Exception {
        List<?> listview   = boardSvc.selectBoardList();
       
        modelMap.addAttribute("listview", listview);
        return "board1/boardList";
    }
}

board1Ctr.java

사용자가 게시판 리스트를 선택하면 board1List 컨트롤이 호출되고,

컨트롤은 서비스인 boardSvc클래스의 selectBoardList 메소드(함수)를 호출한다.

selectBoardList SELECT문을 실행하여

데이터 집합(Record Set)을 동적 집합인 List 클래스로 반환한다.

반환되는 데이터의 개수() 5개면 List의 크기도 5개가 되며, 각 행은 boardVO 형태로 구성된다.

따라서 실제로는 다음 코드에서 List<?> 대신 List<boardVO> 로 사용하는 것이 맞지만

개인적인 편의성 때문에 이렇게 사용하고 있다.

반환 받은 리스트(listview)ModelMap을 이용하여 JSP로 전달된다.

, 리스트는 listview 변수에 담기게 되고 listview라는 이름으로 넘어가게 된다.

마지막으로 화면을 구성할 HTML이 있는 boardList.jsp 파일의 위치와 이름을 반환하게 된다.


주의] 실제 명명규칙에서는 컨트롤명(board1List), 컨트롤의 함수명(boardList),

JSP 파일명(boardList.jsp)이 일치하는 것이 좋지만,

다양한 게시판을 하나에서 처리하려다 보니 조금 다르게 부여 되었으니 혼동하지 말길….

☆ 어노테이션(Annotation)

자바(스프링)에서 클래스 사용을 쉽게 하기 위해 제공하는 방법으로 다음 4가지가 빈번하게 사용된다.

@Controller: 해당 파일이 컨트롤 파일이라고 명시

@Service: 해당 파일이 서비스 파일이라고 명시

@Autowired: 자동으로 매핑 시켜주는 것으로 컨트롤에서 서비스를 찾을 때 등에 사용

@RequestMapping: 실제 액션(URL)을 의미

상세한 내용은 Spring MVC를 찾아서 익혀두길 바란다.


다음으로 컨트롤에서 호출되는 서비스는

board1Svc.java 파일에 board1Svc 클래스 메소드(selectBoardList)로 내용은 다음과 같다.

SQL문을 호출하여 처리한 후 반환하는 역할을 하는 것으로

selectBoard1List 이름(ID)을 가진 SQL 문을 찾아서 실행하게 된다.

sqlSession Spring 설정(webapp/WEB-INF/applicationContext.xml)에서

지정된 SqlSessionTemplate을 사용하기 위한 변수(인스턴스)

반환 데이터가 하나일 때는 selectOne을,

2개 이상의 집합(Result Set, List)일 때는 selectList메소드를 사용한다.

@Service
public class board1Svc {
    @Autowired
    private SqlSessionTemplate sqlSession;   

    public List<?> selectBoardList() throws Exception {
        return sqlSession.selectList("selectBoard1List");
    }
}

board1Svc.java

applicationContext.xml에 데이터 베이스에 대한 설정과

SQL문이 입력된 XML 파일 정보 등이 SqlSessionTemplate에 지정되어 있다.


서비스에서 호출되는 selectBoard1List는 SQL의 ID를 의미하고

 board1.xml파일에 있으며 다음과 같다.

resultType이 boardVO로 되어 있다. boardVO는 반환 되는 데이터의 열(column)에 대한 정보를 의미한다.

<mapper namespace="baord1">
    <select id="selectBoard1List" resultType="gu.board1.boardVO" >
        SELECT BRDNO, BRDTITLE, BRDWRITER, DATE_FORMAT(BRDDATE,'%Y-%m-%d') BRDDATE
          FROM TBL_BOARD
         ORDER BY BRDNO DESC
    </select>
</mapper>

board1.xml

이상에서 사용된 SELECT 문은 게시판 테이블(TBL_BOARD)의 모든 내용을 별다른 조건 없이 가져오고 있다.

필요한 데이터만 추출하는 것은 차차 진행할 것이다.

다만 글 번호를 큰 값 순으로 정렬(DESC)한 것은

최신 글(마지막에 작성한 글)이 리스트에서 가장 먼저 보이게 하기 위한 것이다.


[주의] 개인적인 명명 규칙으로 SQL문을 호출하는 서비스의 함수명(selectBoard1List)과

SQL의 명칭(selectBoardList)은 가급적 동일하게 부여 한다.

다만, 예제 구성상 SQL 명칭에 "1"자가 없이 작성되었다.

클래스 명들도 유사하게 명명되었는데,

앞으로 진행할 단계(board1, board2, board3 … )별로 차이가 있지만

기본적으로 같은 기능을 한다는 걸 표시하기 위한 것이다.


Mybatis의 Select 테그(<select>)는 SQL SELECT 실행을 위한 것으로

SQL의 INSERT문은 <insert> 테그를 사용해야 한다.

UPDATE와 DELETE도 동일하나

실제로는 INSERT, UPDATE, DELETE는 아무 테그나 사용해도 결과가 같다.

즉, 반환 값이 있는 것은 <select> 테그를,

없으면 <insert> 테그 등 아무 것이나 사용해도 된다.

resultType은 반환되는 클래스 타입을 나타내는 것이고

여기서 사용되지 않았지만 많이 사용되는 parameterType은

SQL문을 생성하기 위해 파라메터로 넘겨주는 클래스를 의미한다.

이외에도 많은 개념이 있지만 이 정도만 기억해 두면 될 것 같다.

SQL ID(selectBoard1List)는 프로젝트 전체에서 사용하는 고유한 이름으로

서비스에서 이 ID를 호출하여 SQL문을 실행한다.


반환되는 데이터의 구조는 boardVO.java 파일에 있으며

데이터가 저장되는 테이블(TBL_BOARD)과 유사한 구조로 되어 있다.

글번호(brdno)가 테이블에서는 숫자형이지만 boardVO에서는 문자열(String)이라는 차이가 있는데,

숫자형으로 일치시켜도 되고, 글 번호를 이용한 별도의 연산이 없어 편의를 위해 문자열로 사용하였다.


마지막으로 이렇게 추출된 데이터를

사용자에게 적절한 디자인으로 만들어 보여주는 JSP(HTML) 파일이 있다.

테그 라이브러리(taglib)인 forEach문은 주어진 데이터의 개수만큼 반복해서 실행하는 명령어로

컨트롤에서 보내온 데이터(listview)의 개수만큼 반복하여 실행한다.

즉, HTML 테이블(table) 테그의 TR을 데이터 행 개수만큼 생성하게 되고,

각 행의 열은 boardVO의 변수(brdno, brdtitle등)들을 호출하여 값을 출력(c:out)한다.


<%@ 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 http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>board1</title>
</head>
<body>
<a href="board1Form">글쓰기</a>
                   
<table border="1" style="width:600px">
    <caption>게시판</caption>
    <colgroup>
        <col width='8%' />
        <col width='*%' />
        <col width='15%' />
        <col width='15%' />
    </colgroup>
    <thead>
        <tr>
        <th>번호</th>
        <th>제목</th>
        <th>등록자</th>
        <th>등록일</th>
        </tr>
    </thead>
    <tbody>
        <c:forEach var="listview" items="${listview}" varStatus="status">   
            <c:url var="link" value="board1Read">
                <c:param name="brdno" value="${listview.brdno}" />
            </c:url>       
            <tr>
                <td><c:out value="${listview.brdno}"/></td>
                <td><a href="${link}"><c:out value="${listview.brdtitle}"/></a></td>
                <td><c:out value="${listview.brdwriter}"/></td>
                <td><c:out value="${listview.brddate}"/></td>
           </tr>
        </c:forEach>
    </tbody>
</table>   
</body>
</html>

boardList.jsp

테그 라이브러리인 c:url은 글읽기 컨트롤(board1Read)의 주소와 글을 읽어오는데

필요한 글번호를 파라메터로하여 링크를 생성하고,

글 제목을 클릭하면 이동하도록 링크를 추가하였다.

테그 라이브러리에서 제공되는 명령어는 많지만 본 예제에서는 다음과 같이 몇 가지만 주로 사용한다.

명령어

기능

 forEach

 주어진 데이터 개수 만큼 반복

 set

 변수를 선언하고 값 할당

 out

 변수 값을 화면에 출력

 if

 조건절

 url

 URL 주소 생성


이상의 코드가 실행되면 HTML 생성되고 사용자에게 보여지게 된다. 

웹 브라우저에서 http://localhost:8080/board/board1List를 입력하여 실행 결과를 확인하자.



웹 브라우저에서 디버그 모드(F12키 실행)로 확인하면

그림과 같이 forEach 문이 있던 자리에 HTML이 생성된 것을 확인할 수 있다.




'Java > 게시판 1' 카테고리의 다른 글

1. 기본게시판 - 준비 & 시작  (5) 2016.03.28
3. 기본게시판 - 글 쓰기  (4) 2016.03.28
4. 기본게시판 - 글 읽기  (0) 2016.03.28
5. 기본게시판 - 글 수정  (2) 2016.03.28
6. 기본게시판 - 글 삭제  (0) 2016.03.28

글쓰기는 두 개의 기능으로 구성되었기 때문에 두 개의 컨트롤이 필요하다.

하나는 글쓰기 폼을 보여주고 사용자가 입력하게 하는 페이지(board1Form) 컨트롤과

사용자가 입력 후 저장 버튼을 누르면 저장하는 컨트롤(board1FormSave)이다.

먼저 글쓰기 폼은 다음 코드와 같이

사용자가 입력할 폼(HTML)이 있는 JSP 파일의 위치만 반환하면 된다.

@RequestMapping(value = "/board1Form")
public String boardForm() throws Exception {
        return "board1/boardForm";
}

board1Ctr.java

반환된 boardForm.jsp에는 다음과 같은 코드가 구성되어 있다.

Form 테그에서 action명이board1Save 컨트롤을 가르키고 있기 때문에

사용자가 저장 버튼을 누르면 글 내용을 저장하는 board1Save이 실행된다.

<%@ 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 http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>board1</title>
</head>
<body>
    <form name="form1" action="board1Save">
        <table border="1" style="width:600px">
            <caption>게시판</caption>
            <colgroup>
                <col width='15%' />
                <col width='*%' />
            </colgroup>
            <tbody>
                <tr>
                    <td>작성자</td>
                    <td><input type="text" name="brdwriter" size="20" maxlength="20"></td>
                </tr>
                <tr>
                    <td>제목</td>
                    <td><input type="text" name="brdtitle" size="70" maxlength="250"></td>
                </tr>
                <tr>
                    <td>내용</td>
                    <td><textarea name="brdmemo" rows="5" cols="60"></textarea></td>
                </tr>
            </tbody>
        </table>   
        <a href="#" onclick="form1.submit()">저장</a>
    </form>   
</body>
</html>

board1Form.jsp

글 내용을 저장하기 위해 board1Save 컨트롤이 실행된다.

boardSave 함수가 실행되면서 파라메터로 boardVO 클래스가 사용된다.

@ModelAttribute는 사용자가 입력한 내용들의 이름과 지정된 클래스 (boardVO)의 변수 명이 일치하면 자동으로 그 내용을 담아서 반환해 준다.

사용자 입력 HTML에서 텍스트 입력 상자의 이름을 확인해 보면 brdwriter(작성자), brdtitle(제목), brdmemo(글내용)으로 명명되어 있다.

이 명칭은 모두 boardVO에 선언되어 사용되는 것으로 @ModelAttribute이 자동으로 바인딩하여 넘겨 준다.

@ModelAttribute을 생략하고 클래스명만 지정해서 사용할 수 있다.

@ModelAttribute을 사용하지 않으면 request를 사용하며 하나씩 값을 받아와야 한다.

@RequestMapping(value = "/board1Save")
public String boardSave(@ModelAttribute boardVO boardInfo) throws Exception {
       
    boardSvc.insertBoard(boardInfo);
       
    return "redirect:/board1List";
}

board1Ctr.java

사용자가 입력한 내용을 boardVO로 받아와서 저장(Insert)하기 위한 서비스(insertBoard)로 넘겨 준다.
저장되고 난 후 반환 값이 JSP 파일이 아니라 redirect 이다. 즉, 글을 저장하고 난 뒤 게시판의 리스트(board1List)로 돌아가라는 의미이다.

[주의] 입력 폼의 컴포넌트(텍스트 박스들 등)명칭과 boardVO 클래스, 테이블(TBL_BOARD)의 필드명이 모두 동일하다.

개발의 편의성과 가독성을 위한 것으로 필수는 아니지만 지키는 것이 좋다.


서비스에서는 INSERT문을 실행한다.

public void insertBoard(boardVO param) throws Exception {
        sqlSession.insert("insertBoard1", param);
}

board1Svc.java

<insert id="insertBoard1" parameterType="gu.board1.boardVO" >
        INSERT INTO TBL_BOARD(BRDTITLE, BRDWRITER, BRDMEMO, BRDDATE)
        VALUES (#{brdtitle}, #{brdwriter}, #{brdmemo}, NOW() )
</insert>

board1.xml

여기에서도 서비스명(insertBoard)과 SQL 매핑 ID(insertBoard1)에 1만 다르고

다른 이름들은 같다.

사소하지만 이러한 명명 규칙이 프로젝트가 커질 수록 수정에 용이하여

때로는 중요한 역할을 하기도 한다.



'Java > 게시판 1' 카테고리의 다른 글

1. 기본게시판 - 준비 & 시작  (5) 2016.03.28
2. 기본게시판 - 리스트  (0) 2016.03.28
4. 기본게시판 - 글 읽기  (0) 2016.03.28
5. 기본게시판 - 글 수정  (2) 2016.03.28
6. 기본게시판 - 글 삭제  (0) 2016.03.28

글 읽기는 리스트에서 사용자가 선택한 글에 대한 내용을 보여주는 페이지로

다음과 같은 코드를 가진다.

먼저, 사용자가 선택한 글의 번호(brdno)을 파라메터로 받아온다.

앞서 글쓰기에서는 @ModelAttribute를 이용하여 boardVO 클래스로 받아왔지만,

여기에서는 파라메터가 한개라서 request로 받아온다.

이 파라메터는 글읽기로 넘어 올 때는 리스트에서 글 제목에 board1Read?brdno=1와 같은 url이 링크로 생성되었고

물음표(?) 뒤의 값이 파라메터로 넘어오게 되는 것이다.

데이터 베이스에서 글번호에 해당하는 내용을 가져오기 위해 서비스로 넘겨준다.

SQL이 실행되어 하나의 글(행)이 반환되면 ModelMap을 이용하여

JSP에 값을 넘겨서 적절한 모습으로 사용자에게 보여 주게 된다.

@RequestMapping(value = "/board1Read")
public String boardRead(HttpServletRequest request, ModelMap modelMap) throws Exception {
       
        String brdno = request.getParameter("brdno");
       
        boardVO boardInfo = boardSvc.selectBoardOne(brdno);
       
        modelMap.addAttribute("boardInfo", boardInfo);
       
        return "board1/boardRead";
}

board1Ctr.java

글읽기 페이지(HTML)는 다음 코드로,

글 쓰기 폼(HTML)에서 텍스트 입력 박스 위치에 c:out테그로 각각의 값을 출력해서 작성했다.

컨트롤에서 boardInfo로 넘겨줬기 때문에 JSP 파일에서도

boardInfo.brdwriter, boardInfo.brdtitle 등으로 값을 가져와 사용한다.

<%@ 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 http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>board1</title>
</head>
<body>
        <table border="1" style="width:600px">
            <caption>게시판</caption>
            <colgroup>
                <col width='15%' />
                <col width='*%' />
            </colgroup>
            <tbody>
                <tr>
                    <td>작성자</td>
                    <td><c:out value="${boardInfo.brdwriter}"/></td>
                </tr>
                <tr>
                    <td>제목</td>
                    <td><c:out value="${boardInfo.brdtitle}"/></td>
                </tr>
                <tr>
                    <td>내용</td>
                    <td><c:out value="${boardInfo.brdmemo}"/></td>
                </tr>
            </tbody>
        </table>   
        <a href="#" onclick="history.back(-1)">돌아가기</a>
        <a href="board1Delete?brdno=<c:out value="${boardInfo.brdno}"/>">삭제</a>
        <a href="board1Update?brdno=<c:out value="${boardInfo.brdno}"/>">수정</a>
</body>
</html>

다시 리스트로 돌아가기 위한 링크,

글 삭제와 글 수정을 할 수 있는 링크가 추가 되어 있다.

글 읽기, 수정, 삭제는 모두 대상 글에 대한 고유 값인 글 번호 (brdno)가 필요하기 때문에

항상파라메터로 넘어가는 것을 볼 수 있다. 

리스트에서 

글읽기로 넘어 갈 때는 board1Read?brdno=1
글삭제로 넘어 갈 때는 board1Delete?brdno=1
글수정으로 넘어 갈 때는 board1Update?brdno=1




'Java > 게시판 1' 카테고리의 다른 글

2. 기본게시판 - 리스트  (0) 2016.03.28
3. 기본게시판 - 글 쓰기  (4) 2016.03.28
5. 기본게시판 - 글 수정  (2) 2016.03.28
6. 기본게시판 - 글 삭제  (0) 2016.03.28
7. 기본게시판 - 예전의 개발 코드  (1) 2016.03.19

글 수정도 글쓰기와 같이 두 개의 컨트롤로 구성 되어 있다.

사용자의 입력을 받는 폼과 입력한 내용을 저장하는 컨트롤로 구성된다.

사용자의 입력을 받는 폼의 컨트롤은 글읽기와 유사한 구조로 되어 있다.

글번호를 파라메터로 받은 뒤 데이터 베이스에서 해당 글을 조회하여

사용자가 수정할 수 있도록 입력상자(텍스트 박스)에 넣어준다.

글 읽기와 다른 점은 글 쓰기처럼 텍스트 박스를 사용한다는 것이다.

@RequestMapping(value = "/board1Update")
public String boardUpdate(HttpServletRequest request, ModelMap modelMap) throws Exception {
       
        String brdno = request.getParameter("brdno");
       
        boardVO boardInfo = boardSvc.selectBoardOne(brdno);
       
        modelMap.addAttribute("boardInfo", boardInfo);
       
        return "board1/boardUpdate";
}

board1Ctr.java

수정의 입력 폼은 글쓰기와 동일한데

hidden 테그로 글번호(brdno)를 가지고 있다는 것이다.

글쓰기는 글번호가 없는 상태이지만 수정은 글번호가 있어야 수정할 수 있기 때문에

사용자에게 보이지 않는 hidden 테그로 가지고 있게 된다.

Form 테그의 action 명이 board1UpdateSave로 되어

입력한 내용이 저장(Update) 컨트롤로 가도록 되어 있다.

<%@ 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 http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>board1</title>
</head>
<body>
    <form name="form1" action="board1UpdateSave">
        <table border="1" style="width:600px">
            <caption>게시판</caption>
            <colgroup>
                <col width='15%' />
                <col width='*%' />
            </colgroup>
            <tbody>
                <tr>
                    <td>작성자</td>
                    <td><input type="text" name="brdwriter" size="20" maxlength="20" value="<c:out value="${boardInfo.brdwriter}"/>"></td>
                </tr>
                <tr>
                    <td>제목</td>
                    <td><input type="text" name="brdtitle" size="70" maxlength="250" value="<c:out value="${boardInfo.brdtitle}"/>"></td>
                </tr>
                <tr>
                    <td>내용</td>
                    <td><textarea name="brdmemo" rows="5" cols="60"><c:out value="${boardInfo.brdmemo}"/></textarea></td>
                </tr>
            </tbody>
        </table>   
        <input type="hidden" name="brdno" value="<c:out value="${boardInfo.brdno}"/>">
        <a href="#" onclick="form1.submit()">저장</a>
    </form>   
</body>
</html>

boardUpdate.jsp

수정 컨트롤에서는 글쓰기의 저장 컨트롤과 같이 boardVO로 사용자의 입력값을 받아와서

서비스의 updateBoard을 호출하여 UPDATE 문을 실행하여 테이블에 저장한다.

글쓰기와 차이점은 Insert문이냐 Update 문이냐 하는 차이뿐이다.

@RequestMapping(value = “/board1UpdateSave”)
public String board1UpdateSave(@ModelAttribute("boardInfo") boardVO boardInfo) throws Exception {
       
        boardSvc.updateBoard(boardInfo);
       
        return "redirect:/board1List";
}

board1Ctr.java



'Java > 게시판 1' 카테고리의 다른 글

2. 기본게시판 - 리스트  (0) 2016.03.28
3. 기본게시판 - 글 쓰기  (4) 2016.03.28
4. 기본게시판 - 글 읽기  (0) 2016.03.28
6. 기본게시판 - 글 삭제  (0) 2016.03.28
7. 기본게시판 - 예전의 개발 코드  (1) 2016.03.19

글삭제는 시각적인 페이지(html)이 없이 넘겨받은 글번호(brdno)를 Delete 문을 이용하여 삭제하고 리스트로 가서 확인할 수 있게 하면 된다.

@RequestMapping(value = "/board1Delete")
       public String boardDelete(HttpServletRequest request) throws Exception {
       
        String brdno = request.getParameter("brdno");
       
        boardSvc.deleteBoardOne(brdno);
       
        return "redirect:/board1List";
}

board1Ctr.java

    <delete id="deleteBoard1One" parameterType="String">
        DELETE
          FROM TBL_BOARD
         WHERE BRDNO=#{brdno}
    </delete>

board1.xml

컨트롤, 서비스, SQL문과 반환(ResultSet) 그리고 시각적인 JSP(HTML)를 오가는 구조와 게시판의 흐름만 알면 이상의 내용은 문제없이 작성하고 실행할 수 있다.

실제 개발도 이 구조와 개념 내에서 이루어지기 때문에 잘 이해하길 바란다.

이 이상의 것들은 필요에 따른 부가적인 것으로 앞서 언급한 기본을 충실하게 이해하고 단독으로 개발할 수 있다면, 이후의 것들은 쉽게 개발 할 수 있을 것이다.

'Java > 게시판 1' 카테고리의 다른 글

2. 기본게시판 - 리스트  (0) 2016.03.28
3. 기본게시판 - 글 쓰기  (4) 2016.03.28
4. 기본게시판 - 글 읽기  (0) 2016.03.28
5. 기본게시판 - 글 수정  (2) 2016.03.28
7. 기본게시판 - 예전의 개발 코드  (1) 2016.03.19

다음 코드는 예전에 많이 사용되던 JSP(Java Server Pages) 방식으로 글 리스트 부분을 코딩 한 것이다.

MVC로 분할해 놓은 코드가 모두 하나의 페이지에 있다.

ASP(Active Server Page)도 코드가 다음과 유사한데 예전에는 이렇게 하나의 페이지에서 모든 작업이 이루어 졌다. 

오히려 이 방식이 더 직관적이고 쉬울 수 있는데, 판단은 각자.

<%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR" %>
<%@ page import = "java.sql.*" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<body>
    <table border="1" style="width:600px">
        <caption>게시판</caption>
        <colgroup>
            <col width='8%' />
            <col width='*%' />
            <col width='15%' />
            <col width='15%' />
        </colgroup>
        <thead>
            <tr>
                <th>번호</th>
                <th>제목</th>
                <th>등록자</th>
                <th>등록일</th>
            </tr>
        </thead>
        <tbody>
<%
    Class.forName("com.mysql.jdbc.Driver");
    String url = "jdbc:mysql://localhost/board";
    String id = "root";
    String pw = "비밀번호";
    Connection conn=DriverManager.getConnection(url,id,pw);
    Statement stmt=conn.createStatement();
   
    String query="SELECT BRDNO, BRDTITLE, BRDWRITER, BRDMEMO, DATE_FORMAT(BRDDATE,'%Y-%m-%d') BRDDATE " +
                 "  FROM TBL_BOARD";
    ResultSet rs = stmt.executeQuery(query);
   
    while(rs.next()){
%>       
                <tr>
                    <td><%=rs.getString("brdno")%></td>
                    <td><a href="board1Read?brdno=<%=rs.getString("brdno")%>"><%=rs.getString("brdtitle")%></a></td>
                    <td><%=rs.getString("brdwriter")%></td>
                    <td><%=rs.getString("brddate")%></td>
                </tr>
<%
    }//    while(rs.next()){
    stmt.close();
    conn.close();
%>       
        </tbody>
    </table>   
</body>
</html>

/webapp/boardList.jsp



'Java > 게시판 1' 카테고리의 다른 글

2. 기본게시판 - 리스트  (0) 2016.03.28
3. 기본게시판 - 글 쓰기  (4) 2016.03.28
4. 기본게시판 - 글 읽기  (0) 2016.03.28
5. 기본게시판 - 글 수정  (2) 2016.03.28
6. 기본게시판 - 글 삭제  (0) 2016.03.28

+ Recent posts