JSP + Servlet | MVC 패턴(모델 2) 게시판 구현 1/n

파과·2022년 7월 25일
0
post-thumbnail

MVC 패턴은 모델, 뷰, 컨트롤러의 세 영역으로 나누고 이들의 결합도를 최소화하는 것을 모토로 한다.

구성요소설명
모델주로 DB와 연동하는 비즈니스 로직을 통해 얻어온 데이터를 저장하는 용도로 사용한다.
사용자와의 인터페이스로 주로 JSP페이지를 사용한다.
컨트롤러모델과 뷰 사이의 흐름을 제어하는 역할을 한다. 주로 서블릿을 사용한다.

파일 설명

JSP페이지

  • boardList.jsp 게시글 리스트 페이지
  • boardWrite.jsp 게시글 등록 페이지
  • boardView.jsp 게시글 상세보기 페이지
  • boardUpdate.jsp 게시글 수정 페이지
  • boardCheckPass.jsp 게시글 수정 혹은 삭제할 수 있는 자격이 있는지 비밀번호 확인을 위한 비밀번호 입력 페이지
  • checkSuccess.jsp 게시글 수정과 삭제를 위한 페이지

Class

  • BoardServlet.java 컨트롤러 서블릿 - 요청을 받아 요청에 해당하는 model과 view를 호출
  • ActionFactory.java 컨트롤러 서블릿 - 커맨드(command) 패턴으로 작업 처리를 위한 명령 처리 클래스가 있어야 함
  • Action.java 명령 처리 클래스의 슈퍼 클래스로 사용할 인터페이스 - 모델 역할을 하는 모든 클래스를 컨트롤러가 동일한 방식으로 접근할 수 있도록 하기 위한 모델들의 인터페이스.
  • BoardListAction.java 게시글 전체 정보를 DB에서 얻어옴
  • BoardWriteFormAction.java 게시글 등록 페이지로 이동
  • BoardWriteAction.java 입력한 게시글 정보를 DB에 추가
  • BoardViewAction.java 해당 게시글을 DB에서 찾아 상세 정보를 보여줌
  • BoardCheckPassFormAction.java 게시글 수정 혹은 삭제를 위한 비밀번호 입력 페이지로 이동
  • BoardCheckPassAction.java 게시글 비밀번호 일치하는지 비교
  • BoardUpdateFormAction.java 게시글 수정 페이지로 이동
  • BoardUpdateAction.java 입력한 정보로 DB의 게시글 정보 수정
  • BoardDeleteAction.java DB의 게시글 정보 삭제

JavaScript

  • board.js 폼에 입력된 정보가 올바른지 판단하는 자바스크립트

VO

  • BoardVO.java 게시글 정보 저장 클래스

DAO

  • BoardDAO.java DB의 board테이블 처리 클래스

0. Setting

  • context.xml 파일을 META-INF 폴더에 추가
  • WEB-INF의 lib에 추가하기
    • cos.jar (파일 업로드)
    • jstl.jar (JSTL 사용)
    • standard.jar (JSTL 사용)
    • ojdbc6.jar (오라클 DB에 연결)
    • lombok.jar (Getter, Setter 생성)

1. DB에 board 테이블 생성

create table board(
    num         number(5)   primary key,
    pass        varchar2(30),
    name        varchar2(30),
    email       varchar2(30),
    title       varchar2(50),
    content     varchar2(1000),
    readcount   number(4)   default 0,
    writedate   date        default sysdate
    
);

select * from board;

create sequence board_seq start with 0 increment by 1 minvalue 0;

insert into board(num, name, email, pass, title, content) 
values(board_seq.nextval, '성윤정', 'pinksung@nate.com', '1234', '첫방문', '반갑습니다.');
insert into board(num, name, email, pass, title, content) 
values(board_seq.nextval, '성윤정', 'pinksung@nate.com', '1234', '김밥', '맛있어요.');
insert into board(num, name, email, pass, title, content) 
values(board_seq.nextval, '전수빈', 'pinksung@nate.com', '1234', '고등애', '일식입니다.');
insert into board(num, name, email, pass, title, content) 
values(board_seq.nextval, '전윤지', 'pinksung@nate.com', '1234', '갯골마을', '돼지삼겹살이 맛있습니다.');

commit;

2. com.sw.dto/BoardVO.java

게시글 정보 저장하는 VO 클래스.

package com.sw.dto;

import java.sql.Timestamp;

import lombok.Getter;
import lombok.Setter;
import lombok.Data;

@Getter
@Setter
@Data

public class BoardVO {
	
	private int num;
	private String name;
	private String email;
	private String pass;
	private String title;
	private String content;
	private int readcount;
	private Timestamp writedate;
	
}

3. util/DBManager.java

Connection 객체 얻기 및 사용이 끝난 리소스 해제를 위한 클래스

package util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;

public class DBManager {
	
	public static Connection getConnection(){
		Connection conn = null;
		
		try {
			Context initContext = new InitialContext();
			Context envContext = (Context) initContext.lookup("java:/comp/env");
            
            //jdbc/OracleDB란 이름의 객체를 찾아서 DataSource가 받는다. 
			DataSource ds = (DataSource) envContext.lookup("jdbc/OracleDB");
            //생성된 ds로 Connection을 구한다.
			conn = ds.getConnection();
		}catch(Exception e) {
			e.printStackTrace();
		}
		return conn;
	}
	
    //select 수행 후 리소스 해제를 위한 메소드
	public static void close(Connection conn, Statement stmt, ResultSet rs) {
		try {
			rs.close();
			stmt.close();
			conn.close();
		}catch(Exception e) {
			e.printStackTrace();
		}
	}
	
    //DML(insert, update, delete)을 수행한 후 리소스 해제를 위한 메소드
	public static void close(Connection conn, Statement stmt) {
		try {
			stmt.close();
			conn.close();
		}catch(Exception e) {
			e.printStackTrace();
		}
	}
}

3. com.sw.dao/BoardDAO.java

게시글 테이블에 액세스하는 DAO클래스.
우선 싱글톤 패턴만 정의.

package com.sw.dao;

import com.sw.dto.BoardVO;

import util.DBManager;

public class BoardDAO {

	//싱글톤 패턴으로 만들기
	private BoardDAO() {
		
	}
	private static BoardDAO instance = new BoardDAO();
	
	public static BoardDAO getInstance() {
		return instance;
	}
}

4. Webcontent/script/board.js

5. WebContent/css/shopping.css

0개의 댓글