Data Scientist 옌

매일 발전하는 IT문제해결사

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

22-05-02(월) 066일차 [Oracle, Java, HTML, JavaScript, JSP, Servlet, Ajax] MODEL2+WEB_MVC 패턴으로 게시판 만들기(Ajax를 이용하여 비밀번호 확인), Ajax 추가

옌炎 2022. 6. 17. 10:19
728x90

수업내용


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

  • 서브쿼리
SELECT HIREDATE FROM EMP;

-- 입사 일이 빠른 순서로 5건을 구하시오
-- 데이터는 꼭 눈으로 확인해야 한다. 건수가 적으면 아이체킹 한다.
-- 건수가 많으면 대표적인 데이터타입을 구별해서 확인해야 한다.

-- 1. 입사일 전 건 확인하기
SELECT HIREDATE FROM EMP;

SELECT HIREDATE FROM EMP ORDER BY HIREDATE ASC;

SELECT HIREDATE FROM EMP WHERE ROWNUM <= 5;

-- FROM 절에서 자식 쿼리 인라인 뷰 서브쿼리로
-- 입사일 빠른 순으로 SORT를 먼저 한다.
-- 이후 부모 쿼리에서 5건을 구한다.
SELECT A.HIREDATE
FROM
    -- 인라인 뷰 서브쿼리
    (SELECT HIREDATE FROM EMP ORDER BY HIREDATE ASC) A
WHERE ROWNUM <= 5;

/*
SELECT
    SELECT * FROM DUAL;
FROM
    SELECT * FROM DUAL;
WHERE
    SELECT * FROM DUAL;
*/

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

  • ERwin 설치 후 ERD 그리기

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

  • 지난 시간 복습
    Ajax
    **********************************************************************************
    Ajax는 클라이언트(클라이언트 컴퓨터)가 비동기 방식으로[동기방식으로도] 자바스크립트를 이용하여
    화면 전환없이 서버에서  자료(xml, json, html, plian text etc...)를
    요청할 때 사용하는 방법
    **********************************************************************************

    교차 출처 리소스 공유(Cross-origin resource sharing, CORS)
    -------------------------------------------------------
    자바스크립트는 다른 도메인의 데이터를 기본적으로 가져올수 없다
    -------------------------------------------------------
    교차 출처 자원 공유는 웹 페이지 상의 제한된 리소스를 최초 자원이 서비스된 도메인 밖의 다른 도메인으로부터
    요청할 수 있게 허용하는 구조이다.
    웹페이지는 교차 출처 이미지, 스타일시트, 스크립트, iframe, 동영상을 자유로이 임베드할 수 있다.
    특정한 도메인 간(cross-domain) 요청, 특히 Ajax 요청은 동일-출처 보안 정책에 의해 기본적으로 금지된다.

    모두 데이터가 넘어간다.
    form.attr({}).submit(); -- 비동기방식으로 화면을 리프레쉬 시켜줘야 한다
    Ajax({}); -- 동기 방식으로 화면 리프레쉬가 없어도 된다
  • 조회 페이지에서 수정하기 위해 비밀번호 체크 하기
    Ajax 사용하기
        
        boardSelect.jsp
        
        Ajax
        ———
        
        bnum
        bpw 암호화 한다.
        isudType = PWCHK
        
        /kosServlet/board?
        
        버튼 클릭
        
        BoardController.java
        ——————————
        
        isudType = PWCHK true
        bnum
        bpw <-- 암호화 한다.
        
        PW_GOOD 을 Ajax 에 리턴하기
        
        service
        ——————————
        
        dao
        ——————————
        
        1건 -> true
        
        query
        ——————————
        
        SELECT COUNT(A.BNUM) NCNT
        FROM   MVC_BOARD A
        WHERE  DELETEYN = 'Y'
        AND    BNUM = 'B0008'
        AND    BPW = 'a953f09a1b6b6725b81956e9ad0b1eb49e3ad40004c04307ef8af6246a054116';

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

Ajax로 비밀번호 체크하기

  • BoardSqlMap.java
package a.b.c.com.kosmo.board.sql;

public abstract class BoardSqlMap {
	
	// 전체 조회
	public static String getBoardSelectAll() { 
		
		StringBuffer sb = new StringBuffer();
		
		sb.append(" SELECT 										\n");
		sb.append(" 		 A.BNUM          BNUM 				\n");
		sb.append(" 		,A.BSUBJECT      BSUBJECT 			\n");
		sb.append(" 		,A.BWRITER       BWRITER 			\n");
		sb.append(" 		,A.BPW           BPW 				\n");
		sb.append(" 		,A.BMEMO         BEMMO 				\n");
		sb.append(" 		,A.DELETEYN      DELETEYN 			\n");
		sb.append(" 		,TO_CHAR(A.INSERTDATE, 'YYYY-MM-DD')    INSERTDATE \n");
		sb.append(" 		,TO_CHAR(A.UPDATEDATE, 'YYYY-MM-DD')    UPDATEDATE \n");
		sb.append(" FROM 	MVC_BOARD A 						\n");
		sb.append(" WHERE 	A.DELETEYN = 'Y' 					\n");
		sb.append(" ORDER 	BY 1 DESC 							\n");
				
		return sb.toString();
	}
	
	// 조건 조회
	public static String getBoardSelect() { 
		
		StringBuffer sb = new StringBuffer();
		
		sb.append(" SELECT 										\n");
		sb.append(" 		 A.BNUM          BNUM 				\n");
		sb.append(" 		,A.BSUBJECT      BSUBJECT 			\n");
		sb.append(" 		,A.BWRITER       BWRITER 			\n");
		sb.append(" 		,A.BPW           BPW 				\n");
		sb.append(" 		,A.BMEMO         BEMMO 				\n");
		sb.append(" 		,A.DELETEYN      DELETEYN 			\n");
		sb.append(" 		,TO_CHAR(A.INSERTDATE, 'YYYY-MM-DD')    INSERTDATE \n");
		sb.append(" 		,TO_CHAR(A.UPDATEDATE, 'YYYY-MM-DD')    UPDATEDATE \n");
		sb.append(" FROM 	MVC_BOARD A 						\n");
		sb.append(" WHERE 	A.DELETEYN = 'Y' 					\n");
		sb.append(" ORDER 	A.BNUM = ? 							\n"); // placeholder 1
				
		return sb.toString();
		}
	
	// 입력하기
	public static String getBoardInsert() {
		
		StringBuffer sb = new StringBuffer();
		/*
		INSERT INTO MVC_BOARD (BNUM, BSUBJECT, BWRITER, BPW, BMEMO, DELETEYN, INSERTDATE, UPDATEDATE)
		VALUES (?, ?, ?, ?, ?, 'Y', SYSDATE, SYSDATE
		*/
		
		sb.append(" INSERT INTO 						\n");
		sb.append(" 	 MVC_BOARD 						\n");
		sb.append(" 				(   				\n");
		sb.append(" 				 	 BNUM  			\n"); // COLUMN 1
		sb.append(" 					,BSUBJECT  		\n"); // COLUMN 2
		sb.append(" 					,BWRITER  		\n"); // COLUMN 3
		sb.append(" 					,BPW  			\n"); // COLUMN 4
		sb.append(" 					,BMEMO  		\n"); // COLUMN 5
		sb.append(" 					,DELETEYN  		\n"); // COLUMN 6
		sb.append(" 					,INSERTDATE  	\n"); // COLUMN 7
		sb.append(" 					,UPDATEDATE  	\n"); // COLUMN 8
		sb.append(" 				)   				\n");
		sb.append(" 	  	VALUES   					\n");
		sb.append(" 				(   				\n"); 
		sb.append(" 				 	 ?  			\n"); // placeholder 2
		sb.append(" 					,?  			\n"); // placeholder 2
		sb.append(" 					,?  			\n"); // placeholder 3
		sb.append(" 					,?  			\n"); // placeholder 4
		sb.append(" 					,?  			\n"); // placeholder 5
		sb.append(" 					,'Y'  			\n"); // 'Y'	     6
		sb.append(" 					,SYSDATE  		\n"); // SYSDATE     7
		sb.append(" 					,SYSDATE  		\n"); // SYSDATE     8
		sb.append(" 				)   				\n");
		
		return sb.toString();
	}
	
	public static String getBoardUpdate() {
		
		StringBuffer sb = new StringBuffer();
		
		sb.append("UPDATE    MVC_BOARD 					\n");
		sb.append("SET       BSUBJECT 	= ?  			\n"); // placeholder 1
		sb.append("			,BMEMO 		= ?      		\n"); // placeholder 2
		sb.append("         ,UPDATEDATE = SYSDATE 		\n");
		sb.append("WHERE     DELETEYN 	= 'Y' 			\n");
		sb.append("AND       BNUM 		= ? 			\n"); // placeholder 3

		return sb.toString();
	}
	
	public static String getBoardDelete() {
		
		StringBuffer sb = new StringBuffer();
		
		sb.append("UPDATE    MVC_BOARD 					\n");
		sb.append("SET       DELETEYN 	= 'N'  			\n"); 	
		sb.append("         ,UPDATEDATE = SYSDATE 		\n");
		sb.append("WHERE     DELETEYN 	= 'Y' 			\n");
		sb.append("AND       BNUM 		= ? 			\n"); // placeholder 1

		return sb.toString();	
	}
	
	public static String getPWCheck() {
		
		StringBuffer sb = new StringBuffer();
		
		sb.append("SELECT COUNT(NVL(A.BNUM,0)) NCNT		\n");
		sb.append("FROM MVC_BOARD A						\n");
		sb.append("WHERE A.DELETEYN = 'Y'				\n");
		sb.append("AND A.BNUM = ?						\n");
		sb.append("AND A.BPW = ?						\n");
		
		return sb.toString();
	}
}
  • BoardDAO.java
package a.b.c.com.kosmo.board.dao;

import java.util.ArrayList;

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

public interface BoardDAO {
	
	public ArrayList<BoardVO> boardSelectAll();
	public ArrayList<BoardVO> boardSelect(BoardVO bvo);
	public boolean boardInsert(BoardVO bvo);
	public boolean boardUpdate(BoardVO bvo);
	public boolean boardDelete(BoardVO bvo);
	
	public boolean boardPWCheck(BoardVO bvo);
}
  • BoardDAOImpl.java
package a.b.c.com.kosmo.board.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;

import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;

import a.b.c.com.common.DBCP_Connectivity;
import a.b.c.com.common.KosConnectivity;
import a.b.c.com.kosmo.board.service.BoardServiceImpl;
import a.b.c.com.kosmo.board.sql.BoardSqlMap;
import a.b.c.com.kosmo.board.vo.BoardVO;

public class BoardDAOImpl implements BoardDAO {
	
	Logger logger = LogManager.getLogger(BoardDAOImpl.class);

	// 전체 조회
	@Override
	public ArrayList<BoardVO> boardSelectAll() {
		// TODO Auto-generated method stub
		logger.info("BoardDAOImpl:: boardSelectAll() 함수 진입 >>> : ");
		
		// 사용할 객체를 지역변수로 선언하고 디폴트 값으로 초기화한다.
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rsRs = null;
		ArrayList<BoardVO> aList = null;
		
		// JDBC를 이용해서 데이터 가져오기
		try {
			conn = KosConnectivity.getConnection();
			String sqls = BoardSqlMap.getBoardSelectAll();
			pstmt = conn.prepareStatement(sqls);
			logger.info("전체 조회 >>> : \n" + sqls);
			
			rsRs = pstmt.executeQuery();
			
			if (rsRs != null) {
				aList = new ArrayList<BoardVO>();
				
				while (rsRs.next()) {
					BoardVO _bvo = new BoardVO();
					_bvo.setBnum(rsRs.getString(1));
					_bvo.setBsubject(rsRs.getString(2));
					_bvo.setBwriter(rsRs.getString(3));
					_bvo.setBpw(rsRs.getString(4));
					_bvo.setBmemo(rsRs.getString(5));
					_bvo.setDeleteyn(rsRs.getString(6));
					_bvo.setInsertdate(rsRs.getString(7));
					_bvo.setUpdatedate(rsRs.getString(8));
					
					aList.add(_bvo);
				}
			}
			KosConnectivity.conClose(conn, pstmt, rsRs);
		} catch (Exception e) {
			logger.info("전체 조회시 디비 에러가 >>> : " + e);
		} finally {
			KosConnectivity.conClose(conn, pstmt, rsRs);
		}
		
		return aList;
	}

	// 조건 조회
	@Override
	public ArrayList<BoardVO> boardSelect(BoardVO bvo) {
		// TODO Auto-generated method stub
		
		logger.info("BoardDAOImpl:: boardSelect() 함수 진입 >>> : ");
		logger.info("BoardDAOImpl :: boardSelect() bvo.getBnum() >>> : " + bvo.getBnum());
		
		// 사용할 객체를 지역변수로 선언하고 디폻트 값으로 초기화 한다.
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rsRs = null;
		ArrayList<BoardVO> aList = null;
		
		// JDBC를 이용해서 데이터 가져오기
		try {
			conn = KosConnectivity.getConnection();
			
			String sqls = BoardSqlMap.getBoardSelect();
			pstmt = conn.prepareStatement(sqls);
			
			pstmt.clearParameters();
			pstmt.setNString(1,  bvo.getBnum());
			logger.info("조건 조회 >>> : \n" + sqls);
			
			rsRs = pstmt.executeQuery();
			
			if (rsRs != null) {
				aList = new ArrayList<BoardVO>();
				
				while (rsRs.next()) {
					BoardVO _bvo = new BoardVO();
					_bvo.setBnum(rsRs.getString(1));
					_bvo.setBsubject(rsRs.getString(2));
					_bvo.setBwriter(rsRs.getString(3));
					_bvo.setBpw(rsRs.getString(4));
					_bvo.setBmemo(rsRs.getString(5));
					_bvo.setDeleteyn(rsRs.getString(6));
					_bvo.setInsertdate(rsRs.getString(7));
					_bvo.setUpdatedate(rsRs.getString(8));
					
					aList.add(_bvo);
				}
			}
			KosConnectivity.conClose(conn, pstmt, rsRs);
		} catch (Exception e) {
			logger.info("조건 조회 시 디비 에러가 >>> : " + e);
		} finally {
			KosConnectivity.conClose(conn, pstmt, rsRs);
		}
		
		return aList;
	}

	// 입력하기 
	@Override
	public boolean boardInsert(BoardVO bvo) {
		// TODO Auto-generated method stub
		
		logger.info("BoardDAOImpl:: boardInsert() 함수 진입 >>> : ");
		logger.info("bvo >>> : " + bvo);
		
		// 사용할 객체를 지역변수로 선언하고 초기화 하기 
		Connection conn = null;
		PreparedStatement pstmt = null;
		int nCnt = 0;
		boolean bool = false;
		
		// JDBC 객체 이용해서 테이블에 인서트 하기 
		try {
			conn = KosConnectivity.getConnection();
			String sqls = BoardSqlMap.getBoardInsert();
			pstmt = conn.prepareStatement(sqls);
			logger.info("인서트 >>> : \n" + sqls);
			
			// 플레이스 홀더에 입력할 데이터 바인딩하기 
			pstmt.clearParameters();
			pstmt.setString(1, bvo.getBnum());
			pstmt.setString(2, bvo.getBsubject());
			pstmt.setString(3, bvo.getBwriter());
			pstmt.setString(4, bvo.getBpw());
			pstmt.setString(5, bvo.getBmemo());
			
			nCnt = pstmt.executeUpdate();
			if (!conn.getAutoCommit()) conn.commit();
			logger.info("인서트 결과는 >>> : " + nCnt);
			
			if (nCnt > 0) bool = true;
			
			KosConnectivity.conClose(conn, pstmt);
		}catch(Exception e) {
			logger.info("인서트 디비 에러가 >>> : " + e);
		}finally {
			KosConnectivity.conClose(conn, pstmt);
		}

		return bool;
	}

	// 수정하기
	@Override
	public boolean boardUpdate(BoardVO bvo) {
		// TODO Auto-generated method stub
		
		logger.info("BoardDAOImpl :: boardUpdate() 함수 진입 >>> : ");
		logger.info("bvo >>> : " + bvo);
		
		// 사용할 객체를 지역변수로 선언하고 초기화하기
		Connection conn = null;
		PreparedStatement pstmt = null;
		int nCnt = 0;
		boolean bool = false;
		
		// JDBC 객체 이용해서 테이블에 인서트 하기
		try {
			conn = KosConnectivity.getConnection();
			String sqls = BoardSqlMap.getBoardUpdate();
			pstmt = conn.prepareStatement(sqls);
			logger.info("업데이트 >>> : \n" + sqls);
			
			// 플레이스 홀더에 입력할 데이터 바인딩 하기
			pstmt.clearParameters();
			pstmt.setString(1, bvo.getBsubject());
			pstmt.setString(2,  bvo.getBmemo());
			pstmt.setString(3, bvo.getBnum());
			
			nCnt = pstmt.executeUpdate();
			if (!conn.getAutoCommit()) conn.commit();
			logger.info("업데이트 결과는 >>> : " + nCnt);
			
			if (nCnt > 0) bool = true;
			
			KosConnectivity.conClose(conn, pstmt);
		} catch (Exception e) {
			logger.info("업데이트 디비 에러가 >>>: " + e);
		} finally {
			KosConnectivity.conClose(conn, pstmt);
		}
		
		return bool;
	}

	@Override
	public boolean boardDelete(BoardVO bvo) {
		// TODO Auto-generated method stub
		
		logger.info("BoardDAOImpl :: boardDelete() 함수 진입 >>> : ");
		logger.info("bvo >>> : " + bvo);
		
		// 사용할 객체를 지역변수로 선언하고 초기화하기
		Connection conn = null;
		PreparedStatement pstmt = null;
		int nCnt = 0;
		boolean bool = false;
		
		// JDBC 객체 이용해서 테이블에 인서트 하기
		try {
			conn = KosConnectivity.getConnection();
			String sqls = BoardSqlMap.getBoardDelete();
			pstmt = conn.prepareStatement(sqls);
			logger.info("딜리트 >>> : \n" + sqls);
			
			// 플레이스 홀더에 입력할 데이터 바인딩 하기
			pstmt.clearParameters();
			pstmt.setString(1, bvo.getBnum());
			
			nCnt = pstmt.executeUpdate();
			if (!conn.getAutoCommit()) conn.commit();
			logger.info("딜리트 결과는 >>> : " + nCnt);
			
			if (nCnt > 0) bool = true;
			
			KosConnectivity.conClose(conn, pstmt);
		} catch (Exception e) {
			logger.info("딜리트 디비 에러가 >>>: " + e);
		} finally {
			KosConnectivity.conClose(conn, pstmt);
		}
		
		return bool;
	}
	
	@Override
	public boolean boardPWCheck(BoardVO bvo) {
		// TODO Auto-generated method stub
		logger.info("BoardDAOImpl :: boardPWCheck 함수 진입 >>> : ");
		
		Connection conn = null;
		PreparedStatement pstmt = null;
		int nCnt = 0;
		ResultSet rsRs = null;
		boolean bool = false;
		
		try {
			
			String sql = BoardSqlMap.getPWCheck();
			conn = KosConnectivity.getConnection();
			pstmt = conn.prepareStatement(sql);
			logger.info("bnum >> " + bvo.getBnum());
			logger.info("bpw >> " + bvo.getBpw());
			
			logger.info("SQL SELECT PWCHECK >> \n" + sql);
			
			pstmt.clearParameters();
			pstmt.setString(1, bvo.getBnum());
			pstmt.setString(2, bvo.getBpw());
			
			rsRs = pstmt.executeQuery();
			
			if (rsRs != null) {
				while (rsRs.next()) {
					nCnt = rsRs.getInt("NCNT");
				}
			}
			logger.info("SQL SELCT nCnt >> " + nCnt);
			
			if (nCnt > 0) bool = true;
			
			KosConnectivity.conClose(conn, pstmt);
			
		} catch (Exception e) {
			logger.info("BoardDAOImpl :: boardPWCheck 에러 발생 >>> " + e.getMessage());
		} finally {
			KosConnectivity.conClose(conn, pstmt);
		}
		return bool;
	}
}

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

Ajax로 비밀번호 체크하기

  • BoardService.java
package a.b.c.com.kosmo.board.service;

import java.util.ArrayList;

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

public interface BoardService {
	
	public ArrayList<BoardVO> boardSelectAll();
	public ArrayList<BoardVO> boardSelect(BoardVO bvo);
	public boolean boardInsert(BoardVO bvo);
	public boolean boardUpdate(BoardVO bvo);
	public boolean boardDelete(BoardVO bvo);
	
	public boolean boardPWCheck(BoardVO bvo);
}
  • BoardServiceImpl.java
package a.b.c.com.kosmo.board.service;

import java.util.ArrayList;

import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;

import a.b.c.com.kosmo.board.dao.BoardDAO;
import a.b.c.com.kosmo.board.dao.BoardDAOImpl;
import a.b.c.com.kosmo.board.vo.BoardVO;

public class BoardServiceImpl implements BoardService {
	
	Logger logger = LogManager.getLogger(BoardServiceImpl.class);
	
	// 전체 조회
	@Override
	public ArrayList<BoardVO> boardSelectAll() {
		// TODO Auto-generated method stub
		logger.info("BoardServiceImpl :: boardSelectAll() 함수 진입 >>> : ");
		
		BoardDAO bdao = new BoardDAOImpl();
		ArrayList<BoardVO> aList = bdao.boardSelectAll();
		return aList;
		// return bdao.boardSelectAll();
	}
	
	// 조건 조회
	@Override
	public ArrayList<BoardVO> boardSelect(BoardVO bvo) {
		// TODO Auto-generated method stub
		logger.info("BoardServiceImpl :: boardSelect() 함수 진입 >>> : ");
		
		BoardDAO bdao = new BoardDAOImpl();
		ArrayList<BoardVO> aList = bdao.boardSelectAll();
		return aList;
		// return bdao.boardSelect(bvo);
	}

	// 입력하기
	@Override
	public boolean boardInsert(BoardVO bvo) {
		// TODO Auto-generated method stub
		logger.info("BoardServiceImpl :: boardInsert() 함수 진입 >>> : ");
		logger.info("bvo >>> : " + bvo);
		
		BoardDAO bdao = new BoardDAOImpl();
		boolean bool = bdao.boardInsert(bvo);
		
		return bool;
		//return bdao.boardInsert(bvo);
	}

	// 수정하기
	@Override
	public boolean boardUpdate(BoardVO bvo) {
		// TODO Auto-generated method stub
		logger.info("BoardServiceImpl :: boardUpdate() 함수 진입 >>> : ");
		logger.info("bvo >>> : " + bvo);
		
		BoardDAO bdao = new BoardDAOImpl();
		boolean bool = bdao.boardUpdate(bvo);
		
		logger.info("bool >>> : " + bool);
		return bool;
		// return bdao.boardUpdate(bvo);
	}

	// 삭제하기
	@Override
	public boolean boardDelete(BoardVO bvo) {
		// TODO Auto-generated method stub
		logger.info("BoardServiceImpl :: boardDelete() 함수 진입 >>> : ");
		logger.info("bvo >>> : " + bvo);
		
		BoardDAO bdao = new BoardDAOImpl();
		boolean bool = bdao.boardDelete(bvo);
		
		logger.info("bool >>> : " + bool);
		return bool;
		// return bdao.boardDelete(bvo);
	}
	
	// 패스워드 체크
	@Override
	public boolean boardPWCheck(BoardVO bvo) {
		// TODO Auto-generated method stub
		logger.info("BoardServiceImpl :: boardPWCheck() 함수 진입 >>> : ");
		
		BoardDAO bdao = new BoardDAOImpl();
		return bdao.boardPWCheck(bvo);
	}
}
  • BoardController.java
package a.b.c.com.kosmo.board.controller;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;

import a.b.c.com.common.ChabunUtil;
import a.b.c.com.common.EncryptSHA;
import a.b.c.com.kosmo.board.dao.BoardDAO;
import a.b.c.com.kosmo.board.dao.BoardDAOImpl;
import a.b.c.com.kosmo.board.service.BoardService;
import a.b.c.com.kosmo.board.service.BoardServiceImpl;
import a.b.c.com.kosmo.board.vo.BoardVO;

// http://localhost:8088/kosServlet/board
// /kosServlet/board
@WebServlet("/board")
public class BoardController extends HttpServlet {
	private static final long serialVersionUID = 1L;
	
	Logger logger = LogManager.getLogger(BoardController.class);

	protected void doGet(HttpServletRequest request, HttpServletResponse response) 
		throws ServletException, IOException {
		// TODO Auto-generated method stub
		
		logger.info("BoardController :: doGet() 함수 진입 >>> : ");
		
		request.setCharacterEncoding("UTF-8");
		response.setContentType("text/html; charset=UTF-8");
		PrintWriter out = response.getWriter();
		
		String isudType = request.getParameter("isudType");
		logger.info("BoardController :: doGet() 함수 진입 isudType >>> : " + isudType);
		
		if (isudType !=null && isudType.length() > 0) {
			isudType = isudType.toUpperCase();	

			if ("I".equals(isudType)) {
				
				String bnum = ChabunUtil.getBoardChabun("");
				String bsubject = request.getParameter("bsubject");
				String bwriter = request.getParameter("bwriter");
				String bpw = request.getParameter("bpw");				
				String bmemo = request.getParameter("bmemo");
			
				BoardVO bvo = null;
				bvo = new BoardVO();
				
				bvo.setBnum(bnum);
				bvo.setBsubject(bsubject);
				bvo.setBwriter(bwriter);
				// 패스워드 암호화 하기 
				bpw = EncryptSHA.encryptSHA256(bpw);
				bvo.setBpw(bpw);
				bvo.setBmemo(bmemo);

				logger.info("bvo.getBnum() >>> : " + bvo.getBnum());
				logger.info("bvo.getBsubject() >>> : " + bvo.getBsubject());
				logger.info("bvo.getBwriter() >>> : " + bvo.getBwriter());
				logger.info("bvo.getBpw() >>> : " + bvo.getBpw());
				logger.info("bvo.getBmemo() >>> : " + bvo.getBmemo());
								
				BoardService bs = new BoardServiceImpl();
				boolean bool = bs.boardInsert(bvo);
				
				if (bool) {
					
					logger.info("입력 성공 >>> :" + bool);
					
					// setAttribute(java.lang.String, java.lang.Object)
					request.setAttribute("bool", new Boolean(bool));
					
					RequestDispatcher rd = request.getRequestDispatcher("/kosmo/board/boardInsert.jsp");
					rd.forward(request, response);
				}else {
					
					logger.info("입력 실패 >>> :" + bool);
					
					out.println("<script>");
					out.println("location.href='/kosmo/board/board.html'");
					out.println("</script>");
				}
				
			}
			if ("SALL".equals(isudType)) {
				logger.info("BoardController :: doGet() 함수 진입 SALL isudType >>> : " + isudType);
				
				// 서비스 호출 
				BoardService bs = new BoardServiceImpl();
				ArrayList<BoardVO> aList = bs.boardSelectAll();
				
				if (aList !=null && aList.size() > 0) {
					
					logger.info("전체조회 성공 >>> : " + aList.size());
					request.setAttribute("aList_selectALL", aList);
					RequestDispatcher rd = request.getRequestDispatcher("/kosmo/board/boardSelectAll.jsp");
					rd.forward(request, response);
				}else {
					
					logger.info("전체조회 실패 >>> : ");
					
					out.println("<script>");
					out.println("location.href='/kosmo/board/board.html'");
					out.println("</script>");
				}
			}
			
			if ("U".equals(isudType)) {
				logger.info("BoardController :: doGet() 함수 진입 U isudType >>> : " + isudType);
								
				String bnum = request.getParameter("bnumChk");
				
				BoardVO bvo = null;
				bvo = new BoardVO();
				bvo.setBnum(bnum);
			
				// 서비스 호출 
				BoardService bs = new BoardServiceImpl();
				ArrayList<BoardVO> aList = bs.boardSelect(bvo);
				
				if (aList !=null && aList.size() > 0) {
					
					logger.info("조회 성공 >>> : " + aList.size());
					
					request.setAttribute("aList_select", aList);
					RequestDispatcher rd = request.getRequestDispatcher("/kosmo/board/boardSelect.jsp");
					rd.forward(request, response);
					
				}else {
					
					logger.info("조회 실패 >>> : ");
					
					out.println("<script>");
					out.println("location.href='/kosServlet/board?isudType=SALL'");
					out.println("</script>");
				}				
			}
			
			// 수정하기 
			if ("UOK".equals(isudType)) {
				logger.info("BoardController :: doGet() 함수 진입 UOK isudType >>> : " + isudType);
				
				String bnum = request.getParameter("bnum");
				String bsubject = request.getParameter("bsubject");
				String bmemo = request.getParameter("bmemo");
				
				BoardVO bvo = null;
				bvo = new BoardVO();				
				bvo.setBnum(bnum);
				bvo.setBsubject(bsubject);				
				bvo.setBmemo(bmemo);

				logger.info("bvo.getBnum() >>> : " + bvo.getBnum());
				logger.info("bvo.getBsubject() >>> : " + bvo.getBsubject());
				
				// 서비스 호출
				BoardService bs = new BoardServiceImpl();
				boolean bool = bs.boardUpdate(bvo);
				
				// 결과 포워드 하기 /kosmo/board/boardUpdate.jsp
				if (bool) {
					
					logger.info("수정 성공 >>> :" + bool);
					
					request.setAttribute("bool", new Boolean(bool));					
					RequestDispatcher rd = request.getRequestDispatcher("/kosmo/board/boardUpdate.jsp");
					rd.forward(request, response);
				
				} else {
					
					logger.info("수정 실패 >>> :" + bool);
					
					out.println("<script>");
					out.println("alert('글 수정 실패')");
					out.println("location.href='/kosServlet/board?isudType=SALL'");
					out.println("</script>");
				}
			}
			
			// 삭제하기
			if ("D".equals(isudType)) {
				logger.info("BoardController :: doGet() 함수 진입 D isudType >>> : " + isudType);
				
				// http://localhost:8088/kosServlet/board?bnumchk=1&isudType=D
				
				String bnum = request.getParameter("bnumChk");
				
				BoardVO bvo = null;
				bvo = new BoardVO();				
				bvo.setBnum(bnum);
				logger.info("bvo.getBnum() >>> : " + bvo.getBnum());
				
				// 서비스 호출
				BoardService bs = new BoardServiceImpl();
				boolean bool = bs.boardDelete(bvo);
				
				// 결과 포워드 하기 /kosmo/board/boardDelete.jsp
				if (bool) {
					
					logger.info("삭제 성공 >>> : " + bool);
					
					request.setAttribute("bool", new Boolean(bool));
					RequestDispatcher rd = request.getRequestDispatcher("/kosmo/board/boardDelete.jsp");
					rd.forward(request, response);
				
				} else {
					
					logger.info("삭제 실패 >>> : " + bool);
					
					out.println("<script>");
					out.println("alert('글 삭제 실패')");
					out.println("location.href='/kosServlet/board?isudType=SALL'");
					out.println("</script>");
				}
			}
			
			// 아이디 체크
			if ("IDCHK".equals(isudType)) {
				logger.info("BoardController :: doGet() 함수 진입 IDCHK isudType >>> : " + isudType);
			}
			
			// 비밀번호 체크
			if ("PWCHK".equals(isudType)) {
				logger.info("BoardController :: doGet() 함수 진입 PWCHK isudType >>> : " + isudType);
				
				String bnum = request.getParameter("bnum");
				String bpw = request.getParameter("bpw");
				bpw = EncryptSHA.encryptSHA256(bpw);
				
				logger.info("BoardController :: doGet() 함수 진입  bnum >>> : " + bnum);
				logger.info("BoardController :: doGet() 함수 진입  bpw >>> : " + bpw);
				
				BoardVO bvo = null;
				bvo = new BoardVO();
				bvo.setBnum(bnum);
				bvo.setBpw(bpw);
				
				BoardService bs = new BoardServiceImpl();
				boolean bool = bs.boardPWCheck(bvo);
				
				logger.info("BoardController :: PWCHK bool" + bool);
				
				if (bool) {
					logger.info("비밀번호가 일치합니다.");
					// ajax로 넘길때 모든 데이터가 다넘어간다					
					// out.println("11111111111");
					out.println("<?xml version='1.0' encoding='UTF-8'?>");
					out.println("<pwchk>"); 
					out.println("<result>PW_GOOD</result>");
					out.println("</pwchk>");
				} else {
					logger.info("비밀번호가 일치하지 않습니다");
					// ajax로 넘길때 모든 데이터가 다넘어간다
					// out.println("222222222222222");
					out.println("<?xml version='1.0' encoding='UTF-8'?>");
					out.println("<pwchk>"); 
					out.println("<result>PW_NOT_GOOD</result>");
					out.println("</pwchk>");
				}
			}
			
		} else {
			logger.info("BoardController :: doGet() 구분자가 없습니다. >>> : ");
		}
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) 
		throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

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

Ajax로 비밀번호 체크하기

  • boardSelect.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<%@ page import="java.util.ArrayList" %>
<%@ page import="a.b.c.com.kosmo.board.vo.BoardVO" %>

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

<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>게시판 조회하기</title>
	<!-- jQuery CDN 불러오기 -->
	<script src="http://code.jquery.com/jquery-latest.min.js"></script>
	<script type="text/javascript">
		
		$(document).ready(function(){
			
			let pw_result = "";
			// 글쓰기 on (매개변수 3개)
			$(document).on('click', '#insertBtn', function(){
				location.href="/kosServlet/kosmo/board/board.html";
			});
			
			// 글목록 on(매개변수 3개)
			$(document).on('click', "#selectAllBtn", function() {
				location.href="/kosServlet/board?isudType=SALL";
			});
			
			// 글 수정
			$(document).on('click', '#updateBtn', function(){
				// alert("updateBtn >>> : ");
				
				if (pw_result != 'PW_GOOD' || pw_result == '') {
					alert("비밀번호가 일치하지 않거나, 비밀번호 확인을 하지 않으셨습니다.");
					$("#bpw").val();
					$("#bpw").focus();
				} else {
					$("#boardSelectForm").attr({				
						"action": "/kosServlet/board?isudType=UOK",
						"method": "POST",
						"enctype":"application/x-www-form-urlencoded"						
					}).submit();
				}
			});
			
			// 패스워드 체크
			$("#bpwChk").click(function(){
				// alert(">>>");
				
				let urlVal = "/kosServlet/board";
				let typeVal = "GET";
				let bnumVal = $("#bnum").val();
				let bpwVal = $("#bpw").val();
				let isudTypeVal = $("#isudType").val('PWCHK');
				isudTypeVal = isudTypeVal.val();
				
				$.ajax({
					url : urlVal,
					type:typeVal,
					data: {
						"bpw" : bpwVal,
						"isudType" : isudTypeVal,
						"bnum":bnumVal,
					},
					success : whenSuccess,
					error : whenError
				});//end of ajax
				
				
				function whenSuccess(resData){
					alert("resData \n" + resData);
					var sVal = $(resData).find("result").text();
					pw_result = sVal;
					
					alert(sVal);
					
					if(sVal == 'PW_GOOD'){							
						alert("비밀번호가 확인 되었습니다.");							
						$("#bpw").attr("readonly", "true");		
						$("#bpw").css("background-color", "yellow");
					}else{							
						alert("비밀번호가 일치하지 않습니다.");
						$("#bpw").val('');
						$("#bpw").focus();
					}
				}					
				
				function whenError(){
					alert("error");
				}
			});
		});
	</script>
	<style type="text/css">
			*{
				font-size:14px;								
			}
			.tr{				
				background-color: #f2c7f6;
				width:180px;
				height:23px;
				text-align: right; 
			}
			table{						
				margin:auto;					
				width:500px;
				height:300px;											
			}			
			.div1{
					border:1px solid #87a8ff;
					width:500px;
					height:550px;
					margin:30px auto;			
				}	
			textarea {
				width: 100%;
				height: 180px;
				padding: 10px;
				box-sizing: border-box;
				border: solid 1px ;
				border-radius: 5px;
				font-size: 14px;
				resize: none;
			}
			
			text{
				border-radius: 5px;
				font-size: 14px;
				box-sizing: border-box;
				border: solid 2px #1E90FF;
			}		
		</style>
</head>
<body>
	<h3>boardSelect.jsp</h3>
	<hr>
	<% request.setCharacterEncoding("UTF-8"); %>
	<%
		Logger logger = LogManager.getLogger(this.getClass());
		logger.info("boardSelect.jsp 진입 >>> : ");
		
		Object obj = request.getAttribute("aList_select");
		if (obj == null) return;
		
		ArrayList<BoardVO> aList = (ArrayList<BoardVO>)obj;
		
		if (aList != null && aList.size() > 0) {
			BoardVO _bvo = aList.get(0);
	%>
	<div class="div1">
	<h3 align="center">게시판 글 입력하기</h3>
	<hr>
	<form name="boardSelectForm" id="boardSelectForm">
		<table>
			<tr>
				<td colspan="2" bgcolor="#4B0082"></td>
			</tr>
			<tr>
				<td>글번호</td>
				<!-- 
						'readonly'는 form 전송이 가능하지만,
						'disabled'는 form 전송시 값이 전달되지 않는다. 
				-->
				<td>
					<input type="text" class="bnum" name="bnum" id="bnum" style="background-color: #e2e2e2;" 
						value="<%= _bvo.getBnum() %>" readonly/>
				</td>
			</tr>
			<tr>
				<td>글제목</td>
				<td>
					<input type="text" class="bsubject" name="bsubject" id="bsubject" style="background-color: #e2e2e2;" 
						value="<%= _bvo.getBsubject() %>" />
				</td>
			</tr>
			<tr>
				<td>글쓴이</td>
				<td>
					<input type="text" class="bwriter" name="bwriter" id="bwriter" style="background-color: #e2e2e2;" 
						value="<%= _bvo.getBwriter() %>" readonly/>
				</td>
			</tr>
			<tr>
				<td>글 비밀번호</td>
				<td>
					<input type="text" class="bpw" name="bpw" id="bpw" placeholder="비밀번호 8자리" 
						style="background-color: #e2e2e2;" maxlength="8"> 
					<input type="button" name="bpwChk" id="bpwChk" value="비밀번호확인">
				</td>
			</tr>
			<tr>
				<td>글내용</td>
				<td>
					<textarea class="bmemo" name="bmemo" id="bmemo" cols="32" rows="5"><%= _bvo.getBmemo() %></textarea>
				</td>
			</tr>
			<tr>
				<td>삭제여부</td>
				<td>
					<input type="text" name="bdeletyn" id="bdeletyn" class="bdeletyn" 
					style="background-color: #e2e2e2;" value="<%= _bvo.getDeleteyn() %>" disabled/>
				</td>
			</tr>
			<tr>
				<td>등록일</td>
				<td>
					<input type="text" name="binsertdate" id="binsertdate" class="binsertdate"
					style="background-color: #e2e2e2;" value="<%= _bvo.getInsertdate() %>" disabled/>
				</td>
			</tr>
			<tr>
				<td>수정일</td>
				<td>
					<input type="text" name="bupdatedate" id="bupdatedate" class="bupdatedate"
					style="background-color: #e2e2e2;" value="<%= _bvo.getUpdatedate() %>" disabled/>
				</td>
			</tr>
			<tr>
				<td colspan="2" bgcolor="#4B0082"></td>
			</tr>
			<tr>		
				<td colspan="2">
					<!-- hidden flag : 히든 플래그 -->
					<input type="hidden" name="isudType" id="isudType" value="UOK"/>	
					<input type="button" name="insertBtn" id="insertBtn" value="글쓰기" />&nbsp;&nbsp;
					<input type="button" name="updateBtn" id="updateBtn" value="글수정" />&nbsp;&nbsp;
					<input type="button" name="selectAll" id="selectAllBtn" value="글목록"/>
				</td>
			</tr>
		</table>
	</form>
	</div>
	<%		
	}
	%>
</body>
</html>
  • board.html
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>Insert title here</title>
	<!-- 디바이스에 최적화된 크기로 출력됨 ------------------------------------->
	<meta name="viweport" content="width=device-width, iitail-scale=1">
	
	<!-- jQuery CDN 불러오기  -------------------------------------------->
	<script  src="http://code.jquery.com/jquery-latest.min.js"></script>
	<script type="text/javascript">
		
		$(document).ready(function(){
			
			$('#insertBtn').on('click', function(){
				
				var bsubject = $("bsubject").val();
				
				if (bsubject != '') {
					
					$('#boardForm').attr({
						"action":"/kosServlet/board",
						"method":"GET",
						"enctype":"application/x-www-form-urlencoded"
					}).submit();
					
				} else {
					alert("글 제목을 넣으십시오");
					$("#bsubject").focus();
				}
			});
		});
	</script>
	<style type="text/css">
		*{
			font-size:14px;								
		}
		.tr{				
			background-color: #f2c7f6;
			width:180px;
			height:23px;
			text-align: right; 
		}
		table{						
			margin:auto;					
			width:500px;
			height:300px;											
		}			
		.div1{
				border:1px solid #87a8ff;
				width:500px;
				height:400px;
				margin:30px auto;			
			}	
		textarea {
			width: 100%;
			height: 180px;
			padding: 10px;
			box-sizing: border-box;
			border: solid 1px ;
			border-radius: 5px;
			font-size: 14px;
			resize: none;
		}
		
		text{
			border-radius: 5px;
			font-size: 14px;
			box-sizing: border-box;
			border: solid 2px #1E90FF;
		}		
	</style>
</head>
<body>
	<h3>board.html</h3>
	<hr>
	<form name="boardForm" id="boardForm">
		<table>
			<tr>
				<td colspan="2" bgcolor="#4B0082"></td>
			</tr>
			<tr>
				<td>글번호</td>
				<td>
					<input type="text" class="bnum" name="bnum" id="bnum" style="background-color: #e2e2e2;" 
						placeholder="글번호" readonly/>
				</td>
			</tr>
			<tr>
				<td>글제목</td>
				<td>
					<input type="text" class="bsubject" name="bsubject" id="bsubject" style="background-color: #e2e2e2;" 
						placeholder="글제목"/>
				</td>
			</tr>
			<tr>
				<td>글쓴이</td>
				<td>
					<input type="text" class="bwriter" name="bwriter" id="bwriter" style="background-color: #e2e2e2;" 
						placeholder="글쓴이"/>
				</td>
			</tr>
			<tr>
				<td>글비밀번호</td>
				<td>
					<input type="text" class="bpw" name="bpw" id="bpw" placeholder="비밀번호는 8자리"
					style="background-color: #e2e2e2;" maxlength="8"/>
				</td>
			</tr>
			<tr>
				<td>글내용</td>
				<td>
					<textarea class="bmemo" name="bmemo" id="bmemo" cols="50" rows="10" placeholder="내용을 입력하세요"></textarea>
				</td>
			</tr>
			<tr>
				<td colspan="2" bgcolor="#4B0082"></td>
			</tr>
			<tr>		
				<td colspan="2" align="center">
					<input type="button" name="insertBtn" id="insertBtn" value="글입력"/>
					<input type="reset" value="취소"/>
					<input type="hidden" name="isudType" id="isudType"  value="I"/>								
				</td>
			</tr>
		</table>
	</form>
</body>
</html>
  • index.html
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>Insert title here</title>
	<!-- 디바이스에 최적화된 크기로 출력됨 ------------------------------------->
	<meta name="viweport" content="width=device-width, iitail-scale=1">
	
	<!-- jQuery CDN 불러오기  -------------------------------------------->
	<script  src="http://code.jquery.com/jquery-latest.min.js"></script>
	<script type="text/javascript">
		
		$(document).ready(function(){
			
			$('#insertBtn').on('click', function(){
				
				var bsubject = $("bsubject").val();
				
				if (bsubject != '') {
					
					$('#boardForm').attr({
						"action":"/kosServlet/board",
						"method":"GET",
						"enctype":"application/x-www-form-urlencoded"
					}).submit();
					
				} else {
					alert("글 제목을 넣으십시오");
					$("#bsubject").focus();
				}
			});
		});
	</script>
	<style type="text/css">
		*{
			font-size:14px;								
		}
		.tr{				
			background-color: #f2c7f6;
			width:180px;
			height:23px;
			text-align: right; 
		}
		table{						
			margin:auto;					
			width:500px;
			height:300px;											
		}			
		.div1{
				border:1px solid #87a8ff;
				width:500px;
				height:400px;
				margin:30px auto;			
			}	
		textarea {
			width: 100%;
			height: 180px;
			padding: 10px;
			box-sizing: border-box;
			border: solid 1px ;
			border-radius: 5px;
			font-size: 14px;
			resize: none;
		}
		
		text{
			border-radius: 5px;
			font-size: 14px;
			box-sizing: border-box;
			border: solid 2px #1E90FF;
		}		
	</style>
</head>
<body>
	<h3>board.html</h3>
	<hr>
	<form name="boardForm" id="boardForm">
		<table>
			<tr>
				<td colspan="2" bgcolor="#4B0082"></td>
			</tr>
			<tr>
				<td>글번호</td>
				<td>
					<input type="text" class="bnum" name="bnum" id="bnum" style="background-color: #e2e2e2;" 
						placeholder="글번호" readonly/>
				</td>
			</tr>
			<tr>
				<td>글제목</td>
				<td>
					<input type="text" class="bsubject" name="bsubject" id="bsubject" style="background-color: #e2e2e2;" 
						placeholder="글제목"/>
				</td>
			</tr>
			<tr>
				<td>글쓴이</td>
				<td>
					<input type="text" class="bwriter" name="bwriter" id="bwriter" style="background-color: #e2e2e2;" 
						placeholder="글쓴이"/>
				</td>
			</tr>
			<tr>
				<td>글비밀번호</td>
				<td>
					<input type="text" class="bpw" name="bpw" id="bpw" placeholder="비밀번호는 8자리"
					style="background-color: #e2e2e2;" maxlength="8"/>
				</td>
			</tr>
			<tr>
				<td>글내용</td>
				<td>
					<textarea class="bmemo" name="bmemo" id="bmemo" cols="50" rows="10" placeholder="내용을 입력하세요"></textarea>
				</td>
			</tr>
			<tr>
				<td colspan="2" bgcolor="#4B0082"></td>
			</tr>
			<tr>		
				<td colspan="2" align="center">
					<input type="button" name="insertBtn" id="insertBtn" value="글입력"/>
					<input type="reset" value="취소"/>
					<input type="hidden" name="isudType" id="isudType"  value="I"/>								
				</td>
			</tr>
		</table>
	</form>
</body>
</html>

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

  • reply_1.xml
<?xml version="1.0" encoding="UTF-8"?>
<comment>
	<result>true</result>
	<message>댓글이 등록되었습니다.</message>
	<item>
		<num>4</num>
		<writer>
			<![CDATA[홍길동]]>
		</writer>
		<content>
			<![CDATA[새롭게 등록 된 글입니다]]>
		</content>
		<datetime>	
			<![CDATA[2019-11-31 07:13:08]]>
		</datetime>
	</item>
</comment>
  • reply_2.xml
<?xml version="1.0" encoding="UTF-8"?>
<comment>
	<result>true</result>
	<message>댓글이 삭제되었습니다</message>
</comment>
  • reply.html
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">		
		<meta name="viewport" content="width=device-width,
										initial-scale=1.0, 
										maximum-scale=1.0, 
										minimum-scale=1.0, 
										user-scalable=no"/>
		<meta http-equiv="X-UA-Comatible" content="IE=edge, chrome=1"/>			
		<title>REPLY</title>		
		<style type="text/css">
			*{
				padding: 0;
				margin : 0;
				color: #333;				
			}
			ul{
				list-style:none;
			}
			#container{
				padding: 30px 20px;
			}
			h1{
				font-size:large;
				border-left: 10px solid #7BAEB5;
				border-bottom: 10px solid #7BAEB5;
				padding : 10px;
				width: auto;				
			}
			#comment_write{
				padding : 20px 15px;
				border-bottom: 1px solid #7BAEB5;
			}
			#comment_write label{
				display: inline-block;
				width: 80px;
				font-size: 14px;
				font-weight: bold;
				margin-bottom: 10px;				
			}
			#comment_write input[type='text'], #comment_write textarea{
			
				border: 1px solid #ccc;
				vertical-align:middle;
				padding: 3px 10px;
				font-size: 12px;
				line-height: 150%;				
			}
			#comment_write textarea{	
				width: 380px;
				height: 90px;			
			}
			.comment_item{
				font-size: 13px;
				color: #333;
				padding: 15px;
				border-bottom : 1px dotted #ccc;
				line-height: 150%;
			}
			.comment_item .writer{
				color:#555;
				line-height:200%;			
			}
			.comment_item .writer .name{
				color:#222;
				font-weight:bold;
				font-size:14px;
			}				
		</style>			
		<script  src="http://code.jquery.com/jquery-latest.min.js"></script>		
		<!-- 사용자 스크립트 블록 -->
		<script type="text/javascript">
			/*
				새로운 글을 화면에 추가하기 위한 함수
				- num : 글 번호
				- writer : 작성자 이름
				- content : 덧글 내용
				- datetime : 작성일시			
			*/	
			
			function addNewItem(num, writer, content, datetime){
				//새로운 글이 추가될 li태그 객체
				var new_li = $("<li>");
				new_li.attr("data-num", num);
				new_li.addClass("comment_item");
				
				//작성자 정보가 지정될 <p>태그
				var writer_p = $("<p>");
				writer_p.addClass("writer");
					
				//작성자의 정보의 이름
				var name_span = $("<span>");
				name_span.addClass("name");
				name_span.html(writer + "님");
				
				//작성일시
				var date_span = $("<span>");				
				name_span.html("/" + datetime + " ");
				
				//삭제하기 버튼
				var del_input = $("<input>");
				del_input.attr({"type":"button", "value":"삭제하기"});
				del_input.addClass("delete_btn");
				
				//내용
				var content_p = $("<p>");
				content_p.html(content);
				
				//조립하기
				writer_p.append(name_span).append(date_span).append(del_input);
				new_li.append(writer_p).append(content_p);
				$("#comment_list").append(new_li);			
					
			}
		</script>
	</head>
	<body>
		<div id="container">
			<h1>jQuery Comment</h1>
			<div id="comment_write">
				<form id="comment_form">
					<div>
						<label for="user_name">작성자</label>
						<input type="text" name="user_name" id="user_name"/>
						<input type="submit" value="저장하기"/>						
					</div>
					<div>
						<label for="comment">덧글내용</label>
						<textarea name="comment" id="comment"></textarea>
					</div>				
				</form>		
			</div>	
			<ul id="comment_list">
				<!-- 여기에 동적 생성 요소가 들어가게 됩니다. -->
			</ul>
		</div>
	</body>
</html>

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

  • ajax_dom_1.html
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>Insert title here</title>
	<!-- 
		node.append(노드나 문자열) - 노드나 문자열을 node 끝에 삽입합니다
		node.prepend(노드나 문자열) - 노드나 문자열을 node 맨 앞에 삽입합니다
		node.before(노드나 문자열) - 노드나 문자열을 node 이전에 삽입합니다
		node.after(노드나 문자열) - 노드나 문자열을 node 다음에 삽입합니다
		node.replacewith(노드나 문자열) - 노드나 문자열) - node를 새로운 노드나 문자열로 대체합니다.
	 -->
	 <style type="text/css">
	 	.alert{
	 		padding : 15px;
	 		border : 1px solid #d6e9c6;
	 		border-radius : 4px;
	 		color: #3c763d;
	 		background-color : #dff0d8;
	 	}
	 </style>
</head>
<body>
	 <script>
	 	let div = document.createElement("div");
	 	div.className = "alert";
	 	div.innerHTML = "<string>안녕하세요</strong> 중요 메시지를 확인하셨습니다.";
	 	
	 	document.body.append(div);
	 </script>
</body>
</html>

  • ajax_dom_2.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<div id="div"></div>
	<script>
		div.before("<p>안녕하세요!!!!!!!!!</p>", document.createElement("hr"));
	</script>
		&lt;p&gt;안녕하세요 &lt;/p&gt;
		<hr>
	<div id="div"></div>
</body>
</html>

  • ajax_dom_3.html
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>Insert title here</title>
</head>
<body>
	<ol id="ol">
		<li>A</li>
		<li>B</li>
		<li>C</li>
	</ol>
	<script>
		ol.before("before"); // <ol> 앞에 문자열 "before"를 삽입함
		ol.after("after"); //<ol> 앞에 문자열 "before"를 삽입함
		
		let liFirst = document.createElement("li");
		liFirst.innerHTML = "prepend";
		ol.prepend(liFirst); // <ol>의 첫 항목으로 liFirst를 삽입함
		
		let liLast = document.createElement("li");
		liLast.innerHTML = "append";
		ol.append(liLast);
	</script>
</body>
</html>

  • document_write.html
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>Insert title here</title>
</head>
<body>
	<p>일초 후, 이 페이지의 내용은 전부 교체됩니다</p>
	<script>
		// 일초 후 document.write 호출
		setTimeout(() => document.write("<b>... 사라졌습니다.</b>"), 1000);
	</script>
</body>
</html>


Notes


728x90