23.03.22(Jsp)

MH S·2023년 3월 22일
0

Jsp

목록 보기
7/16

게시판 예제

댓글 기능 추가, 댓글 삭제 기능

CommentMgr.java

package guestbook;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.text.SimpleDateFormat;
import java.util.Vector;

public class CommentMgr {
	private DBConnectionMgr pool;
	private final SimpleDateFormat SDF_DATE = new SimpleDateFormat("yyyy'년'  M'월' d'일' (E)");

	public CommentMgr() {
		pool = DBConnectionMgr.getInstance();
	}
	
	// Comment Insert
	//insert tblComment(num,cid,comment,cip,cregDate)values(?,?,?,?,now())
	public void insertComment(CommentBean bean) {
		Connection con = null;
		PreparedStatement pstmt = null;
		String sql = null;

		try {
			con = pool.getConnection();
			sql = "insert tblComment(num,cid,comment,cip,cregDate)values(?,?,?,?,now())";
			pstmt = con.prepareStatement(sql);
			pstmt.setInt(1, bean.getNum());
			pstmt.setString(2, bean.getCid());
			pstmt.setString(3, bean.getComment());
			pstmt.setString(4, bean.getCip());
			pstmt.executeUpdate();// SQL로 실행
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			pool.freeConnection(con, pstmt);
		}
	}
	
	// Comment List
	// select * from tblComment where num = ?
	public Vector<CommentBean> listComment(int num){
		Connection con = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		String sql = null;
		Vector<CommentBean> vlist = new Vector<CommentBean>();
		try {
			con = pool.getConnection();
			sql = "select * from tblComment where num = ?";
			pstmt = con.prepareStatement(sql);
			pstmt.setInt(1, num);
			
			rs = pstmt.executeQuery();
			while(rs.next()) {
				CommentBean bean = new CommentBean();
				bean.setNum(rs.getInt("num"));
				bean.setCid(rs.getString("cid"));
				bean.setComment(rs.getString("comment"));
				bean.setCip(rs.getString("cip"));
				String tempDate = SDF_DATE.format(rs.getDate("cregDate"));
				bean.setCregDate(tempDate);
				bean.setCnum(rs.getInt("cnum"));
				vlist.addElement(bean);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			pool.freeConnection(con, pstmt, rs);
		}
		return vlist;
	}
	
	// Comment Delete
	// delete from tblComment where cnum = ?
	public void deleteComment(int cnum) {
		Connection con = null;
		PreparedStatement pstmt = null;
		String sql = null;
		try {
			con = pool.getConnection();
			sql = "delete from tblComment where cnum = ?";
			pstmt = con.prepareStatement(sql);
			pstmt.setInt(1, cnum);
			pstmt.executeUpdate();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			pool.freeConnection(con, pstmt);
		}
	}
	
	// Comment All delete
	// delete from tblComment where num = ?
	public void deleteAllComment(int num) {
		Connection con = null;
		PreparedStatement pstmt = null;
		String sql = null;
		try {
			con = pool.getConnection();
			sql = "delete from tblComment where num = ?";
			pstmt = con.prepareStatement(sql);
			pstmt.setInt(1, num);
			pstmt.executeUpdate();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			pool.freeConnection(con, pstmt);
		}
	}	
}

showGuestBook.jsp

<!-- showGuestBook.jsp -->
<%@page import="guestbook.CommentBean"%>
<%@page import="java.util.Vector"%>
<%@page import="guestbook.GuestBookBean"%>
<%@page contentType="text/html; charset=UTF-8"%>
<jsp:useBean id="mgr" class="guestbook.GuestBookMgr"/>
<jsp:useBean id="cmgr" class="guestbook.CommentMgr"/>
<%
	String id = (String)session.getAttribute("idKey");
	if(id==null){
		// 현재 접속된 url 리턴
		StringBuffer url = request.getRequestURL();
		//out.println(url);
		response.sendRedirect("login.jsp?url="+url);
		return;
	}
%>
<html>
<title>GuestBook</title>
<script type="text/javascript">
	function updateFn(num) {
		url = "updateGuestBook.jsp?num="+num;
		window.open(url, "GuestBook Update", "width=540, height=300");
	}
	// commentFn(this.form)
	function commentFn(frm){
		if(frm.comment.value==""){
			alert("댓글을 입력하세요");
			frm.comment.focus();
			return;
		}
		frm.submit();
	}
	function disFn(num) {
		//alert(num);
		var v = "cmt"+num; // cmt7
		var e = document.getElementById(v);
		if(e.style.display=='none')
			e.style.display='block'; // 보이는것
		else
			e.style.display='none'; // 안보임
	}
	function delFn(cnum) {
		document.delFrm.action="commentProc.jsp"
		document.delFrm.cnum.value=cnum;
		document.delFrm.submit();
	}
</script>
<link href="css/style.css" rel="stylesheet" type="text/css">
</head>
<body bgcolor="#996600">
<div align="center">
<%@include file="postGuestBook.jsp" %>
<table width="520" cellspacing="0" cellpadding="3">
	<tr bgcolor="#F5F5F5"> 
		<td><b><%=login.getName()%></b></td>
		<td align="right"><a href="logout.jsp">로그아웃</a></b></td>
	</tr>
</table>
<!-- GuestBook List Start -->
<%
	Vector<GuestBookBean> vlist = mgr.listGuestBook(id, login.getGrade());
	//out.print(vlist.size());
	if(vlist.isEmpty()){
%>		<table width="520" cellspacing="0" cellpadding="7">
			<tr>
				<td>등록된 글이 없습니다.</td>
			</tr>
		</table>
<%	}else{
		for(int i=0;i<vlist.size();i++){
			// 방명록 글
			GuestBookBean bean = vlist.get(i);
			// 방명록 글쓴이 
			JoinBean writer = mgr.getJoin(bean.getId());
%>
	<table  width="520" border="1" bordercolor="#000000" cellspacing="0" cellpadding="0">
	<tr>
		<td>
			<table bgcolor="#F5F5F5">
				<tr>
					<td width="225">NO : <%=vlist.size()-i %> </td>					
					<td width="225">
						<img src="img/face.bmp" border="0" alt="이름">
						<a href="mailto:<%=writer.getEmail()%>">
							<%=writer.getName() %>
						</a>
					</td>					
					<td width="150" align="center">
						<%if(writer.getHp()==null || writer.getHp().equals("")){
							out.print("홈페이지가 없네요");
						}else{
						%>	
						<a href="http://<%=writer.getHp()%>">
							<img alt="홈페이지" src="img/hp.bmp" border="0">
						</a>
						<%}%>
					</td>					
				</tr>
				<tr>
					<td colspan="3"><%=bean.getContents() %></td>					
				</tr>
				<tr>
					<td>IP : <%=bean.getIp() %></td>					
					<td><%=bean.getRegdate()+" "+bean.getRegtime() %></td>					
					<td>
					<%
						// 수정, 삭제 : 로그인 id가 동일 활성
						// 삭제: 관리자
						// 비밀글 : secret 1일때 
						boolean chk = login.getId().equals(writer.getId());
						if(chk||login.getGrade().equals("1")){
							if(chk){
						%>
							<a href="javascript:updateFn('<%=bean.getNum()%>')">[수정]</a>
						<%}//---if2%>
							<a href="deleteGuestBook.jsp?num=<%=bean.getNum()%>">[삭제]</a>
						<%if(bean.getSecret().equals("1")){%>	
						비밀글
						<%
							}//---if3
						}//---if1
					%>
					</td>						
				</tr>
			</table>
		</td>
	</tr>
	</table>
<!-- Comment List Start -->
<div id="cmt<%=bean.getNum()%>" style="display:none">
<%
	Vector<CommentBean> cvlist = cmgr.listComment(bean.getNum());
	if(!cvlist.isEmpty()){
%>
<table width="500" bgcolor="#F5F5F5">
		<%			
			for(int j=0;j<cvlist.size();j++){
				CommentBean cbean = cvlist.get(j);
		%>
			<tr>
				<td>
					<table width="500">
						<tr>
							<td><b><%=cbean.getCid()%></b>	</td>
							<td align="right">
							<!-- 삭제는 로그인 id 와 댓글 쓴 id랑 동일 -->
							<%if(id.equals(cbean.getCid())){ %>
							<%-- <a href="commentProc.jsp?flag=delete&cnum=<%=cbean.getCnum()%>">[삭제]</a> --%>
							<a href="#" onclick="javascript:delFn('<%=cbean.getCnum()%>')">[삭제]</a>
							<%}%>
							</td>
						</tr>
						<tr>
							<td colspan="2"><%=cbean.getComment() %></td>
						</tr>
						<tr>
							<td><%=cbean.getCip()%></td>
							<td align="right"><%=cbean.getCregDate()%></td>
						</tr>
					</table>
				<hr>	
				</td>
			</tr>
		<%}//---for(Comment)%>
		</table>	
<%  } // --if(comment)%>
</div>
<!-- Comment List End -->
<table width="500">
	<tr><td>
		<button onclick="disFn('<%=bean.getNum()%>')">
		댓글<%=cvlist.isEmpty()?"":cvlist.size()%></button>
	</td></tr>
</table>
<!-- Comment Form Start -->
<form name="cFrm" method="post" action="commentProc.jsp">
<table>
	<tr>
		<td>
			<textarea placeholder="댓글입력..." name="comment" rows="2" 
			cols="65" maxlength="1000"></textarea>
		</td>
		<td>
			<input type="button" value="댓글" onclick="commentFn(this.form)">
			<input type="hidden" name="flag" value="insert">
			<!-- 방명록 글번호 -->
			<input type="hidden" name="num" value="<%=bean.getNum()%>">
			<!-- 로그인 id -->
			<input type="hidden" name="cid" value="<%=login.getId()%>">
			<!-- 댓글 입력 ip 주소 -->
			<input type="hidden" name="cip" value="<%=request.getRemoteAddr()%>">
		</td>
	</tr>
</table>	
</form>
<!-- Comment Form End -->
<%	
		} // --GuestBook for
	} // -- GuestBook if-else%>
<!-- GuestBook List End -->
<form method="post" name="delFrm">
	<input type="hidden" name="flag" value="delete">
	<input type="hidden" name="cnum">	
</form>
</div>
</body>
</html>

commentProc.jsp

<!-- commentProc.jsp -->
<%@page contentType="text/html; charset=UTF-8"%>
<jsp:useBean id="cmgr" class="guestbook.CommentMgr"/>
<jsp:useBean id="mgr" class="guestbook.GuestBookMgr"/>
<jsp:useBean id="cbean" class="guestbook.CommentBean"/>
<jsp:setProperty property="*" name="cbean"/>
<%
	String flag = request.getParameter("flag");
	String method = request.getMethod();
	//System.out.println("method :"+ method);
	if(method.equalsIgnoreCase("POST")){
		if(flag.equals("insert")){
			cmgr.insertComment(cbean);
		}else if(flag.equals("delete")){
			cmgr.deleteComment(cbean.getCnum());
		}
	}
	response.sendRedirect("showGuestBook.jsp");
%>

deleteGuestBook.jsp

<!--  deleteGuestBook.jsp -->
<%@page import="guestbook.MyUtil"%>
<%@page contentType="text/html; charset=UTF-8"%>
<jsp:useBean id="mgr" class="guestbook.GuestBookMgr"/>
<jsp:useBean id="cmgr" class="guestbook.CommentMgr"/>
<%
	int num = 0;
	if(request.getParameter("num")!=null){
		num = MyUtil.parseInt(request, "num");
		mgr.deleteGuestBook(num);
		// 방명록 원글 삭제시 관련된 댓글 모두 삭제
		cmgr.deleteAllComment(num);
	}
	response.sendRedirect("showGuestBook.jsp");
%>

결과화면




post , get 방식 차이

댓글 삭제시 form 에서 get 방식을 사용할 경우
http://localhost/myapp/guestbook/commentProc.jsp?flag=delete&cnum=5
처럼 삭제 주소가 나오기 때문에 post 방식을 사용해야한다.

ex) POST 방식 이외의 GET방식 코드 무시

if(method.equalsIgnoreCase("POST")){
		if(flag.equals("insert")){
			cmgr.insertComment(cbean);
		}else if(flag.equals("delete")){
			cmgr.deleteComment(cbean.getCnum());
		}
	}

<showGuestBook.jsp>

function delFn(cnum) {
		document.delFrm.action="commentProc.jsp"
		document.delFrm.cnum.value=cnum;
		document.delFrm.submit();
}
<td><b><%=cbean.getCid()%></b></td>
<td align="right">
<!-- 삭제는 로그인 id 와 댓글 쓴 id랑 동일 -->
<%if(id.equals(cbean.getCid())){ %>
<%-- <a href="commentProc.jsp?flag=delete&cnum=<%=cbean.getCnum()%>">[삭제]</a> --%>
     <a href="#" onclick="javascript:delFn('<%=cbean.getCnum()%>')">[삭제]</a>
<%}%>
</td>
                                                                                        
<!-- GuestBook List End -->
<form method="post" name="delFrm">
	<input type="hidden" name="flag" value="delete">
	<input type="hidden" name="cnum">	
</form>  


교재 14장(로그인 및 회원가입, 회원수정)


  1. 로그인 및 회원가입, 회원수정
  2. package 및 폴더명 : ch14
  3. table.sql : tblMember, tblZipcode
  4. zipcode.txt는 HiedSQL실행
  5. MemberBean.java, ZipcodeBean.java 생성
  6. DBConnectionMgr.java 복사

테이블 생성

DROP TABLE IF EXISTS tblMember;

CREATE TABLE `tblMember` (
  `id` char(20) NOT NULL,
  `pwd` char(20) NOT NULL,
  `name` char(20) NOT NULL,
  `gender` char(1) NOT NULL,
  `birthday` char(6) NOT NULL,
  `email` char(30) NOT NULL,
  `zipcode` char(5) NOT NULL,
  `address` char(50) NOT NULL,
  `hobby` char(5) NOT NULL,
  `job` char(20) NOT NULL,
  PRIMARY KEY (`id`)
)COLLATE='euckr_korean_ci';

DROP TABLE IF EXISTS tblZipcode;

CREATE TABLE `tblZipcode` (
  `zipcode` char(5) NOT NULL,
  `area1` char(10) DEFAULT NULL,
  `area2` char(20) DEFAULT NULL,
  `area3` char(30) DEFAULT NULL
)COLLATE='euckr_korean_ci';

tblZipcode에 데이터 삽입

zipcode.txt 파일안의 주소 데이터들 HeidSQL에 tblZipcode 테이블에 넣기

자바 이클립스에 필요한 파일들 생성

MemberBean.java, ZipcodeBean.java

<MemberBean.java>

package ch14;

public class MemberBean {
	private String id;
	private String pwd;
	private String name;
	private String gender;
	private String birthday;
	private String email;
	private String zipcode;
	private String address;
	private String hobby[];
	private String job;
	
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getPwd() {
		return pwd;
	}
	public void setPwd(String pwd) {
		this.pwd = pwd;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getGender() {
		return gender;
	}
	public void setGender(String gender) {
		this.gender = gender;
	}
	public String getBirthday() {
		return birthday;
	}
	public void setBirthday(String birthday) {
		this.birthday = birthday;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public String getZipcode() {
		return zipcode;
	}
	public void setZipcode(String zipcode) {
		this.zipcode = zipcode;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	public String []getHobby() {
		return hobby;
	}
	public void setHobby(String []hobby) {
		this.hobby = hobby;
	}
	public String getJob() {
		return job;
	}
	public void setJob(String job) {
		this.job = job;
	}
	
}

<ZipcodeBean.java>

package ch14;

public class ZipcodeBean {
	private String zipcode;
	private String area1;
	private String area2;
	private String area3;
	
	public String getZipcode() {
		return zipcode;
	}
	public void setZipcode(String zipcode) {
		this.zipcode = zipcode;
	}
	public String getArea1() {
		return area1;
	}
	public void setArea1(String area1) {
		this.area1 = area1;
	}
	public String getArea2() {
		return area2;
	}
	public void setArea2(String area2) {
		this.area2 = area2;
	}
	public String getArea3() {
		return area3;
	}
	public void setArea3(String area3) {
		this.area3 = area3;
	}
	
}

MemberMgr.java

package ch14;

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

public class MemberMgr {
	private DBConnectionMgr pool;
	
	public MemberMgr() {
		pool = DBConnectionMgr.getInstance();
	}
	
	// 로그인: 성공 -> true
	public boolean loginMember(String id, String pwd) {
		Connection con = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		String sql = null;
		boolean flag = false;
		try {
			con = pool.getConnection();
			sql = "select id from tblMember where id = ? and pwd = ?";
			pstmt = con.prepareStatement(sql);
			pstmt.setString(1,id);
			pstmt.setString(2,pwd);
			rs = pstmt.executeQuery();
			flag = rs.next();	
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			pool.freeConnection(con, pstmt, rs);
		}
		return flag;
	}
}

webapp -> ch14 관련 파일 넣기

실행 화면


0개의 댓글

관련 채용 정보