국비지원교육 (22.01-22.07)/강의노트

22-05-24(화) 081일차 [Oracle, Spring Framework, Mybatis Framework] 게시판 만들기

옌炎 2022. 6. 22. 15:19
728x90

수업내용


1교시 (09:30-10:20)

  • 프로젝트 방식에 대한 설명
  • JOIN
-- SQL 99
-- NATURAL JOIN 
SELECT E.EMPNO, E.ENAME, E.JOB, E.MGR, E.HIREDATE, E.SAL, E.COMM, 
       DEPTNO, D.DNAME, D.LOC
FROM EMP E NATURAL JOIN DEPT D
ORDER BY DEPTNO, E.EMPNO;

-- JOIN ~ USING
SELECT E.EMPNO, E.ENAME, E.JOB, E.MGR, E.HIREDATE, E.SAL, E.COMM, 
       DEPTNO, D.DNAME, D.LOC
FROM EMP E JOIN DEPT D USING (DEPTNO)
ORDER BY DEPTNO, E.EMPNO;

SELECT *
FROM EMP A NATURAL JOIN DEPT B
ORDER BY DEPTNO, A.EMPNO;

--SELECT A.*, B.*
--FROM EMP A NATURAL JOIN DEPT B
--ORDER BY DEPTNO, A.EMPNO;

SELECT *
FROM EMP A JOIN DEPT B USING (DEPTNO)
ORDER BY DEPTNO, A.EMPNO;

--SELECT A.*, B.*
--FROM EMP A JOIN DEPT B USING (DEPTNO)
--ORDER BY DEPTNO, A.EMPNO;

SELECT *
FROM EMP A, DEPT B
WHERE A.DEPTNO = B.DEPTNO;

SELECT A.*, B.*
FROM EMP A, DEPT B
WHERE A.DEPTNO = B.DEPTNO;

2교시 (10:30-11:20)

  • select
    • row 단위 리턴
      • 단일행 함수
      • group by
      • join
        • inner
        • outer
    • 서브쿼리
      • 인라인 뷰
      • 서브쿼리
      • 스칼라
-- 뷰
CREATE TABLE EMP02
AS
SELECT EMPNO, ENAME, SAL, DEPTNO FROM EMP;

SELECT * FROM EMP02;

CREATE VIEW VIEW_EMP02
AS
SELECT *
FROM EMP02
WHERE DEPTNO = 10;

-- CONN SYSTEM/1234;
-- GRANT CREATE VIEW TO SCOTT;

SELECT * FROM VIEW_EMP02;

3교시 (11:30-12:20)

  • VIEW
-- 복합 뷰(complex view : 기본 테이블 2개 이상일 때
-- ISUD 불가능
CREATE VIEW VIEW_EMP_DEPT
AS
SELECT A.EMPNO, A.ENAME, A.SAL, B.DEPTNO, B.DNAME
FROM EMP A, DEPT B
WHERE A.DEPTNO = B.DEPTNO
AND A.DEPTNO = 10;

SELECT * FROM VIEW_EMP_DEPT;

--INSERT INTO VIEW_EMP_DEPT
--VALUES (8001, 'AAAA', 4000, 10, 'ACCOUNT');

-- 뷰 생성 시 컬럼명을 조정할 수 있다.
CREATE OR REPLACE VIEW VIEW_EMP02_COL(사원번호, 사원명, 급여, 부서번호)
AS
SELECT EMPNO, ENAME, SAL, DEPTNO
FROM EMP02;

SELECT * FROM VIEW_EMP02_COL;

SELECT * FROM VIEW_EMP02_COL WHERE 부서번호 = 10;
--SELECT * FROM VIEW_EMP02_COL WHERE DEPTNO = 10;

-- 뷰를 새로 만든 것
CREATE OR REPLACE VIEW VIEW_EMP02_COL_1
AS
SELECT EMPNO AS E_1, ENAME AS E_2, SAL AS E_3, DEPTNO AS E_4
FROM EMP02;

SELECT * FROM VIEW_EMP02_COL_1;

-- NOFORCE : DEFAULT : 기본 테이블이 없으면 뷰를 생성하지 않음
CREATE OR REPLACE VIEW VIEW_EMP02_1
AS
SELECT EMPNO, ENAME, SAL, DEPTNO
FROM EMP02_NOTABLE
WHERE ROWNUM <= 3;
--오류 보고 -
--ORA-00942: 테이블 또는 뷰가 존재하지 않습니다
--00942. 00000 -  "table or view does not exist"
--*Cause:    
--*Action:

-- FORCE : 기본 테이블이 없어도 USER_VIEWS 데이터 사전에 뷰를 생성한다.
CREATE OR REPLACE FORCE VIEW VIEW_EMP02_2
AS
SELECT EMPNO, ENAME, SAL, DEPTNO
FROM EMP02_NOTATBLE
WHERE ROWNUM <= 3;
--경고: 컴파일 오류와 함께 뷰가 생성되었습니다.


-- WITH READ ONLY : 읽기만 가능
-- 대부분의 뷰는 리드온리로 생성할 것
CREATE OR REPLACE VIEW VIEW_EMP04
AS
SELECT EMPNO, ENAME, DEPTNO, JOB
FROM EMP
WHERE JOB LIKE 'MANAGER' WITH READ ONLY;

SELECT * FROM VIEW_EMP04;

INSERT INTO VIEW_EMP04
VALUES (9000, 'ABC', 30, 'MANAGER');
--명령의 118 행에서 시작하는 중 오류 발생 -
--INSERT INTO VIEW_EMP04
--VALUES (9000, 'ABC', 30, 'MANAGER')
--오류 발생 명령행: 118 열: 1
--오류 보고 -
--SQL 오류: ORA-42399: 읽기 전용 뷰에서는 DML 작업을 수행할 수 없습니다.
--42399.0000 - "cannot perform a DML operation on a read-only view"

-- WITH CHECK OPTION
CREATE OR REPLACE VIEW VIEW_EMP03
AS
SELECT EMPNO, ENAME, DEPTNO, JOB
FROM EMP
WHERE JOB LIKE 'MANAGER' WITH CHECK OPTION;

SELECT * FROM VIEW_EMP03;

INSERT INTO VIEW_EMP03
VALUES (9000, 'ABC', 30, 'SALESMAN');
--명령의 139 행에서 시작하는 중 오류 발생 -
--INSERT INTO VIEW_EMP03
--VALUES (9000, 'ABC', 30, 'SALESMAN')
--오류 보고 -
--ORA-01402: 뷰의 WITH CHECK OPTION의 조건에 위배 됩니다

4교시 (12:30-13:20)

게시판 구현하기

  • CommonUtils.java
package a.b.c.com.kosmo.common;

public abstract class CommonUtils {
	
	// 게시판
	public static final String PRODUCT_IMG_UPLOAD_PATH = "C:\\00.KOSMO108\\30.Web\\eclipse_kosmo_spring_work\\.metadata\\.plugins\\org.eclipse.wst.server.core\\tmp0\\wtpwebapps\\kosmoSpring\\fileupload\\product";	
	public static final int PRODUCT_IMG_FILE_SIZE = 10*1024*1024; // 10MB
	public static final String PRODUCT_EN_CODE = "UTF-8";
	
	// 상품 페이징  
	public static final int PRODUCT_PAGE_SIZE = 3;
	public static final int PRODUCT_GROUP_SIZE = 3;
	public static final int PRODUCT_CUR_PAGE = 1;
	public static final int PRODUCT_TOTAL_COUNT = 0;
	
	// 회원 
	public static final String MEMBER_IMG_UPLOAD_PATH = "C:\\00.KOSMO108\\30.Web\\eclipse_kosmo_spring_work\\.metadata\\.plugins\\org.eclipse.wst.server.core\\tmp0\\wtpwebapps\\kosmoSpring\\fileupload\\mem";
	public static final int MEMBER_IMG_FILE_SIZE = 10*1024*1024; // 10MB
	public static final String MEMBER_EN_CODE = "UTF-8";
	
	// 게시판 
	public static final String BOARD_IMG_UPLOAD_PATH = "C:\\00.KOSMO108\\30.Web\\eclipse_kosmo_spring_work\\.metadata\\.plugins\\org.eclipse.wst.server.core\\tmp0\\wtpwebapps\\kosmoSpring\\fileupload\\board";
	public static final int BOARD_IMG_FILE_SIZE = 10*1024*1024; // 10MB
	public static final String BOARD_EN_CODE = "UTF-8";
}
  • ChabunUtil.java
package a.b.c.com.kosmo.common;

public abstract class ChabunUtil {

	public static final String BIZ_GUBUN_P = "P"; // 상품
	public static final String BIZ_GUBUN_C 	= "C"; // 카트
	public static final String BIZ_GUBUN_M 	= "M"; // 회원
	public static final String BIZ_GUBUN_B 	= "B"; // 게시판
	
	// type : D : YYYYMMDD, M : YYYYMM, Y : YYYY, N;
	public static String numPad(String t, String c) {
		
		for (int i=c.length(); i < 4; i++) {
			c = "0" + c;
		}
		String ymd = DateFormatUtil.ymdFormats(t);
		
		return ymd.concat(c);
	}
	
	public static String getProductChabun(String type, String memNum) {
		return BIZ_GUBUN_P.concat(ChabunUtil.numPad(type, memNum));
	}
	
	public static String getCartChabun(String type, String memNum) {		
		return BIZ_GUBUN_C.concat(ChabunUtil.numPad(type, memNum));
	}
	
	public static String getMemberChabun(String type, String memNum) {		
		return BIZ_GUBUN_M.concat(ChabunUtil.numPad(type, memNum));
	}
	
	public static String getBoardChabun(String type, String memNum) {		
		return BIZ_GUBUN_B.concat(ChabunUtil.numPad(type, memNum));
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		String c = "1";
		System.out.println(">>> : " + ChabunUtil.getProductChabun("m", c));
	}
}
  • KosmoBoardVO.java
package a.b.c.com.kosmo.board.vo;

public class KosmoBoardVO {

	private String kbnum;
	private String kbsubject;
	private String kbname;
	private String kbcontent;
	private String kbfile;
	private String kbpw;
	private String deleteyn;
	private String insertdate;
	private String updatedate;
	
	// 생성자
	public KosmoBoardVO() {
		
	}

	public KosmoBoardVO(String kbnum, String kbsubject, String kbname, String kbcontent, String kbfile, String kbpw,
			String deleteyn, String insertdate, String updatedate) {
		
		this.kbnum = kbnum;
		this.kbsubject = kbsubject;
		this.kbname = kbname;
		this.kbcontent = kbcontent;
		this.kbfile = kbfile;
		this.kbpw = kbpw;
		this.deleteyn = deleteyn;
		this.insertdate = insertdate;
		this.updatedate = updatedate;
	}
	
	// getter/setter
	public String getKbnum() {
		return kbnum;
	}
	public String getKbsubject() {
		return kbsubject;
	}
	public String getKbname() {
		return kbname;
	}
	public String getKbcontent() {
		return kbcontent;
	}
	public String getKbfile() {
		return kbfile;
	}
	public String getKbpw() {
		return kbpw;
	}
	public String getDeleteyn() {
		return deleteyn;
	}
	public String getInsertdate() {
		return insertdate;
	}
	public String getUpdatedate() {
		return updatedate;
	}
	public void setKbnum(String kbnum) {
		this.kbnum = kbnum;
	}
	public void setKbsubject(String kbsubject) {
		this.kbsubject = kbsubject;
	}
	public void setKbname(String kbname) {
		this.kbname = kbname;
	}
	public void setKbcontent(String kbcontent) {
		this.kbcontent = kbcontent;
	}
	public void setKbfile(String kbfile) {
		this.kbfile = kbfile;
	}
	public void setKbpw(String kbpw) {
		this.kbpw = kbpw;
	}
	public void setDeleteyn(String deleteyn) {
		this.deleteyn = deleteyn;
	}
	public void setInsertdate(String insertdate) {
		this.insertdate = insertdate;
	}
	public void setUpdatedate(String updatedate) {
		this.updatedate = updatedate;
	}
}

5교시 (14:30-15:20)

게시판 구현하기

  • SpringChabunDAO.java
package a.b.c.com.kosmo.common.dao;

import a.b.c.com.kosmo.product.vo.KosmoProductVO;
import a.b.c.com.kosmo.cart.vo.KosmoCartVO;
import a.b.c.com.kosmo.mem.vo.KosmoMemberVO;
import a.b.c.com.kosmo.board.vo.KosmoBoardVO;

public interface SpringChabunDAO {

	public KosmoProductVO getProductChabun();
	public KosmoCartVO getCartChabun();
	public KosmoMemberVO getMemberChabun();
	public KosmoBoardVO getBoardChabun();
}
  • SpringChabunDAOImpl.java
package a.b.c.com.kosmo.common.dao;

import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import a.b.c.com.kosmo.product.vo.KosmoProductVO;
import a.b.c.com.kosmo.cart.vo.KosmoCartVO;
import a.b.c.com.kosmo.mem.vo.KosmoMemberVO;
import a.b.c.com.kosmo.board.vo.KosmoBoardVO;

@Repository
public class SpringChabunDAOImpl implements SpringChabunDAO {

	Logger logger = LogManager.getLogger(SpringChabunDAOImpl.class);
	
	@Autowired(required=false)
	private SqlSessionTemplate sqlSession;
	
	@Override
	public KosmoProductVO getProductChabun() {
		// TODO Auto-generated method stub
		logger.info("SpringChabunDAOImpl getProductChabun >>> : ");
		return sqlSession.selectOne("getProductChabun");
	}
	
	@Override
	public KosmoCartVO getCartChabun() {
		// TODO Auto-generated method stub
		logger.info("SpringChabunDAOImpl getCartChabun >>> : ");
		return sqlSession.selectOne("getCartChabun");
	}
	
	@Override
	public KosmoMemberVO getMemberChabun() {
		// TODO Auto-generated method stub
		logger.info("SpringChabunDAOImpl getMemberChabun >>> : ");
		return sqlSession.selectOne("getMemberChabun"); // getMemberChabun
	}

	@Override
	public KosmoBoardVO getBoardChabun() {
		// TODO Auto-generated method stub
		logger.info("SpringChabunDAOImpl getBoardChabun >>> : ");
		return sqlSession.selectOne("getBoardChabun");
	}
}
  • SpringChabunService.java
package a.b.c.com.kosmo.common.service;

import a.b.c.com.kosmo.product.vo.KosmoProductVO;
import a.b.c.com.kosmo.cart.vo.KosmoCartVO;
import a.b.c.com.kosmo.mem.vo.KosmoMemberVO;
import a.b.c.com.kosmo.board.vo.KosmoBoardVO;

public interface SpringChabunService {

	public KosmoProductVO getProductChabun();
	public KosmoCartVO getCartChabun();
	public KosmoMemberVO getMemberChabun();
	public KosmoBoardVO getBoardChabun();
}
  • SpringChabunServiceImpl.java
package a.b.c.com.kosmo.common.service;

import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import a.b.c.com.kosmo.common.dao.SpringChabunDAO;
import a.b.c.com.kosmo.product.vo.KosmoProductVO;
import a.b.c.com.kosmo.cart.vo.KosmoCartVO;
import a.b.c.com.kosmo.mem.vo.KosmoMemberVO;
import a.b.c.com.kosmo.board.vo.KosmoBoardVO;

@Service
@Transactional
public class SpringChabunServiceImpl implements SpringChabunService {

	Logger logger = LogManager.getLogger(SpringChabunServiceImpl.class);
	
	@Autowired(required=false)
	private SpringChabunDAO springChabunDAO;
	
	@Override
	public KosmoProductVO getProductChabun() {
		// TODO Auto-generated method stub
		logger.info("SpringChabunServiceImpl getProductChabun >>> : ");
		return springChabunDAO.getProductChabun();
	}

	@Override
	public KosmoCartVO getCartChabun() {
		// TODO Auto-generated method stub
		logger.info("SpringChabunServiceImpl getCartChabun >>> : ");
		return springChabunDAO.getCartChabun();
	}
	
	@Override
	public KosmoMemberVO getMemberChabun() {
		// TODO Auto-generated method stub
		logger.info("SpringChabunServiceImpl getMemberChabun >>> : ");
		return springChabunDAO.getMemberChabun();
	}

	@Override
	public KosmoBoardVO getBoardChabun() {
		// TODO Auto-generated method stub
		logger.info("SpringChabunServiceImpl getBoardChabun >>> : ");
		return springChabunDAO.getBoardChabun();
	}
}

6교시 (15:30-16:20)

게시판 구현하기

  • KosmoBoardDAO.java
package a.b.c.com.kosmo.board.dao;

import java.util.List;

import a.b.c.com.kosmo.board.vo.KosmoBoardVO;

public interface KosmoBoardDAO {
	
	public int kosmoBoardInsert(KosmoBoardVO kbvo);
	public List<KosmoBoardVO> kosmoBoardSelectAll(KosmoBoardVO kbvo);
	public List<KosmoBoardVO> kosmoBoardSelect(KosmoBoardVO kbvo);
	public List<KosmoBoardVO> kosmoBoardPwCheck(KosmoBoardVO kbvo);
}
  • KosmoBoardDAOImpl.java
package a.b.c.com.kosmo.board.dao;

import java.util.List;

import org.apache.ibatis.session.SqlSession;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import a.b.c.com.kosmo.board.vo.KosmoBoardVO;

@Repository
public class KosmoBoardDAOImpl implements KosmoBoardDAO {
	
	Logger logger = LogManager.getLogger(KosmoBoardDAOImpl.class);
	
	@Autowired(required=false)
	private SqlSession sqlSession;
	
	@Override
	public int kosmoBoardInsert(KosmoBoardVO kbvo) {
		// TODO Auto-generated method stub
		logger.info("KosmoBoardDAOImpl kosmoBoardInsert 함수 진입 >>> : ");
		return (Integer)sqlSession.insert("kosmoBoardInsert", kbvo);
	}

	@Override
	public List<KosmoBoardVO> kosmoBoardSelectAll(KosmoBoardVO kbvo) {
		// TODO Auto-generated method stub
		logger.info("KosmoBoardDAOImpl kosmoBoardSelectAll 함수 진입 >>> : ");
		return sqlSession.selectList("kosmoBoardSelectAll", kbvo);
	}

	@Override
	public List<KosmoBoardVO> kosmoBoardSelect(KosmoBoardVO kbvo) {
		// TODO Auto-generated method stub
		logger.info("KosmoBoardDAOImpl kosmoBoardSelect 함수 진입 >>> : ");
		return sqlSession.selectList("kosmoBoardSelect", kbvo);
	}

	@Override
	public List<KosmoBoardVO> kosmoBoardPwCheck(KosmoBoardVO kbvo) {
		// TODO Auto-generated method stub
		logger.info("KosmoBoardDAOImpl kosmoBoardPwCheck 함수 진입 >>> : ");
		return sqlSession.selectList("kosmoBoardPwCheck", kbvo);
	}
}
  • KosmoBoardService.java
package a.b.c.com.kosmo.board.service;

import java.util.List;

import a.b.c.com.kosmo.board.vo.KosmoBoardVO;

public interface KosmoBoardService {

	public int kosmoBoardInsert(KosmoBoardVO kbvo);
	public List<KosmoBoardVO> kosmoBoardSelectAll(KosmoBoardVO kbvo);
	public List<KosmoBoardVO> kosmoBoardSelect(KosmoBoardVO kbvo);
	public List<KosmoBoardVO> kosmoBoardPwCheck(KosmoBoardVO kbvo);
}
  • KosmoBoardServiceImpl.java
package a.b.c.com.kosmo.board.service;

import java.util.List;

import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import a.b.c.com.kosmo.board.dao.KosmoBoardDAO;
import a.b.c.com.kosmo.board.vo.KosmoBoardVO;

@Service
@Transactional
public class KosmoBoardServiceImpl implements KosmoBoardService {

	Logger logger = LogManager.getLogger(KosmoBoardServiceImpl.class);
	
	// 서비스에서  DAO 연결하기
	@Autowired(required=false)
	private KosmoBoardDAO kosmoBoardDAO;
	
	@Override
	public int kosmoBoardInsert(KosmoBoardVO kbvo) {
		// TODO Auto-generated method stub
		logger.info("KosmoBoardServiceImpl kosmoBoardInsert 함수 진입 >>> : ");
		return kosmoBoardDAO.kosmoBoardInsert(kbvo);
	}

	@Override
	public List<KosmoBoardVO> kosmoBoardSelectAll(KosmoBoardVO kbvo) {
		// TODO Auto-generated method stub
		logger.info("KosmoBoardServiceImpl kosmoBoardSelectAll 함수 진입 >>> : ");
		return kosmoBoardDAO.kosmoBoardSelectAll(kbvo);
	}

	@Override
	public List<KosmoBoardVO> kosmoBoardSelect(KosmoBoardVO kbvo) {
		// TODO Auto-generated method stub
		logger.info("KosmoBoardServiceImpl kosmoBoardSelect 함수 진입 >>> : ");
		return kosmoBoardDAO.kosmoBoardSelect(kbvo);
	}

	@Override
	public List<KosmoBoardVO> kosmoBoardPwCheck(KosmoBoardVO kbvo) {
		// TODO Auto-generated method stub
		logger.info("KosmoBoardServiceImpl kosmoBoardPwCheck 함수 진입 >>> : ");
		return kosmoBoardDAO.kosmoBoardPwCheck(kbvo);
	}

}
  • KosmoBoardController.java
package a.b.c.com.kosmo.board.controller;

import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
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.ResponseBody;

import a.b.c.com.kosmo.board.service.KosmoBoardService;
import a.b.c.com.kosmo.board.vo.KosmoBoardVO;
import a.b.c.com.kosmo.common.ChabunUtil;
import a.b.c.com.kosmo.common.CommonUtils;
import a.b.c.com.kosmo.common.FileUploadUtil;
import a.b.c.com.kosmo.common.service.SpringChabunService;
import a.b.c.com.kosmo.mem.vo.KosmoMemberVO;

@Controller
public class KosmoBoardController {

	Logger logger = LogManager.getLogger(KosmoBoardController.class);
	
	// 필드 오토와이어드
	@Autowired(required=false)
	private SpringChabunService springChabunService;
	
	@Autowired(required=false)
	private KosmoBoardService kosmoBoardService;
	
	// 게시판 글쓰기 폼
	@RequestMapping(value="kosmoBoardInsertForm", method=RequestMethod.GET)
	public String kosmoBoardInsertForm() {
		logger.info("KosmoBoardController kosmoBoardInsertForm 함수 진입 >>> : ");
		return "board/kosmoBoardInsertForm";
	}
	
	// 게시판 글쓰기
	@RequestMapping(value="kosmoBoardInsert", method=RequestMethod.POST)
	public String kosmoBoardInsert(HttpServletRequest req) {
		
		logger.info("KosmoBoardController kosmoBoardInsert 함수 진입 >>> : ");
		
		// 채번 구하기
		String kbnum = ChabunUtil.getBoardChabun("N", springChabunService.getBoardChabun().getKbnum());
		logger.info("KosmoBoardController kosmoBoardInsert kbnum >>> : " + kbnum);
		
		// 이미지 업로드
		FileUploadUtil fu = new FileUploadUtil(  CommonUtils.BOARD_IMG_UPLOAD_PATH
												,CommonUtils.BOARD_IMG_FILE_SIZE
												,CommonUtils.BOARD_EN_CODE);
		
		// 이미지 파일 원본 사이즈
		boolean bool = fu.imgfileUpload(req);
		logger.info("KosmoBoardController kosmoBoardInsert bool >>> : " + bool);
		
		KosmoBoardVO _kbvo = null;
		_kbvo = new KosmoBoardVO();
		
		_kbvo.setKbnum(kbnum);
		_kbvo.setKbsubject(fu.getParameter("kbsubject"));
		_kbvo.setKbname(fu.getParameter("kbname"));
		_kbvo.setKbpw(fu.getParameter("kbpw"));
		_kbvo.setKbcontent(fu.getParameter("kbcontent"));
		_kbvo.setKbfile(fu.getFileName("kbfile"));
		
		// 서비스 호출
		int nCnt = kosmoBoardService.kosmoBoardInsert(_kbvo);
		if (nCnt > 0) {
			logger.info("KosmoBoardController kosmoBoardInsert nCnt >>> : " + nCnt);
			return "board/kosmoBoardInsert";
		}
		return "board/kosmoBoardInsertForm";
	}
	
	// 게시판 전체 조회
	@RequestMapping(value="kosmoBoardSelectAll", method=RequestMethod.GET)
	public String kosmoBoardSelectAll(KosmoBoardVO kbvo, Model model) {
		
		logger.info("KosmoBoardController kosmoBoardSelectAll 함수 진입 >>> : ");
		
		// 서비스 호출
		List<KosmoBoardVO> listAll = kosmoBoardService.kosmoBoardSelectAll(kbvo);
		if (listAll.size() > 0) {
			logger.info("KosmoBoardController kosmoBoardSelectAll listAll.size() >>> : " + listAll.size());
			
			model.addAttribute("listAll", listAll);
			return "board/kosmoBoardSelectAll";
		}
		return "board/kosmoBoardSelectAll";
	}
	
	// 게시글 조회
	@RequestMapping(value="kosmoBoardSelect", method=RequestMethod.GET)
	public String kosmoBoardSelect(KosmoBoardVO kbvo, Model model) {
		
		logger.info("KosmoBoardController kosmoBoardSelect 함수 진입 >>> : ");
		logger.info("KosmoBoardController kosmoBoardSelect 함수 진입 kbvo.getKbnum() >>> : " + kbvo.getKbnum());
		
		// 서비스 호출
		List<KosmoBoardVO> listS = kosmoBoardService.kosmoBoardSelect(kbvo);
		if (listS.size()  == 1) {
			logger.info("KosmoBoardController kosmoBoardSelect listS.size() >>> : " + listS.size());
			
			model.addAttribute("listS", listS);
			return "board/kosmoBoardSelect";
		}
		return "board/kosmoBoardSelect";
	}
	
	// 패스워드 체크하기
	@RequestMapping(value="kosmoBoardPwCheck", method=RequestMethod.POST)
	@ResponseBody
	public Object kosmoBoardPwCheck(KosmoBoardVO kbvo) {
		logger.info("KosmoBoardController kosmoBoardPwCheck 함수 진입 >>> :");
		logger.info("KosmoBoardController kosmoBoardPwCheck kbvo.getKbpw() >>> : " + kbvo.getKbpw());
		
		List<KosmoBoardVO> list = kosmoBoardService.kosmoBoardPwCheck(kbvo);
		logger.info("KosmoBoardController kosmoBoardPwCheck list.size() >>> : " + list.size());
		
		String msg = "";
		if (list.size() == 1) {msg = "ID_YES";}
		else {msg = "ID_NO";}
		
		return msg;
	}
}

7교시 (16:30-17:20)

게시판 구현하기

  • kosmoBoardInsert.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h3>kosmoBoardInsert.jsp</h3>
	<hr>
	<script>
		location.href="/kosmoSpring/kosmoBoardSelectAll.k";
	</script>
</body>
</html>
  • kosmoBoardInsertForm.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>BOARD : 게시판 : 글쓰기</title>
	<script src="http://code.jquery.com/jquery-latest.min.js"></script>
	<script type="text/javascript">
	
		$(document).ready(function(){
			
			$(document).on("click", "#kbBtn", function(){
				console.log("kbBtn >>> : ");
				
				$("#boardForm").attr({
					"action":"kosmoBoardInsert.k",
					"method":"POST",
					"enctype":"multipart/form-data"
				}).submit();
			});
		});
		
	</script>
	<style type="text/css">
	
		.tt {
			text-align: center;
		}
	</style>
</head>
<body>
	<h3>kosmoBoardInsertForm.jsp</h3>
	<hr>
	<form name="boardForm" id="boardForm">
		<table border="1" align="center">
			<tr>
				<td colspan="2" align="center">게시판 글쓰기</td>
			</tr>
			<tr>
				<td class="tt">글번호</td>
				<td><input type="text" name="kbnum" id="kbnum" size="20" readonly></td>
			</tr>
			<tr>
				<td class="tt">제목</td>
				<td><input type="text" name="kbsubject" id="kbsubject" size="53"></td>
			</tr>
			<tr>
				<td class="tt">이름</td>
				<td><input type="text" name="kbname" id="kbname" size="53"></td>
			</tr>
			<tr>
				<td class="tt">비밀번호</td>
				<td><input type="password" name="kbpw" id="kbpw" size="20"></td>
			</tr>
			<tr>
				<td class="tt">내용</td>
				<td><textarea name="kbcontent" id="kbcontent" cols="50" rows="10"></textarea>
			</tr>
			<tr>
				<td class="tt">사진</td>
				<td><input type="file" name="kbfile" id="kbfile"></td>
			</tr>
			<tr>
				<td colspan="2" align="right">
					<input type="button" value="글쓰기" id="kbBtn">
				</td>
			</tr>
		</table>
	</form>
</body>
</html>
  • kosmoBoardSelectAll.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<%@ page import="a.b.c.com.kosmo.board.vo.KosmoBoardVO" %> 
<%@ page import="a.b.c.com.kosmo.common.CodeUtil" %> 
<%@ page import="java.util.List" %> 

<%@ page import=" org.apache.log4j.LogManager" %>
<%@ page import="org.apache.log4j.Logger" %>

<% request.setCharacterEncoding("UTF-8");%> 
<%	
	Logger logger = LogManager.getLogger(this.getClass());
	logger.info("kosmoBoardSelectAll.jsp 페이지 >>> : ");

	Object obj = request.getAttribute("listAll");
	List<KosmoBoardVO> list = (List<KosmoBoardVO>)obj;
	
	int nCnt = list.size();
	String nCntS = ":::: 전체 조회 건수  " + nCnt + " 건";	
%>     

<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>Insert title here</title>
	<script type="text/javascript" src="/kosmoSpring/js/common.js"></script>
	<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
	<script type="text/javascript">
	
		$(document).ready(function(){
			
			// kbnum 체크박스 체크 확인하기
			$(document).on("click", "#kbnum", function(){				
				if($(this).prop('checked')){			 			
					$('.kbnum').prop('checked',false);
					$(this).prop('checked',true);
				}
			});
			
			//  I
			$(document).on("click", "#insertBtn", function(){
				location.href="kosmoBoardInsertForm.k";
			});
			
			// SALL
			$(document).on("click", "#selectAllBtn", function(){		
				$("#boardList").attr({"method":"GET", "action":"kosmoBoardSelectAll.k"}).submit();		
			});
					
			//  S
			$(document).on("click", "#selectBtn", function(){	
				if ($('.kbnum:checked').length == 0){
					alert("글번호 하나를 선택하세요!!");
					return;
				}
				$("#boardList").attr({ "method":"GET","action":"kosmoBoardSelect.k"}).submit();
			});		
			
			//  D
			$(document).on("click", "#deletetBtn", function(){	
				if ($('.kbnum:checked').length == 0){
					alert("삭제할 글번호 하나를 선택하세요!!");
					return;
				}
				$("#boardList").attr({ "method":"GET","action":"kosmoBoardDelete.k"}).submit();
			});		
		});	
	
	</script>
	<style type="text/css">
	
		td, th {
			 padding: 5px;
		}
	
		h3, th {
			text-align: center;
		}
		.tt {
			text-align: center;
		}
	
	</style>
</head>
<body>
	<h3>게시판 글 목록</h3>
	<hr>
	<form name="boardList" id="boardList">
		<table border="1" align="center">
			<thead>
				<tr>
					<td colspan="9" ><%= nCntS %></td>
				</tr>
				<tr>
					<th><input type="checkbox" name="chkAll" id="chkAll"></th>
					<th>순번</th>
					<th>글번호</th>
					<th>글제목</th>
					<th>이름</th>
					<th>글내용</th>
					<th>사진</th>
				</tr>
			</thead>
			<%
			
			for(int i=0; i<nCnt; i++){		
				KosmoBoardVO _kbvo = list.get(i);	
			%>
			<tbody>
			<tr>
				<td class="tt">
					<input type="checkbox" id="kbnum" name="kbnum" class="kbnum" value=<%= _kbvo.getKbnum() %> >
				</td>		
				<td class="tt"><%= i + 1 %></td>
				<td class="tt"><%= _kbvo.getKbnum() %> </td>
				<td class="tt"><%= _kbvo.getKbsubject() %> </td>
				<td class="tt"><%= _kbvo.getKbname() %> </td>
				<td class="tt"><%= _kbvo.getKbcontent() %> </td>
				<td class="tt"><img src="/kosmoSpring/fileupload/board/<%= _kbvo.getKbfile() %> " border="1" width="25" height="25" alt="image"></td>				
			</tr>	
			<%
			}//end of for
			%>	
			<tr>
				<td colspan="9" align="right">				
					<input type="button" value="글쓰기" id="insertBtn">
					<input type="button" value="글목록" id="selectAllBtn">
					<input type="button" value="글내용보기" id="selectBtn">		
					<input type="button" value="글삭제" id="deletetBtn"> 								
				</td>
			</tr>	
			</tbody>	
		</table>
	</form>	
</body>
</html>
  • kosmoBoardSelect.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 import="a.b.c.com.kosmo.board.vo.KosmoBoardVO" %> 
<%@ page import="a.b.c.com.kosmo.common.CodeUtil" %> 
<%@ page import="java.util.List" %> 

<% request.setCharacterEncoding("UTF-8");%> 
<%	
	Object obj = request.getAttribute("listS");
	if (obj == null) return;

	List<KosmoBoardVO> list = (List<KosmoBoardVO>)obj;	
	int nCnt = list.size();
	
	KosmoBoardVO _kbvo = null;
	if (nCnt == 1){
		_kbvo = list.get(0);
	}	
%> 
    
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>Insert title here</title>
	<script  src="http://code.jquery.com/jquery-latest.min.js"></script>
	<script type="text/javascript">
	
		$(document).ready(function(){	
			
			//  pwBtn : 비밀번호 확인 
			$(document).on("click", "#pwBtn", function(){
				let input_kbpw = prompt('비밀번호를 입력하세요', 'aaa');			
				
				if (input_kbpw.length > 0){
					console.log(input_kbpw);
					
					let pwcheckURL = "kosmoBoardPwCheck.k";
					let reqType = "POST";
					let dataParam = {
						kbnum: $("#kbnum").val(),
						kbpw: input_kbpw,
					};
					//dataParam = $("#boardUpdateForm").serialize();
					console.log("dataParam >>> : " + dataParam);
					
					$.ajax({
						url: pwcheckURL,
						type: reqType,								
						data: dataParam,	            
						success: whenSuccess,
						error: whenError
					});
					
					function whenSuccess(resData){	
						console.log("resData >>> : " + resData);					
						if ("ID_YES" == resData){					
							alert("비밀번호 GOOD.");												
							$("#updateBtn").css('background-color','yellow');	
							if($("#updateBtn").prop("disabled")==true){
								  $("#updateBtn").attr("disabled", false);
							}
						}else if ("ID_NO" == resDataFlag){
							alert("비밀번호 BAD.");
							return;
						};				
					}
					function whenError(e){
						console.log("e >>> : " + e.responseText);
					}
				}						
			});
		
			
			//  insertBtn
			$(document).on("click", "#insertBtn", function(){
				location.href="kosmoBoardInsertForm.k";
			});
			
			// selectBtn
			$(document).on("click", "#selectAllBtn", function(){		
				$("#boardUpdateForm").attr({"method":"GET", "action":"kosmoBoardSelectAll.k"}).submit();		
			});
			
			//  updateBtn
			$(document).on("click", "#updateBtn", function(){
				alert("updateBtn");
				$("#boardUpdateForm").attr({ "method":"GET", "action":"#kosmoBoardUpdate.k"}).submit();
			});
			
		});		
			
	</script>
	<style type="text/css">
		
		div {		 
			margin: 0 auto; 		
			border:1px solid #6d82f3;
			display:table;
		}			
	
		td, th {
			 padding: 5px;
		}
	
		h3 {
			text-align: center;
		}
	
		.mem {
			text-align: center;
		}
			
	</style>
</head>
<body>
	<h3>게시글 내용</h3>
	<hr>
		<div>
			<form name="boardUpdateForm" id="boardUpdateForm">
				<table border=1>
					<tr>
						<td align="center">
							<font size="4" style="color:black;"><%= _kbvo.getKbsubject() %></font>
							<input type="hidden" name="kmnum" id="kmnum" value="<%= "M202206070001" %>" />
							<input type="hidden" name="kbnum" id="kbnum" value="<%= _kbvo.getKbnum() %>" />
						</td>
					</tr>
					<tr>
						<td align="left">
							<font size="1" style="color:gray;">
							최초작성일 : <%= _kbvo.getInsertdate() %> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
							최종수정일 : <%= _kbvo.getUpdatedate() %>
							</font>
						</td>
					</tr>
					<tr>
						<td align="center"> 
							<img src="/kosmoSpring/fileupload/board/<%= _kbvo.getKbfile() %>" border="1" width="380" height="100" alt="image">
						</td>
					</tr>
					<tr>
						<td align="center">
							<textarea name="kbcontent" id="kbcontent" rows="5" cols="50"><%= _kbvo.getKbcontent() %></textarea>
						</td>
					</tr>
					<tr>
						<td align="left">
							<font size="1" style="color:gray;">
							작성자 : <%=  _kbvo.getKbname() %>
							</font>
						</td>
					</tr>
					<!-- 
					<tr>
					<td>패스워드
					<input type="text" name="kbpw" id="kbpw"  />
					<button type="button" id="pwBtn">비밀번호</button>
					</td>	 	 
					 -->
					<tr>
						<td colspan="2" align="left"> 
							<button type="button" id="insertBtn">글쓰기</button>
							<button type="button" id="selectAllBtn">글목록</button>
							&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
							&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;		
							<button type="button" id="updateBtn" disabled >수정</button>
							<button type="button" id="pwBtn">비밀번호확인</button>
						</td>				
					</tr>
				</table>
			</form>
		</div>
	<p>
	<!-- 댓글 처리 하는 루틴  --> 
	<jsp:include page="/kosmoRboardForm.k">
		<jsp:param value="<%=_kbvo.getKbnum()%>" name="kbnum"/>
	</jsp:include>	
</body>
</html>

8교시 (17:30-18:30)

게시판 구현하기

  • index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h3>index.jsp</h3>
	<hr>
	<a href="kosmoProductInsertForm.k">코스모 상품 입력</a><br>
	<a href="kosmoProductSelectAll.k">코스모 상품  전체조회</a><br>
	<p>
	<a href="kosmoMemberInsertForm.k">코스모 회원 입력</a><br>
	<a href="kosmoMemberSelectAll.k">코스모 회원 전체조회</a><br>
	<p>
	<a href="kosmoLoginForm.k">코스모 로그인</a><br>
	<p>
	<a href="kosmoMainPage.k">코스모 메인</a><br>
	<p>
	<a href="kosmoBoardInsertForm.k">코스모 게시판 글쓰기</a><br>
	<a href="kosmoBoardSelectAll.k">코스모 게시판 전체조회</a><br>
</body>
</html>


Notes


728x90