STUDY/JSP

게시판(서블릿) - 코드

Anne of Green Galbes 2019. 2. 26. 17:45

① BoardServlet.java

package com.board;

import java.io.IOException;

import java.net.URLDecoder;

import java.net.URLEncoder;

import java.sql.Connection;

import java.util.List;

import javax.servlet.RequestDispatcher;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import com.util.DBCPConn;

import com.util.MyUtil;

public class BoardServlet extends HttpServlet{

private static final long serialVersionUID = 1L;

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

doPost(req, resp);

}

protected void forward(HttpServletRequest req, HttpServletResponse resp, String url)

throws ServletException, IOException {

//forward

RequestDispatcher rd = req.getRequestDispatcher(url);

rd.forward(req, resp);

}

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

req.setCharacterEncoding("UTF-8");

//주소 : http://192.168.16.8:8080/study/bbs/created.do

String cp = req.getContextPath(); //study까지의 주소 → http://192.168.16.8:8080/study

Connection conn = DBCPConn.getConnection();

BoardDAO dao = new BoardDAO(conn);

MyUtil myUtil = new MyUtil();

String uri = req.getRequestURI(); //study 이후의 주소 → /bbs/created

String url;

if(uri.indexOf("created.do")!=-1){

url = "/sboard/created.jsp";

forward(req, resp, url);

}

//created창에서 입력을 하고 확인을 눌렀을 때

else if(uri.indexOf("created_ok.do")!=-1){

//action 사용 불가

BoardDTO dto = new BoardDTO();

int maxNum = dao.getMaxNum();

dto.setNum(maxNum + 1);

dto.setSubject(req.getParameter("subject"));

dto.setName(req.getParameter("name"));

dto.setEmail(req.getParameter("email"));

dto.setPwd(req.getParameter("pwd"));

dto.setContent(req.getParameter("content"));

dto.setIpAddr(req.getRemoteAddr());

dao.insertData(dto);

url = cp + "/bbs/list.do";

resp.sendRedirect(url);

}

else if(uri.indexOf("list.do")!=-1){

String pageNum = req.getParameter("pageNum");

int currentPage = 1;

if(pageNum!=null)

currentPage = Integer.parseInt(pageNum);

String searchKey = req.getParameter("searchKey");

String searchValue = req.getParameter("searchValue");

if(searchValue==null){

searchKey="subject";

searchValue="";

}else{

if(req.getMethod().equalsIgnoreCase("GET")){

searchValue = URLDecoder.decode(searchValue,"UTF-8");

}

}

int dataCount = dao.getDataCount(searchKey, searchValue);

int numPerPage = 10;

int totalPage = myUtil.getPageCount(numPerPage, dataCount);

if(currentPage>totalPage)

currentPage = totalPage;

int start = (currentPage-1)*numPerPage+1;

int end = currentPage*numPerPage;

List<BoardDTO> lists = dao.getLists(start, end, searchKey, searchValue);

String param = "";

if(!searchValue.equals("")){

param = "searchKey=" + searchKey;

param+= "&searchValue=" + URLEncoder.encode(searchValue,"UTF-8");

}

String listUrl = cp + "/bbs/list.do";

if(!param.equals("")){

listUrl += "?" + param;

}

String pageIndexList = myUtil.pageIndexList(currentPage, totalPage, listUrl);

String articleUrl = cp + "/bbs/article.do?pageNum=" +currentPage;

if(!param.equals("")){

articleUrl += "&" + param;

}

//포워딩 데이터

req.setAttribute("lists", lists);

req.setAttribute("pageIndexList", pageIndexList);

req.setAttribute("articleUrl", articleUrl);

req.setAttribute("dataCount", dataCount);

url = "/sboard/list.jsp";

forward(req, resp, url);

}

else if(uri.indexOf("article.do")!=-1){

int num = Integer.parseInt(req.getParameter("num"));

String pageNum = req.getParameter("pageNum");

String searchKey = req.getParameter("searchKey");

String searchValue = req.getParameter("searchValue");

if(searchValue!=null){

searchValue = URLDecoder.decode(searchValue,"UTF-8");

}

dao.updateHitCount(num);

BoardDTO dto = dao.getReadData(num);

if(dto==null){

url = cp + "/bbs/list.do";

resp.sendRedirect(url);

}

int lineSu = dto.getContent().split("\n").length;

dto.setContent(dto.getContent().replaceAll("\n", "<br/>"));

String param = "pageNum=" + pageNum;

if(searchValue!=null){

param += "&searchKey=" + searchKey;

param += "&searchValue=" + URLEncoder.encode(searchValue,"UTF-8");

}

req.setAttribute("dto", dto);

//넘겨주는 변수명은 param 사용 불가

//서블릿에서 이미 param을 사요하고 있기 때문

req.setAttribute("params", param);

req.setAttribute("lineSu", lineSu);

//req.setAttribute("pageNum", pageNum);

url = "/sboard/article.jsp";

forward(req, resp, url);

}

else if(uri.indexOf("updated.do")!=-1){

int num = Integer.parseInt(req.getParameter("num"));

String pageNum = req.getParameter("pageNum");

String searchKey = req.getParameter("searchKey");

String searchValue = req.getParameter("searchValue");

if(searchValue!=null){

searchValue = URLDecoder.decode(searchValue,"UTF-8");

}

BoardDTO dto = dao.getReadData(num);

if(dto==null){

url = cp + "/bbs/list.do";

resp.sendRedirect(url);

}

String param = "pageNum=" + pageNum;

if(searchValue!=null){

param += "&searchKey=" + searchKey;

param += "&searchValue=" + URLEncoder.encode(searchValue,"UTF-8");

}

req.setAttribute("dto", dto);

req.setAttribute("params", param);

url = "/sboard/updated.jsp";

forward(req, resp, url);

}

else if(uri.indexOf("updated_ok.do")!=-1){

String pageNum = req.getParameter("pageNum");

String params = req.getParameter("params");

BoardDTO dto = new BoardDTO();

dto.setNum(Integer.parseInt(req.getParameter("num")));

dto.setSubject(req.getParameter("subject"));

dto.setName(req.getParameter("name"));

dto.setEmail(req.getParameter("email"));

dto.setPwd(req.getParameter("pwd"));

dto.setContent(req.getParameter("content"));

dao.updateData(dto);

url = cp + "/bbs/list.do?" +params;

resp.sendRedirect(url);

}

else if(uri.indexOf("deleted_ok.do")!=-1){

int num = Integer.parseInt(req.getParameter("num"));

String pageNum = req.getParameter("pageNum");

String searchKey = req.getParameter("searchKey");

String searchValue = req.getParameter("searchValue");

if(searchValue!=null){

searchValue = URLDecoder.decode(searchValue,"UTF-8");

}

dao.deleteData(num);

String param = "pageNum=" + pageNum;

if(searchValue!=null){

param += "&searchKey=" + searchKey;

param += "&searchValue=" + URLEncoder.encode(searchValue,"UTF-8");

}

url = cp + "/bbs/list.do?" +param;

resp.sendRedirect(url);

}

}

}


② list.jsp

<%@ page contentType="text/html; charset=UTF-8"%>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<%

request.setCharacterEncoding("UTF-8");

String cp = request.getContextPath();

%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>게 시 판(Servlet)</title>

<link rel="stylesheet" href="<%=cp %>/sboard/css/style.css" type="text/css" />

<link rel="stylesheet" href="<%=cp %>/sboard/css/list.css" type="text/css" />

<script type="text/javascript">

function sendIt() {

var f = document.searchForm;

f.action = "<%=cp%>/bbs/list.do"

f.submit();

}

</script>

</head>

<body>

<div id="bbsList">

<div id="bbsList_title">

게 시 판(Servlet)

</div>

<div id="bbsList_header">

<div id="leftHeader">

<form action="" name="searchForm" method="post">

<select name="searchKey" class="selectField">

<option value="subject">제목</option>

<option value="name">작성자</option>

<option value="content">내용</option>

</select>

<input type="text" name="searchValue" class="textField"/>

<input type="button" value="검  색" class="btn2" onclick="sendIt();"/>

</form>

</div>

<div id="rightHeader">

<input type="button" value=" 글올리기 " class="btn2" onclick="javascript:location.href='<%=cp%>/bbs/created.do';" "/>

</div>

</div>

<div id="bbsList_list">

<div id="title">

<dl>

<dt class="num">번호</dt>

<dt class="subject">제목</dt>

<dt class="name">작성자</dt>

<dt class="created">작성일</dt>

<dt class="hitCount">조회수</dt>

</dl>

</div>

<div id="lists">

<c:forEach var="dto" items="${lists }">

<dl>

<dd class="num">${dto.num }</dd>

<dd class="subject">

<a href="${articleUrl}&num=${dto.num}">${dto.subject }</a>

</dd>

<dd class="name">${dto.name }</dd>

<dd class="created">${dto.created }</dd>

<dd class="hitCount">${dto.hitCount }</dd>

</dl>

</c:forEach>

</div>

<div id="footer">

<p>

<c:if test="${dataCount!=0 }">

${pageIndexList }

</c:if>

<c:if test="${dataCount==0 }">

등록된 게시물이 없습니다.

</c:if>

</p>

</div>

</div>

</div>

</body>

</html>


③ article.jsp

<%@ page contentType="text/html; charset=UTF-8"%>

<%

request.setCharacterEncoding("UTF-8");

String cp = request.getContextPath();

%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>게 시 판(Servlet)</title>

<link rel="stylesheet" href="<%=cp %>/sboard/css/style.css" type="text/css" />

<link rel="stylesheet" href="<%=cp %>/sboard/css/article.css" type="text/css" />

</head>

<body>

<div id="bbs">

<div id="bbs_title">

게 시 판(Servlet)

</div>

<div id="bbsArticle">

<div id="bbsArticle_header">

${dto.subject }

</div>

<div class="bbsArticle_bottomLine">

<dl>

<dt>작성자</dt>

<dd>${dto.name }</dd>

<dt>줄수</dt>

<dd>${lineSu }</dd>

</dl>

</div>

<div class="bbsArticle_bottomLine">

<dl>

<dt>등록일</dt>

<dd>${dto.created }</dd>

<dt>조회수</dt>

<dd>${dto.hitCount }</dd>

</dl>

</div>

<div id="bbsArticle_content">

<table width="600" border="0">

<tr>

<td style="padding: 20px 80px 20px 62px;" valign="top" height="200">

${dto.content }

</td>

</tr>

</table>

</div>

</div>

<div class="bbsArticle_noLine" style="text-align: right;">

from ${dto.ipAddr }

</div>

<div id="bbsArticle_footer">

<div id="leftFooter">

<input type="button" value=" 수정 " class="btn2"

onclick="javascript:location.href='<%=cp %>/bbs/updated.do?num=${dto.num }&${params }';" />

<input type="button" value=" 삭제 " class="btn2"

onclick="javascript:location.href='<%=cp %>/bbs/deleted_ok.do?num=${dto.num}&${params }';" />

</div>

<div id="rightFooter">

<input type="button" value=" 리스트 " class="btn2"

onclick="javascript:location.href='<%=cp %>/bbs/list.do?${params }';" />

</div>

</div>

</div>

</body>

</html>


④ created.jsp

<%@ page contentType="text/html; charset=UTF-8"%>

<%

request.setCharacterEncoding("UTF-8");

String cp = request.getContextPath();

%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>게 시 판(Servlet)</title>

<link rel="stylesheet" href="<%=cp %>/sboard/css/style.css" type="text/css" />

<link rel="stylesheet" href="<%=cp %>/sboard/css/created.css" type="text/css" />

<script type="text/javascript" src="<%=cp %>/sboard/js/util.js"></script>

<script type="text/javascript" >

function sendIt(){

f = document.myForm;

str = f.subject.value;

str = str.trim();//util.js에 있는 trim함수 호출

if(!str){

alert("\n제목을 입력하세요.");//공백제거후 내용이 없으면

f.subject.focus();

return;

}

f.subject.value = str;

str = f.name.value;

str = str.trim();

if(!str){

alert("\n이름을 입력하세요.");

f.name.focus();

return;

}

f.name.value = str;

/*

//이름 한글검사

if(!isValidKorean(str)){

alert("\n이름을 정확히 입력하세요.");

f.name.focus();

return;

}

*/

if(f.email.value){

if(!isValidEmail(f.email.value)){

alert("\n정상적인 E-mail을 입력하세요");

f.email.focus();

return;

}

}

str = f.content.value;

str = str.trim();

if(!str){

alert("\n내용을 입력하세요.");

f.content.focus();

return;

}

f.content.value = str;

str = f.pwd.value;

str = str.trim();

if(!str){

alert("\n패스워드를 입력하세요.");

f.pwd.focus();

return;

}

f.pwd.value = str;

f.action = "<%=cp %>/bbs/created_ok.do";

f.submit();

}

</script>

</head>

<body>

<div id="bbs" >

<div id="bbs_title">

게 시 판(Servlet)

</div>

<form action="" name="myForm" method="post">

<div id="bbsCreated">

<div class="bbsCreated_bottomLine">

<dl>

<dt>제&nbsp;&nbsp;&nbsp;&nbsp;목</dt>

<dd>

<input type="text" name="subject" size="74" maxlength="100" class="boxTF"/>

</dd>

</dl>

</div>

<div class="bbsCreated_bottomLine">

<dl>

<dt>작성자</dt>

<dd>

<input type="text" name="name" size="35" maxlength="20" class="boxTF"/>

</dd>

</dl>

</div>

<div class="bbsCreated_bottomLine">

<dl>

<dt>E-Mail</dt>

<dd>

<input type="text" name="email" size="35" maxlength="50" class="boxTF"/>

</dd>

</dl>

</div>

<div id="bbsCreated_content">

<dl>

<dt>내&nbsp;&nbsp;&nbsp;&nbsp;용</dt>

<dd>

<textarea rows="12" cols="63" name="content" class="boxTA"></textarea>

</dd>

</dl>

</div>

<div class="bbsCreated_noLine">

<dl>

<dt>패스워드</dt>

<dd>

<input type="password" name="pwd" size="35" maxlength="7" class="boxTF"/>

&nbsp;(게시물 수정 및 삭제시 필요)

</dd>

</dl>

</div>

</div>

<div id="bbsCreated_footer">

<input type="button" value="등록하기" class="btn2" onclick="sendIt()" />

<input type="reset" value="다시입력" class="btn2" onclick="document.myForm.subject.focus()" />

<input type="button" value="작성취소" class="btn2" onclick="javascript:location.href='<%=cp%>/bbs/list.do';" />

</div>

</form>

</div>

</body>

</html>


⑤ updated.jsp

<%@ page contentType="text/html; charset=UTF-8"%>

<%

request.setCharacterEncoding("UTF-8");

String cp = request.getContextPath();

%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>게 시 판(Servlet)</title>

<link rel="stylesheet" href="<%=cp %>/sboard/css/style.css" type="text/css" />

<link rel="stylesheet" href="<%=cp %>/sboard/css/created.css" type="text/css" />

<script type="text/javascript" src="<%=cp %>/sboard/js/util.js"></script>

<script type="text/javascript" >

function sendIt(){

f = document.myForm;

str = f.subject.value;

str = str.trim();//util.js에 있는 trim함수 호출

if(!str){

alert("\n제목을 입력하세요.");//공백제거후 내용이 없으면

f.subject.focus();

return;

}

f.subject.value = str;

str = f.name.value;

str = str.trim();

if(!str){

alert("\n이름을 입력하세요.");

f.name.focus();

return;

}

f.name.value = str;

/*

//이름 한글검사

if(!isValidKorean(str)){

alert("\n이름을 정확히 입력하세요.");

f.name.focus();

return;

}

*/

if(f.email.value){

if(!isValidEmail(f.email.value)){

alert("\n정상적인 E-mail을 입력하세요");

f.email.focus();

return;

}

}

str = f.content.value;

str = str.trim();

if(!str){

alert("\n내용을 입력하세요.");

f.content.focus();

return;

}

f.content.value = str;

str = f.pwd.value;

str = str.trim();

if(!str){

alert("\n패스워드를 입력하세요.");

f.pwd.focus();

return;

}

f.pwd.value = str;

f.action = "<%=cp %>/bbs/updated_ok.do";

f.submit();

}

</script>

</head>

<body>

<div id="bbs" >

<div id="bbs_title">

게 시 판(Servlet)

</div>

<form action="" name="myForm" method="post">

<div id="bbsCreated">

<div class="bbsCreated_bottomLine">

<dl>

<dt>제&nbsp;&nbsp;&nbsp;&nbsp;목</dt>

<dd>

<input type="text" name="subject" size="74" value="${dto.subject }" maxlength="100" class="boxTF"/>

</dd>

</dl>

</div>

<div class="bbsCreated_bottomLine">

<dl>

<dt>작성자</dt>

<dd>

<input type="text" name="name" size="35" value="${dto.name }" maxlength="20" class="boxTF"/>

</dd>

</dl>

</div>

<div class="bbsCreated_bottomLine">

<dl>

<dt>E-Mail</dt>

<dd>

<input type="text" name="email" value="${dto.email }" size="35" maxlength="50" class="boxTF"/>

</dd>

</dl>

</div>

<div id="bbsCreated_content">

<dl>

<dt>내&nbsp;&nbsp;&nbsp;&nbsp;용</dt>

<dd>

<textarea rows="12" cols="63" name="content" class="boxTA">${dto.content }</textarea>

</dd>

</dl>

</div>

<div class="bbsCreated_noLine">

<dl>

<dt>패스워드</dt>

<dd>

<input type="password" name="pwd" size="35" value="${dto.pwd }" maxlength="7" class="boxTF"/>

&nbsp;(게시물 수정 및 삭제시 필요)

</dd>

</dl>

</div>

</div>

<div id="bbsCreated_footer">

<input type="hidden" name="num" value="${dto.num }">

<input type="hidden" name="pageNum" value="${pageNum }">

<input type="hidden" name="params" value="${params }">

<input type="button" value="수정하기" class="btn2" onclick="sendIt()" />

<input type="button" value="수정취소" class="btn2" onclick="javascript:location.href='<%=cp%>/bbs/list.do?${params }';" />

</div>

</form>

</div>

</body>

</html>