Data Scientist 옌

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

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

22-05-25(수) 082일차 [Oracle, Spring Framework, Mybatis Framework] 댓글 만들기

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

수업내용


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

  • Oracle Object -오라클은 계정 별로 Object를 사용할 수 있는 권한을 부여한다.
    • index
    • view
    • sequence
    • synonym
    • DBMS
    • table space
    • block

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

  • INDEX
-- INDEX : 색인 : 영어사전 : 색인 A, B, C ... , 한글 사전 : 색인 ㄱ, ㄴ, ㄷ ....
-- 오라클 데이터베이스에서 INDEX 성능 향상(조회 속도 향상)에서 양날의 검 
SELECT  TABLE_NAME, INDEX_NAME, COLUMN_NAME
FROM    USER_IND_COLUMNS
WHERE   TABLE_NAME IN ('EMP', 'DEPT');

--테이블 생성시 프라이머리 키(PK)를 생성하면
--오라클 엔진에서 자동으로 인덱스를 생성한다. 
--생성하는 이름은 SYS_  접두어 + C + 0000000 규칙으로 생성한다. 
--SYS_C0011065 : SYS  접두어 + C + 0000000
CREATE TABLE INDEX_TEST_1 (
    INDEX_1 NUMBER PRIMARY KEY 
);
SELECT  TABLE_NAME, INDEX_NAME, COLUMN_NAME
FROM    USER_IND_COLUMNS
WHERE   TABLE_NAME IN ('INDEX_TEST_1');

-- PK 생성시 자동으로 시스템에서 시스템을 인덱스를 생성하기 때문에
-- 사용자 정의로 인덱스를 생성할 수 없다. 
CREATE INDEX INDEX_TEST_1_111 ON INDEX_TEST_1(INDEX_1);

-- 인덱스 생성하기 
CREATE TABLE T2 (
    T2_1 NUMBER,
    T2_2 VARCHAR2(10)
);

--단일 인덱스
CREATE INDEX INDEX_T2_T2_1 ON T2(T2_1);
--결합 인덱스
CREATE INDEX INDEX_T2_T2_1_T2_2 ON T2(T2_1, T2_2);

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

  • 게시판 댓글 쓰기 설명
    • a href는 GET방식만 된다.
    • 비밀댓글
    • 댓글 비밀번호

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

댓글 구현하기

  • mybatis-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 
		  "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>
	<typeAliases>
		<typeAlias type="a.b.c.com.kosmo.product.vo.KosmoProductVO" alias="kosmoproductvo"/>
		<typeAlias type="a.b.c.com.kosmo.cart.vo.KosmoCartVO" alias="kosmocartvo" />
		<typeAlias type="a.b.c.com.kosmo.mem.vo.KosmoMemberVO" alias="kosmomembervo"/>
		<typeAlias type="a.b.c.com.kosmo.board.vo.KosmoBoardVO" alias="kosmoboardvo"/>
		<typeAlias type="a.b.c.com.kosmo.rboard.vo.KosmoRboardVO" alias="kosmorboardvo"/>	
	</typeAliases>
</configuration>
  • spring_rboard.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
          "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="a.b.c.com.kosmo.rboard.dao.KosmoRboardDAO">

<insert id="kosmoRboardInsert" parameterType="kosmorboardvo" >
 
	INSERT INTO KOSMO_RBOARD( 	
								RKBNUM, 
								KBNUM, 
								RKBNAME,
	                           	RKBCONTENT,  
	                           	DELETEYN,
	                           	INSERTDATE
	                        ) 
	                  VALUES
	                  		( 	
	                  			#{rkbnum}, 
	                  			#{kbnum}, 
	                  			#{rkbname},
	                          	#{rkbcontent},  
	                          	'Y',
	                          	SYSDATE
	                        )
</insert>


<select id="kosmoRboardSelectAll" parameterType="kosmorboardvo" resultType="kosmorboardvo">
	
		SELECT 	A.RKBNUM 		RKBNUM
		       ,A.KBNUM  		KBNUM
		       ,A.RKBNAME 		RKBNAME
		       ,A.RKBCONTENT 	RKBCONTENT	   
	           ,A.INSERTDATE 	INSERTDATE
		FROM 	KOSMO_RBOARD A
		WHERE 	DELETEYN = 'Y' 
		AND 	A.KBNUM = #{kbnum}
		ORDER BY 1 DESC
</select>

<update id="kosmoRboardDelete" parameterType="kosmorboardvo">
	
	UPDATE 	KOSMO_RBOARD 
	SET 	DELETEYN = 'N', 
			INSERTDATE = SYSDATE
	WHERE 	DELETEYN = 'Y' 
	AND 	RKBNUM = #{rkbnum}
	
</update>

</mapper>
  • KosmoRboardVO.java
package a.b.c.com.kosmo.rboard.vo;

public class KosmoRboardVO {
	
	private String rkbnum;
	private String kbnum;
	private String rkbname;
	private String rkbcontent;		
	private String insertdate;
	
	// generator
	public KosmoRboardVO() {
		
	}

	public KosmoRboardVO(String rkbnum, String kbnum, String rkbname, String rkbcontent, String insertdate) {
		
		this.rkbnum = rkbnum;
		this.kbnum = kbnum;
		this.rkbname = rkbname;
		this.rkbcontent = rkbcontent;
		this.insertdate = insertdate;
	}
	
	// getter/setter
	public String getRkbnum() {
		return rkbnum;
	}
	public String getKbnum() {
		return kbnum;
	}
	public String getRkbname() {
		return rkbname;
	}
	public String getRkbcontent() {
		return rkbcontent;
	}
	public String getInsertdate() {
		return insertdate;
	}
	public void setRkbnum(String rkbnum) {
		this.rkbnum = rkbnum;
	}
	public void setKbnum(String kbnum) {
		this.kbnum = kbnum;
	}
	public void setRkbname(String rkbname) {
		this.rkbname = rkbname;
	}
	public void setRkbcontent(String rkbcontent) {
		this.rkbcontent = rkbcontent;
	}
	public void setInsertdate(String insertdate) {
		this.insertdate = insertdate;
	}
}
  • 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"; // 게시판
	public static final String BIZ_GUBUN_R 	= "RB"; // 게시판 댓글
	
	// 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 String getRboardChabun(String type, String memNum) {		
		return BIZ_GUBUN_R.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));
	}
}
  • SpringChabunDAO.java
package a.b.c.com.kosmo.common.dao;

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

public interface SpringChabunDAO {

	public KosmoProductVO getProductChabun();
	public KosmoCartVO getCartChabun();
	public KosmoMemberVO getMemberChabun();
	public KosmoBoardVO getBoardChabun();
	public KosmoRboardVO getRboardChabun();
}
  • 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.board.vo.KosmoBoardVO;
import a.b.c.com.kosmo.cart.vo.KosmoCartVO;
import a.b.c.com.kosmo.mem.vo.KosmoMemberVO;
import a.b.c.com.kosmo.product.vo.KosmoProductVO;
import a.b.c.com.kosmo.rboard.vo.KosmoRboardVO;

@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"); // getProductChabun
	}

	@Override
	public KosmoCartVO getCartChabun() {
		// TODO Auto-generated method stub
		logger.info("SpringChabunDAOImpl getCartChabun >>> : ");
		return sqlSession.selectOne("getCartChabun"); // 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"); // getBoardChabun
	}

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

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

public interface SpringChabunService {

	public KosmoProductVO getProductChabun();
	public KosmoCartVO getCartChabun();
	public KosmoMemberVO getMemberChabun();
	public KosmoBoardVO getBoardChabun();
	public KosmoRboardVO getRboardChabun();
}
  • 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;
import a.b.c.com.kosmo.rboard.vo.KosmoRboardVO;

@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();
	}
	
	@Override
	public KosmoRboardVO getRboardChabun() {
		// TODO Auto-generated method stub
		logger.info("SpringChabunServiceImpl getRboardChabun >>> : ");
		return springChabunDAO.getRboardChabun();
	}
}

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

댓글 구현하기

  • KosmoRboardDAO.java
package a.b.c.com.kosmo.rboard.dao;

import java.util.List;

import a.b.c.com.kosmo.rboard.vo.KosmoRboardVO;

public interface KosmoRboardDAO {

	public int kosmoRboardInsert(KosmoRboardVO rbvo);
	public List<KosmoRboardVO> kosmoRboardSelectAll(KosmoRboardVO rbvo);
	public int kosmoRboardDelete(KosmoRboardVO rbvo);
}
  • KosmoRboardDAOImpl.java
package a.b.c.com.kosmo.rboard.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.rboard.vo.KosmoRboardVO;

@Repository
public class KosmoRboardDAOImpl implements KosmoRboardDAO {

	Logger logger = LogManager.getLogger(KosmoRboardDAOImpl.class);
	
	@Autowired(required=false)
	private SqlSession sqlSession;
	
	@Override
	public int kosmoRboardInsert(KosmoRboardVO rbvo) {
		// TODO Auto-generated method stub
		logger.info("KosmoRboardDAOImpls kosmoRboardInsert 함수 진입 >>> : ");
		return (Integer)sqlSession.insert("kosmoRboardInsert", rbvo);
	}

	@Override
	public List<KosmoRboardVO> kosmoRboardSelectAll(KosmoRboardVO rbvo) {
		// TODO Auto-generated method stub
		logger.info("KosmoRboardDAOImpl kosmoRboardSelectAll 함수 진입 >>> : ");
		return sqlSession.selectList("kosmoRboardSelectAll", rbvo);
	}

	@Override
	public int kosmoRboardDelete(KosmoRboardVO rbvo) {
		// TODO Auto-generated method stub
		logger.info("KosmoRboardDAOImpl kosmoRboardDelete 함수 진입 >>> : ");
		return (Integer)sqlSession.update("kosmoRboardDelete", rbvo);
	}

}
  • KosmoRboardService.java
package a.b.c.com.kosmo.rboard.service;

import java.util.List;

import a.b.c.com.kosmo.rboard.vo.KosmoRboardVO;

public interface KosmoRboardService {
	
	public int kosmoRboardInsert(KosmoRboardVO rbvo);
	public List<KosmoRboardVO> kosmoRboardSelectAll(KosmoRboardVO rbvo);
	public int kosmoRboardDelete(KosmoRboardVO rbvo);
}
  • KosmoRboardServiceImpl.java
package a.b.c.com.kosmo.rboard.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.rboard.dao.KosmoRboardDAO;
import a.b.c.com.kosmo.rboard.vo.KosmoRboardVO;

@Service
@Transactional
public class KosmoRboardServiceImpl implements KosmoRboardService {

	Logger logger = LogManager.getLogger(KosmoRboardServiceImpl.class);
	
	// 서비스에서 DAO 연결하기
	// 필드 @Autowired 어노테이션으로 DI(의존성 주입하기)
	@Autowired(required=false)
	private KosmoRboardDAO kosmoRboardDAO;
	
	@Override
	public int kosmoRboardInsert(KosmoRboardVO rbvo) {
		// TODO Auto-generated method stub
		logger.info("KosmoRboardServiceImpl kosmoRboardInsert 함수 진입 >>> : ");
		return kosmoRboardDAO.kosmoRboardInsert(rbvo);
	}

	@Override
	public List<KosmoRboardVO> kosmoRboardSelectAll(KosmoRboardVO rbvo) {
		// TODO Auto-generated method stub
		logger.info("KosmoRboardServiceImpl kosmoRboardSelectAll 함수 진입 >>> : ");
		return kosmoRboardDAO.kosmoRboardSelectAll(rbvo);
	}

	@Override
	public int kosmoRboardDelete(KosmoRboardVO rbvo) {
		// TODO Auto-generated method stub
		logger.info("KosmoRboardServiceImpl kosmoRboardDelete 함수 진입 >>> : ");
		return kosmoRboardDAO.kosmoRboardDelete(rbvo);
	}
}
  • KosmoRboardController.java
package a.b.c.com.kosmo.rboard.controller;

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.Controller;
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.common.ChabunUtil;
import a.b.c.com.kosmo.common.service.SpringChabunService;
import a.b.c.com.kosmo.rboard.service.KosmoRboardService;
import a.b.c.com.kosmo.rboard.vo.KosmoRboardVO;

@Controller
public class KosmoRboardController {
	Logger logger = LogManager.getLogger(KosmoRboardController.class);
	
	// 필드 오토와이어드 
	@Autowired(required=false)	
	private SpringChabunService springChabunService;
	
	// 필드 오토와이어드 
	@Autowired(required=false)
	private KosmoRboardService kosmoRboardService;
	
	// 댓글 글쓰기 폼
	@RequestMapping(value="kosmoRboardForm", method=RequestMethod.GET)
	public String kosmoRboardForm() {
		logger.info("KosmoRboardController kosmoRboardForm 함수 진입 >>> : ");	
		return "rboard/kosmoRboardForm";
	}
	
	// 댓글 등록
	@RequestMapping( value="kosmoRboardInsert", method=RequestMethod.POST)
	@ResponseBody
	public String kosmoRboardInsert(KosmoRboardVO rbvo) {	
		logger.info("KosmoRboardController kosmoRboardInsert >>> : ");
		logger.info("KosmoRboardController kosmoRboardInsert rbvo.getKbnum() >>> : " + rbvo.getKbnum());
							
		// 채번 구하기
		String rkbnum = ChabunUtil.getRboardChabun("N", springChabunService.getRboardChabun().getRkbnum());
		logger.info("KosmoBoardController kosmoBoardInsert rkbnum >>> : " + rkbnum);
		
		rbvo.setRkbnum(rkbnum);
		
		logger.info("rbvo.getRkbnum() >>> : " + rbvo.getRkbnum());
		logger.info("rbvo.getKbnum() >>> : " + rbvo.getKbnum());
		logger.info("rbvo.getRkbname() >>> : " + rbvo.getRkbname());
		logger.info("rbvo.getRkbcontent() >>> : " + rbvo.getRkbcontent());		
		
		int nCnt = kosmoRboardService.kosmoRboardInsert(rbvo);
		logger.info("KosmoRboardController kosmoRboardInsert nCnt >>> : " + nCnt);
		
		if (1 == nCnt) { return "GOOD"; }
		else { return "BAD"; }
	}

	// 댓글 전체 조회	
	@RequestMapping( value="kosmoRboardSelectAll", method=RequestMethod.POST)
	@ResponseBody
	public String kosmoRboardSelectAll(KosmoRboardVO rbvo) {	
		logger.info("KosmoRboardController kosmoRboardSelectAll >>> : ");
		logger.info("KosmoRboardController kosmoRboardSelectAll rbvo.getKbnum() >>> : " + rbvo.getKbnum());
		
		List<KosmoRboardVO> list  = kosmoRboardService.kosmoRboardSelectAll(rbvo);
		logger.info("KosmoRboardController kosmoRboardSelectAll list >>> : " + list);
		
		String ss = "";
		String listStr = "";
		for (int i=0; i < list.size(); i++) {
			KosmoRboardVO _rbvo = list.get(i);
			String s0 = _rbvo.getRkbnum();
			String s1 = _rbvo.getRkbname();
			String s2 = _rbvo.getRkbcontent();
			String s3 = _rbvo.getInsertdate();
			ss = s0+","+s1+","+s2+","+s3;
			listStr += ss+"&";
		}
		return listStr;
	}
	
	// 댓글 삭제	
	@RequestMapping( value="kosmoRboardDelete", method=RequestMethod.POST)
	@ResponseBody
	public String kosmoRboardDelete(KosmoRboardVO rbvo) {	
		logger.info("KosmoRboardController kosmoRboardDelete >>> : ");
		logger.info("KosmoRboardController kosmoRboardDelete rbvo.getRkbnum() >>> : " + rbvo.getRkbnum());
	
		int nCnt  = kosmoRboardService.kosmoRboardDelete(rbvo);
		logger.info("KosmoRboardController kosmoRboardDelete nCnt >>> : " + nCnt);
		
		if (1 == nCnt) { return "GOOD"; }
		else { return "BAD"; }
	}
}

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

댓글 구현하기

  • kosmoRboardForm.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.rboard.vo.KosmoRboardVO" %> 
<%@ page import = "java.util.List" %>
<%@ page import = "java.util.ArrayList" %>

<%@ page import=" org.apache.log4j.LogManager" %>
<%@ page import="org.apache.log4j.Logger" %>
    
<!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(){
			
			//rkbcontent 길이 제한 200byte
			$("#rkbcontent").keyup(function(){
				cut_200(this);
			});
			
			// 댓글 전체 불러오기 
			selectAll();
			
			// 댓글 등록
			$(document).on("click", "#rInsertBtn", function(){
				console.log("rInsertBtn >>> : ");
				
				let insertURL = "kosmoRboardInsert.k";		
				let method = "POST";
				let dataParam = {
					kbnum: $("#kbnum").val(),
					ksbname: $("#rkbname").val(),
					ksbcontent: $("#rskcontent").val(),
				};
				dataParam = $("#rboardForm").serialize();
				console.log("dataParam >>> : " + dataParam);
				
				$.ajax({
					url: insertURL,
					type: method,
					data: dataParam,
					success: whenSuccess,
					error: whenError
				});
				
				function whenSuccess(resData){	
					alert("resData >>> : " + resData);	
					if ("GOOD" == resData){
						// 입력데이터 초기화 함수호출 
						rboardFormData();
						location.reload();
					}
				}
				function whenError(e){
					alert("e >>> : " + e.responseText);
				}
				
				selectAll();
			});
			
			// 댓글 삭제		
			$(document).on("click", ".deleteBtn", function(){
				console.log("D >>> : ");
				
				var rkbnumV = $(this).parents("li").attr("dataNum");
				alert("rkbnumV >>> : " + rkbnumV);
				var target = $(this).parents(".rbmemoItem");
				console.log("target >>> : " + target);
				
				let deleteURL = "kosmoRboardDelete.k";
				let method = "POST";
				let dataParam = {
					rkbnum: $('#rkbnum').val(rkbnumV),				
				};		
				dataParam = $("#rboardForm").serialize();
				console.log("dataParam >>> : " + dataParam);
				
				$.ajax({
					url: deleteURL,
					type: method,
					data: dataParam,
					success: whenSuccess,
					error: whenError
				});
				
				function whenSuccess(resData){					
					console.log("resData >>> : " + resData);				
					if ("GOOD" == resData){
						alert("댓글이 삭제되었습니다.");
						target.remove();
					}	
				}
				function whenError(e){
					console.log("e >>> : " + e.responseText);
				}
			});
		});
		
		
		// 게시글 번호로 댓글 전체조회
		function selectAll(){
						
			console.log("SALL >>> : ");
			
			let selectAllURL = "kosmoRboardSelectAll.k";
			let method = "POST";
			let dataParam = {
				kbnum: $("#kbnum").val(),				
			};		
			dataParam = $("#rboardForm").serialize();
			console.log("dataParam >>> : " + dataParam);
			
			$.ajax({
				url: selectAllURL,
				type: method,
				data: dataParam,
				success: whenSuccess,
				error: whenError
			});
			
			function whenSuccess(resData){	
				console.log("resData >>> : " + resData);
				console.log("whenSuccess kosmoRboardSelectAll resData >>> : " + resData);
				
				if(isEmpty(resData)){
					return false;
				}
				
				let v = resData.split("&");
				for(let i=0; i < v.length; i++){
					console.log(v[i]);
					let vv = v[i].split(",");
					let j=0
					for (; j < vv.length-1; j++){
						console.log("vv[0] >>> : " + vv[0]);
						console.log("vv[1] >>> : " + vv[1]);
						console.log("vv[2] >>> : " + vv[2]);
						console.log("vv[3] >>> : " + vv[3]);					
					}
					addNewItem(vv[0], vv[1], vv[2], vv[3]);
				}
			}
			function whenError(e){
				console.log("e >>> : " + e.responseText);
			}	
		}
			
		// 새로운 글 화면에 추가
		function addNewItem(num, writer, content, datetime){
			
			//데이터 체크
			if(isEmpty(num)) return false;
			
			// 새로운 글이 추가될 li태그 
			var newLi = $("<li>");
			newLi.attr("dataNum", num);
			newLi.addClass("rbmemoItem");
			
			// 작성자 정보가 지정될 <p> 태그 
			var writerP = $("<p>");
			writerP.addClass("writer");
			
			// 작성자 정보의 이름 
			var nameSpan = $("<span>");
			nameSpan.addClass("name");
			nameSpan.html(decodeURIComponent(writer) + "님");
			
			// 작성일시 
			var dateSpan = $("<span>");
			dateSpan.html(" / " + datetime + " ");
			
			// 삭제 버튼 
			var delInput = $("<input>");
			delInput.attr({"type":"button", "value":"삭제하기"});
			delInput.addClass("deleteBtn");
			
			// 내용
			var contentP = $("<p>");
			contentP.html(decodeURIComponent(content));
			
			// 조립하기
			writerP.append(nameSpan).append(dateSpan).append(delInput);
			newLi.append(writerP).append(contentP);
			$("#rboardlist").append(newLi);
		}
		
		// 한글 포함 문자열 길이
		function getTextLength(s){
			var len = 0;
			for(var i=0; i < s.length; i++){
				if(escape(s.charAt(i)).length == 6){
					len++;
				}
				len++;
			}
			return len;
		}
		function cut_200(obj){
			var t = $(obj).val();
			var l = t.length;
			while(getTextLength(t) > 200){
				l--;
				t= t.substring(0, l);
			}
			$(obj).val(t);
			$('.bytes').text(getTextLength(t));
		}
		
		// 댓글 등록 후 입력창 초기화
		function rboardFormData(){
			$("#rkbname").val("");
			$("#rkbcontent").val("");
		}
		
		// 데이터 체크
		function isEmpty(val){
			if(typeof val=="undefined" || val==null || val==""){
				return true;
			}else{
				return false;
			}
		}

</script>
</head>
<body>
<h3>댓글</h3>
<hr>
<% request.setCharacterEncoding("UTF-8"); %>
<%
	Logger logger = LogManager.getLogger(this.getClass());
	logger.info("kosmoRboardForm.jsp 페이지 >>> : ");

	String kbnum = request.getParameter("kbnum");
	logger.info("kosmoRboardForm.jsp kbnum >>> : " + kbnum);
%>
<div id="rbwriterdiv">
<form name="rboardForm" id="rboardForm">
<table>
<tr>
	<td>작성자</td>
	<td>
		<input type="text" name="rkbname" id="rkbname"/>
		<input type="hidden" name="kbnum" id="kbnum" value="<%=kbnum%>">
		<input type="hidden" name="rkbnum" id="rkbnum">
	    <input type="button" value="저장하기" id="rInsertBtn">
	</td>
</tr>
<tr>
	<td>댓글 내용</td>
	<td>
		<textarea name="rkbcontent" id="rkbcontent" rows="5" cols="50" style="resize: none"></textarea>	
		<div><span class="bytes">0</span>bytes</div>
	</td>	
</tr>
</table>
<hr>
<ul name="rboardlist" id="rboardlist">
	<!-- 여기에 동적 생성 요소가 들어온다. -->
</ul>
</form>
</div>
</body>
</html>
  • kosmoRboardInsert.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/kosmoRboardSelectAll.k";
	</script>
</body>
</html>
  • 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>
	<p>
	<a href="kosmoRboardForm.k">코스모 댓글 쓰기 </a><br>
</body>
</html>

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

  • 좋아요 기능 설명
    • foreach collection="list" <-- 리스트와 배열만 올 수 있음 (해시맵 포함, ArrayList는 순차가 있음, 해시맵은 키를 만들어야함(유니크함) - 빠른데 비용이 더 많이 나옴)
      • foreach <- 배치성 프로시저
    • spring3.pdf 123p 꼼꼼하게 공부하기
    • [교재 483p] 프로시저

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


Notes


728x90