Implementations

Sign Up

/bbs/signUp_proc.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="net.java_school.user.*" %>    

request.setCharacterEncoding("UTF-8");

String email = request.getParameter("email");
String passwd = request.getParameter("passwd");
String name = request.getParameter("name");
String mobile = request.getParameter("mobile");

User user = new User(email, passwd, name, mobile);

UserService service = new UserService();
service.addUser(user);

response.sendRedirect("welcome.jsp");
%>

Visit http://localhost:8080/users/signUp.jsp.
If you see the welcome page, connect to SQL*PLUS and check that there is data in the member table.
If you do not see the welcome page, check the log messages in the WEB-INF/debug.log file.
For Linux systems, you need to set permissions like chmod o+w debug.log.
Log messages are also written to files in the CATALINA_HOME/logs directory.
If the test succeeds, remove all the text field values in SignUp.jsp.

login_proc.jsp

/users/login_proc.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="net.java_school.user.User" %>
<%@ page import="net.java_school.user.UserService" %>
<%
request.setCharacterEncoding("UTF-8");

String url = request.getParameter("url");
String email = request.getParameter("email");
String passwd = request.getParameter("passwd");

UserService service = new UserService();
User user = service.login(email, passwd);

if (user == null) {
    //if login failed, redirect to login.jsp
    response.sendRedirect("login.jsp?url=" + url + "&msg=Login-Failed");
} else {
    session.setAttribute("user", user);
    if (url != null && !url.equals("")) {
        response.sendRedirect(url);
    } else {
        response.sendRedirect("../bbs/list.jsp?boardCd=smalltalk&curPage=1");
    }
}
%>

Add the following code snippet to the login page.

login.jsp
<h2>Login</h2>
<%
String msg = request.getParameter("msg");

if (msg != null) {
%>
    <p style="color: red;">Login Failed!</p>
<%
}
%>

Create a class to store the strings used in the project.

WebContants.java
package net.java_school.commons;

public class WebContants {
    //Session key
    public final static String USER_KEY = "user";
}

"user" is the key value of the User object to put in the session. Open login_proc.jsp and change "user" to WebContants.USER_KEY.

Modify Account

Add the following string to WebContants.java.

public final static String NOT_LOGIN = "Not Login";
/users/editAccount_proc.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="net.java_school.user.User" %>
<%@ page import="net.java_school.user.UserService" %>
<%@ page import="net.java_school.commons.WebContants" %>
<%

User user = (User) session.getAttribute(WebContants.USER_KEY);
if (user == null) {
    response.sendError(HttpServletResponse.SC_FORBIDDEN, WebContants.NOT_LOGIN);
    return;
}

request.setCharacterEncoding("UTF-8");

String name = request.getParameter("name");
String mobile = request.getParameter("mobile");
String passwd = request.getParameter("passwd");

String email = user.getEmail();

UserService service = new UserService();

user = service.login(email, passwd);

if (user == null) {
    response.sendError(HttpServletResponse.SC_FORBIDDEN, WebContants.AUTHENTICATION_FAILED);
    session.removeAttribute(WebContants.USER_KEY);
    return;
}

user = new User(email, passwd, name, mobile);

service.editAccount(user);
session.setAttribute(WebContants.USER_KEY, user);

response.sendRedirect("changePasswd.jsp");
%>

Change Password

/users/changePasswd_proc.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="net.java_school.user.User" %>
<%@ page import="net.java_school.user.UserService" %>
<%@ page import="net.java_school.commons.WebContants" %>
<%

User user = (User) session.getAttribute(WebContants.USER_KEY);
if (user == null) {
    response.sendError(HttpServletResponse.SC_FORBIDDEN, WebContants.NOT_LOGIN);
    return; 
}

String currentPasswd = request.getParameter("currentPasswd");
String newPasswd = request.getParameter("newPasswd");
String email = user.getEmail();

UserService service = new UserService();
int check = service.changePasswd(currentPasswd, newPasswd, email);
if (check < 1) {
    response.sendError(HttpServletResponse.SC_FORBIDDEN, WebContants.AUTHENTICATION_FAILED);
    return; 
}

response.sendRedirect("changePasswd_confirm.jsp");
%>

Reomve Account

Add the following string to the WebContants.java.

public final static String AUTHENTICATION_FAILED = "Authentication Failed";
/users/bye_proc.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="net.java_school.user.User" %>
<%@ page import="net.java_school.user.UserService" %>
<%@ page import="net.java_school.commons.WebContants" %>
<%

User user = (User) session.getAttribute(WebContants.USER_KEY);
if (user == null) {
    response.sendError(HttpServletResponse.SC_FORBIDDEN, WebContants.NOT_LOGIN); 
    return;
}

String email = request.getParameter("email");
String passwd = request.getParameter("passwd");

UserService service = new UserService();
User check = service.login(email, passwd);
if (check == null) {
    response.sendError(HttpServletResponse.SC_FORBIDDEN, WebContants.AUTHENTICATION_FAILED); 
    return;
}

service.bye(user.getEmail(), passwd);
session.removeAttribute(WebContants.USER_KEY);

response.sendRedirect("bye_confirm.jsp");
%>

Board List

Create the data to be displayed in the list page.

/bbs/list.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="net.java_school.board.*" %>
<%@ page import="net.java_school.commons.NumbersForPaging" %>
<%@ page import="java.util.ArrayList" %>
<%@ include file="../inc/loginCheck.jsp" %>
<%
request.setCharacterEncoding("UTF-8");

String boardCd = request.getParameter("boardCd");
int curPage = Integer.parseInt(request.getParameter("curPage"));
String searchWord = request.getParameter("searchWord");
if (searchWord == null) searchWord = "";
BoardService service = new BoardService();

int totalRecord = service.getTotalRecord(boardCd, searchWord);
int numPerPage = 10;
int pagePerBlock = 10;
int startRecord = (curPage - 1) * numPerPage;
int endRecord = curPage * numPerPage;
List<Article> articleList = service.getArticleList(boardCd, searchWord, startRecord, endRecord);
String boardName = service.getBoardName(boardCd);
NumbersForPaing numbers = service.getNumbersForPaging(totalRecord, curPage, numPerPage, pagePerBlock);
%>

Modify the part of list.jsp that shows the board name as follows.

<h1><%=boardName %></h1>

Modify the search form part as shown below.

<form action="list.jsp" method="get">
    <input type="hidden" name="curPage" value="1" />
    <input type="hidden" name="boardCd" value="<%=boardCd %>" />
    <div id="search">
        <input type="text" name="searchWord" size="15" maxlength="30" />
        <input type="submit" value="Search" />
    </div>
</form>

Modify the value of the input element attribute in the #form-group as shown below.

<div id="form-group" style="display: none">
    <form id="listForm" action="list.jsp" method="get">
    <p>
        <input type="hidden" name="boardCd" value="<%=boardCd %>" />
        <input type="hidden" name="curPage" />
        <input type="hidden" name="searchWord" value="<%=searchWord %>" />
    </p>
    </form>
    <form id="viewForm" action="view.jsp" method="get">
    <p>
        <input type="hidden" name="articleNo" />
        <input type="hidden" name="boardCd" value="<%=boardCd %>" />
        <input type="hidden" name="curPage" value="<%=curPage %>" />
        <input type="hidden" name="searchWord" value="<%=searchWord %>" />
    </p>
    </form>
    <form id="writeForm" action="write_form.jsp" method="get">
    <p>
        <input type="hidden" name="boardCd" value="<%=boardCd %>" />
        <input type="hidden" name="curPage" value="<%=curPage %>" />
        <input type="hidden" name="searchWord" value="<%=searchWord %>" />
    </p>
    </form>
</div>

Implement paging processing logic as follows.

<%
int listItemNo = numbers.getListItemNo();
int size = articleList.size();
for (int i = 0; i < size; i++) {
    Article article = articleList.get(i);
    int articleNo = article.getArticleNo();
    String title = article.getTitle();
    java.util.Date regdate = article.getRegdate();
    int attachFileNum = article.getAttachFileNum();
    int commentNum = article.getCommentNum();
    int hit = article.getHit();
%>           
    <tr>
        <td style="text-align: center;"><%=listItemNo %></td>
        <td>
            <a href="javascript:goView('<%=articleNo %>')"><%=title %></a>
            <% if (attachFileNum > 0) { %><img src="images/attach.png" alt="첨부 파일" style="vertical-align: middle;" /><% } %>
            <% if (commentNum > 0) { %><span class="bbs-strong">[<%=commentNum %>]</span><% } %>
        </td>
        <td style="text-align: center;"><%=regdate %></td>
        <td style="text-align: center;"><%=hit %></td>
    </tr>
<%
    listItemNo--;
} // for statement end
%>           
    </table>

    <div id="paging">
<%
if (numbers.getPrevPage() != 0) {
%>
        <a href="javascript:goList('<%=numbers.getPrevPage() %>')">[Prev]</a>
<%
} // if statement end

int firstPage = numbers.getFirstPage();
int lastPage = numbers.getLastPage();
for (int i = firstPage; i <= lastPage; i++) {
    if (curPage == i) {
%>
        <span class="bbs-strong"><%=i %></span>       
<%
    } else {
%>   
        <a href="javascript:goList('<%=i %>')"><%=i %></a>      
<%
    }
}// for statement end

// [Next]
if (numbers.getNextPage() != 0) {
%>
    <a href="javascript:goList('<%=numbers.getNextPage() %>')">[Next]</a>
<%
}// if statement end
%>
    </div>

New Article form page

/bbs/write_form.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" %>
<%@ page import="net.java_school.board.*" %>
<%@ page import="java.util.*" %>
<%@ include file="../inc/loginCheck.jsp" %>
<%
request.setCharacterEncoding("UTF-8");

String articleNo = request.getParameter("articleNo");
String boardCd = request.getParameter("boardCd");
String curPage = request.getParameter("curPage");
String searchWord = request.getParameter("searchWord");

BoardService service = new BoardService();
String boardName = service.getBoardName(boardCd);
%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8" />
<meta name="Keywords" content="New Article form page" />
<meta name="Description" content="New Article form page" />
<title><%=boardName %></title>
<link rel="stylesheet" href="/css/screen.css" type="text/css" />
<script type="text/javascript">
function goList() {
    var form = document.getElementById("listForm");
    form.submit();
}
function goView() {
    var form = document.getElementById("viewForm");
    form.submit();
}
</script>           
</head>
<body>

<div id="wrap">

    <div id="header">
        <%@ include file="../inc/header.jsp" %>
    </div>

    <div id="main-menu">
        <%@ include file="../inc/main-menu.jsp" %>
    </div>

    <div id="container">
        <div id="content">
        
<div id="content-categories"><%=boardName %></div>
<h3>New Article</h3>
<form id="writeForm" action="write_proc.jsp" method="post" enctype="multipart/form-data">
<input type="hidden" name="boardCd" value="<%=boardCd %>" />
<table id="write-form" class="bbs-table">
<tr>
    <td>Title</td>
    <td><input type="text" name="title" style="width: 90%;" /></td>
</tr>
<tr>
    <td colspan="2">
        <textarea name="content" rows="17" cols="50"></textarea>
    </td>
</tr>
<tr>
    <td>Attach File</td>
    <td><input type="file" name="attachFile" /></td>
</tr>
</table>
<div style="text-align: center;padding-bottom: 15px;">
    <input type="submit" value="Submit" />
    <input type="button" value="List" onclick="goList()" />
<% 
if (articleNo != null) {
%>   
    <input type="button" value="Detailed view" onclick="goView()" />
<%
} //if statement end
%>  
</div>
</form>

        </div>
    </div>
    
    <div id="sidebar">
        <%@ include file="bbs-sub.jsp" %>
    </div>
    
    <div id="extra">
        <%@ include file="../inc/extra.jsp" %>
    </div>

    <div id="footer">
        <%@ include file="../inc/footer.jsp" %>
    </div>

</div>

<div id="form-group" style="display: none">
    <form id="viewForm" action="view.jsp" method="get">
        <input type="hidden" name="articleNo" value="<%=articleNo %>" />
        <input type="hidden" name="boardCd" value="<%=boardCd %>" />
        <input type="hidden" name="curPage" value="<%=curPage %>" />
        <input type="hidden" name="searchWord" value="<%=searchWord %>" />
    </form>
    <form id="listForm" action="list.jsp" method="get">
        <input type="hidden" name="boardCd" value="<%=boardCd %>" />
        <input type="hidden" name="curPage" value="<%=curPage %>" />
        <input type="hidden" name="searchWord" value="<%=searchWord %>" />
    </form>
</div>

</body>
</html>

write_proc.jsp

Download http://www.servlets.com/cos/cos-26Dec2008.zip and unzip it.
Copy cos.jar to WEB-INF/lib of your web application.
Create an upload folder on the document base.
If you have a Unix system, you need to set permissions on the upload folder.

/bbs/write_proc.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" %>
<%@ page import="java.io.*" %>
<%@ page import="net.java_school.commons.WebContants" %>
<%@ page import="net.java_school.user.User" %>
<%@ page import="net.java_school.user.UserService" %>
<%@ page import="net.java_school.board.*" %>
<%@ page import="com.oreilly.servlet.MultipartRequest" %>
<%@ page import="com.oreilly.servlet.multipart.DefaultFileRenamePolicy" %>
<%

User user = (User) session.getAttribute(WebContants.USER_KEY);
if (user == null) {
    response.sendError(HttpServletResponse.SC_FORBIDDEN, WebContants.NOT_LOGIN);
    return;
}

String dir = application.getRealPath("/upload");

MultipartRequest multi = new MultipartRequest(
        request,
        dir,
        5*1024*1024,
        "UTF-8",
        new DefaultFileRenamePolicy());

String title = multi.getParameter("title");
String content = multi.getParameter("content");
String filename = multi.getFilesystemName("attachFile");
String filetype = multi.getContentType("attachFile");

File f = multi.getFile("attachFile");
long filesize = 0L;
AttachFile attachFile = null;

if (f != null) {
    filesize = f.length();
    attachFile = new AttachFile();
    attachFile.setFilename(filename);
    attachFile.setFiletype(filetype);
    attachFile.setFilesize(filesize);
    attachFile.setEmail(user.getEmail());
}

String boardCd = multi.getParameter("boardCd");

Article article = new Article();
article.setEmail(user.getEmail());
article.setTitle(title);
article.setContent(content);
article.setBoardCd(boardCd);

BoardService service = new BoardService();
service.addArticle(article, attachFile);

response.sendRedirect("list.jsp?boardCd=" + boardCd + "&curPage=1");
%>

view.jsp

/bbs/view.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.util.*" %>
<%@ page import="net.java_school.user.*" %>
<%@ page import="net.java_school.board.*" %>
<%@ page import="net.java_school.commons.*" %>
<%@ include file="../inc/loginCheck.jsp" %>
<%
request.setCharacterEncoding("UTF-8");

int articleNo = Integer.parseInt(request.getParameter("articleNo"));
String boardCd = request.getParameter("boardCd");
int curPage = Integer.parseInt(request.getParameter("curPage"));
String searchWord = request.getParameter("searchWord");
if (searchWord == null) searchWord = "";

BoardService service = new BoardService();

int totalRecord = service.getTotalRecord(boardCd, searchWord);
int numPerPage = 10;
int pagePerBlock = 10;
int startRecord = (curPage - 1) * numPerPage + 1;
int endRecord = curPage * numPerPage;

service.increaseHit(articleNo);

Article detailedArticle = service.getArticle(articleNo);
List<AttachFile> attachFileList = service.getAttachFileList(articleNo);
Article nextArticle = service.getNextArticle(articleNo, boardCd, searchWord);
Article prevArticle = service.getPrevArticle(articleNo, boardCd, searchWord);
List<Article> articleList = service.getArticleList(boardCd, searchWord, startRecord, endRecord); 
List<Comment> commentList = service.getCommentList(articleNo);

String boardName = service.getBoardName(boardCd);

String articleOwnerName = detailedArticle.getName();
%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8" />
<meta name="Keywords" content="Detailed view page" />
<meta name="Description" content="Detailed view page" />
<title><%=boardName %></title>
<link rel="stylesheet" href="/css/screen.css" type="text/css" />
<script type="text/javascript">
function modifyCommentToggle(articleNo) {
    var p_id = "comment" + articleNo;
    var form_id = "modifyCommentForm" + no;
    var p = document.getElementById(p_id);
    var form = document.getElementById(form_id);
    
    var p_display;
    var form_display;
    
    if (p.style.display) {
            p_display = '';
            form_display = 'none';
    } else {
            p_display = 'none';
            form_display = '';
    }
    
    p.style.display = p_display;
    form.style.display = form_display;
}
function goList(curPage) {
    var form = document.getElementById("listForm");
    form.curPage.value = curPage;
    form.submit();
}
function goView(articleNo) {
    var form = document.getElementById("viewForm");
    form.articleNo.value = articleNo;
    form.submit();
}
function goWrite() {
    var form = document.getElementById("writeForm");
    form.submit();
}
function goModify() {
    var form = document.getElementById("modifyForm");
    form.submit();
}
function goDelete() {
    var check = confirm("Are you sure you want to delete it?");
    if (check) {
        var form = document.getElementById("delForm");
        form.submit();
    }
}
function deleteAttachFile(attachFileNo) {
    var check = confirm("Are you sure you want to delete it?");
    if (check) {
        var form = document.getElementById("deleteAttachFileForm");
        form.attachFileNo.value = attachFileNo;
        form.submit();
    }
}
function deleteComment(commentNo) {
    var check = confirm("Are you sure you want to delete it?");
    if (check) {
        var form = document.getElementById("deleteCommentForm");
        form.commentNo.value = commentNo;
        form.submit();
    }
}
</script>
</head>
<body>

<div id="wrap">

    <div id="header">
        <%@ include file="../inc/header.jsp" %>
    </div>

    <div id="main-menu">
        <%@ include file="../inc/main-menu.jsp" %>
    </div>

    <div id="container">
        <div id="content">
        
<div id="content-categories"><%=boardName %></div>
<div class="view-menu" style="margin-top: 15px;margin-bottom: 5px;">
    <div class="fl">
<%
if (user.getEmail().equals(detailedArticle.getEmail())) {
%>      
        <input type="button" value="Modify" onclick="goModify();" />
        <input type="button" value="Del" onclick="goDelete()" />
<%
}
%>
    </div>
    <div class="fr">
<%
if (nextArticle != null) {
%>       
        <input type="button" value="Next Article" onclick="goView('<%=nextArticle.getArticleNo() %>')" />
<%
}
if (prevArticle != null) {
%>           
        <input type="button" value="Prev Article" onclick="goView('<%=prevArticle.getArticleNo() %>')" />
<%
}
%>           
        <input type="button" value="List" onclick="goList('<%=curPage %>')" />
        <input type="button" value="New" onclick="goWrite()" />
    </div>
</div>
<table class="bbs-table">
<tr>
    <th style="width: 47px;text-align: left;vertical-align: top;font-size: 1em;">TITLE</th>
    <th style="text-align: left;color: #555;font-size: 1em;"><%=detailedArticle.getTitle() %></th>
</tr> 
</table>

<div id="detail">
    <div id="date-writer-hit">edited <%=detailedArticle.getRegdate() %> by <%=articleOwnerName %> hit <%=detailedArticle.getHit() %></div>
<%
String content = detailedArticle.getContent();
content = content.replaceAll(System.getProperty("line.separator"), "<br />");
%>
    <div id="article-content"><%=content %></div>
<%       
int size = attachFileList.size();
if (size > 0) {
%>
    <div id="file-list" style="text-align: right">
<%
    String path = request.getContextPath();
    String uploadPath = path + "/upload/";
    
    for (int i = 0; i < size; i++) {
        AttachFile attachFile = attachFileList.get(i);
        String filename = attachFile.getFilename();
        int attachFileNo = attachFile.getAttachFileNo();
        String fileFullPath = uploadPath + filename;
%>
        <div id="attach-file">		
            <a href="<%=fileFullPath %>"><%=filename %></a>
<% 
        if (user.getEmail().equals(detailedArticle.getEmail())) { 
%>
            <a href="javascript:deleteAttachFile('<%=attachFileNo %>')">x</a>
<%
        }//if statement end
%>
        </div>
<%       
    }//for statement end
%>       
    </div>
<%
}//if statement end
%>      
</div>
<!-- Add comment -->
<form id="addCommentForm" action="addComment.jsp" method="post">
     <input type="hidden" name="articleNo" value="<%=articleNo %>" />
     <input type="hidden" name="boardCd" value="<%=boardCd %>" />
     <input type="hidden" name="curPage" value="<%=curPage %>" />
     <input type="hidden" name="searchWord" value="<%=searchWord %>" />
    <div id="addComment">
        <textarea name="memo" rows="7" cols="50"></textarea>
    </div>
    <div style="text-align: right;">
        <input type="submit" value="Add comment" />
    </div>
</form>
<%
size = commentList.size();
for (int i = 0; i < size; i++ ) {
    Comment comment = commentList.get(i);
    int commentNo = comment.getCommentNo();
    String email = comment.getEmail();
    String memo = comment.getMemo();
    String commentOwnerName = comment.getName();
    Date regdate = comment.getRegdate();
%>
<div class="comments">
    <span class="writer"><%=commentOwnerName %></span>
    <span class="date"><%=regdate %></span>
<%
    if (user.getEmail().equals(email)) {
%>   
    <span class="modify-del">
        <a href="javascript:modifyCommentToggle('<%=commentNo %>')">Modify</a>
         | <a href="javascript:deleteComment('<%=commentNo %>')">Del</a>
    </span>
<%
    }//if문 끝
%>   
    <p id="comment<%=commentNo %>"><%=memo %></p>
    <form id="modifyCommentForm<%=commentNo %>" class="comment-form" action="updateComment_proc.jsp" method="post" style="display: none;">
        <input type="hidden" name="commentNo" value="<%=commentNo %>" />
        <input type="hidden" name="boardCd" value="<%=boardCd %>" />
        <input type="hidden" name="articleNo" value="<%=articleNo %>" />
        <input type="hidden" name="curPage" value="<%=curPage %>" />
        <input type="hidden" name="searchWord" value="<%=searchWord %>" />
        <div class="fr">
            <a href="javascript:document.forms.modifyCommentForm<%=commentNo %>.submit()">Submit</a>
            | <a href="javascript:goCommentModify('<%=commentNo %>')">Cancel</a>
        </div>
        <div>
            <textarea class="comment-textarea" name="memo" rows="7" cols="50"><%=memo %></textarea>
        </div>
    </form>
</div>
<%
}//for statement end
%>

<div id="next-prev">
<%
if (nextArticle != null) {
%>
    <p>Next Article : <a href="javascript:goView('<%=nextArticle.getArticleNo() %>')"><%=nextArticle.getTitle() %></a></p>
<%
} 
if (prevArticle != null) {
%>       
    <p>Prev Article : <a href="javascript:goView('<%=prevArticle.getArticleNo() %>')"><%=prevArticle.getTitle() %></a></p>
<%
}
%>       
</div>
<div class="view-menu" style="margin-bottom: 47px;">
    <div class="fl">
<%
if (user.getEmail().equals(detailedArticle.getEmail())) {
%>      
        <input type="button" value="Modify" onclick="goModify();" />
        <input type="button" value="Del" onclick="goDelete()" />
<%
}
%>
    </div>
        
    <div class="fr">
<%
if (nextArticle != null) {
%>       
        <input type="button" value="Next Article" onclick="goView('<%=nextArticle.getArticleNo() %>')" />
<%
}
if (prevArticle != null) {
%>           
        <input type="button" value="Prev Article" onclick="goView('<%=prevArticle.getArticleNo() %>')" />
<%
}
%>           
        <input type="button" value="List" onclick="goList('<%=curPage %>')" />
        <input type="button" value="New" onclick="goWrite()" />
    </div>
</div>
    
<!-- List -->
<table>
<tr>
    <th style="width: 60px">NO</th>
    <th>TITLE</th>
    <th style="width: 84px;">DATE</th>
    <th style="width: 60px;">HIT</th>
</tr>
<%
int listItemNo = service.getListItemNo();
size = articleList.size();
for (int i = 0; i < size; i++) {
    Article article = articleList.get(i);
    int aNo = article.getArticleNo();
    String title = article.getTitle();
    Date regdate = article.getRegdate();
    int hit = article.getHit();
    int attachFileNum = article.getAttachFileNum();
    int commentNum = article.getCommentNum();
%>  
<tr>
    <td style="text-align: center;">
<%
if (articleNo == aNo) {
%>
    <img src="../images/arrow.gif" alt="You are reading this" />
<%
} else {
%>
    <%=listItemNo %>
<%
}
%>
    </td>
    <td>
        <a href="javascript:goView('<%=aNo %>')"><%=title %></a>
<%
if (attachFileNum > 0) { 
%>
        <img src="../images/attach.png" alt="Attach File" style="vertical-align: middle;" />
<%
}
if (commentNum > 0 ) {
%>           
        <span class="bbs-strong">[<%=commentNum %>]</span>
<%
}
%>          
    </td>
    <td style="text-align: center;"><%=regdate %></td>
    <td style="text-align: center;"><%=hit %></td>
</tr>
<%
    listItemNo--;
}//for statement end
%>

</table>

<div id="paging">
<%
if (service.getPrevPage() != 0 ) {
%>
    <a href="javascript:goList('<%=service.getPrevPage() %>')">[Prev]</a>
<%
}
int firstPage = service.getFirstPage();
int lastPage = service.getLastPage();

for (int i = firstPage; i <= lastPage; i++) {
    if (curPage == i) {
%>
    <span class="bbs-strong"><%=i %></span>
<%
    } else {
%>   
    <a href="javascript:goList('<%=i %>')"><%=i %></a>        
<%
    }
}//for statement end

if (service.getNextPage() != 0) {
%>
    <a href="javascript:goList('<%=service.getNextPage() %>')">[Next]</a>
<%
}
%>
</div>

<div id="list-menu">
    <input type="button" value="New" onclick="goWrite()" />
</div>

<form action="list.jsp" method="get">
<input type="hidden" name="curPage" value="1" />
<input type="hidden" name="boardCd" value="<%=boardCd %>" />
<div id="search">
    <input type="text" name="searchWord" size="15" maxlength="30" />
    <input type="submit" value="Search" />
</div>
</form>

        </div><!-- content end -->
    </div><!--  container end -->
    
    <div id="sidebar">
        <%@ include file="bbs-sub.jsp" %>
    </div>
    
    <div id="extra">
        <%@ include file="../inc/extra.jsp" %>
    </div>

    <div id="footer">
        <%@ include file="../inc/footer.jsp" %>
    </div>

</div>

<div id="form-group" style="display: none">
    <form id="listForm" action="list.jsp" method="get">
        <input type="hidden" name="boardCd" value="<%=boardCd %>" />
        <input type="hidden" name="curPage" />
        <input type="hidden" name="searchWord" value="<%=searchWord %>" />
    </form>
    <form id="viewForm" action="view.jsp" method="get">
        <input type="hidden" name="articleNo" />
        <input type="hidden" name="boardCd" value="<%=boardCd %>" />
        <input type="hidden" name="curPage" value="<%=curPage %>" />
        <input type="hidden" name="searchWord" value="<%=searchWord %>" />
    </form>
    <form id="writeForm" action="write_form.jsp" method="get">
        <input type="hidden" name="articleNo" value="<%=articleNo %>" />
        <input type="hidden" name="boardCd" value="<%=boardCd %>" />
        <input type="hidden" name="curPage" value="<%=curPage %>" />
        <input type="hidden" name="searchWord" value="<%=searchWord %>" />
    </form>
    <form id="modifyForm" action="modify_form.jsp" method="get">
        <input type="hidden" name="articleNo" value="<%=articleNo %>" />
        <input type="hidden" name="boardCd" value="<%=boardCd %>" />
        <input type="hidden" name="curPage" value="<%=curPage %>" />
        <input type="hidden" name="searchWord" value="<%=searchWord %>" />
    </form>
    <form id="delForm" action="del_proc.jsp" method="post">
        <input type="hidden" name="articleNo" value="<%=articleNo %>" />
        <input type="hidden" name="boardCd" value="<%=boardCd %>" />
        <input type="hidden" name="curPage" value="<%=curPage %>" />
        <input type="hidden" name="searchWord" value="<%=searchWord %>" />
    </form>
    <form id="deleteCommentForm" action="deleteComment_proc.jsp" method="post">
        <input type="hidden" name="commentNo" />
        <input type="hidden" name="articleNo" value="<%=articleNo %>" />
        <input type="hidden" name="boardCd" value="<%=boardCd %>" />
        <input type="hidden" name="curPage" value="<%=curPage %>" />
        <input type="hidden" name="searchWord" value="<%=searchWord %>" />
    </form>   
    <form id="deleteAttachFileForm" action="deleteAttachFile.jsp" method="post">
        <input type="hidden" name="attachFileNo" />
        <input type="hidden" name="articleNo" value="<%=articleNo %>" />
        <input type="hidden" name="boardCd" value="<%=boardCd %>" />
        <input type="hidden" name="curPage" value="<%=curPage %>" />
        <input type="hidden" name="searchWord" value="<%=searchWord %>" />
    </form>   
</div>

</body>
</html>

addComment_proc.jsp

/bbs/addComment_proc.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="net.java_school.commons.WebContants" %>
<%@ page import="net.java_school.user.User" %>
<%@ page import="net.java_school.board.*" %>
<%

User user = (User) session.getAttribute(WebContants.USER_KEY);
if (user == null) {
    response.sendError(HttpServletResponse.SC_FORBIDDEN, WebContants.NOT_LOGIN);
    return;
}
request.setCharacterEncoding("UTF-8");

String boardCd = request.getParameter("boardCd");
int articleNo = Integer.parseInt(request.getParameter("articleNo"));
int curPage = Integer.parseInt(request.getParameter("curPage"));
String searchWord = request.getParameter("searchWord");
String memo = request.getParameter("memo");

Comment comment = new Comment();
comment.setArticleNo(articleNo);
comment.setEmail(user.getEmail());
comment.setMemo(memo);

BoardService service = new BoardService();
service.addComment(comment);

searchWord = java.net.URLEncoder.encode(searchWord, "UTF-8");
response.sendRedirect("view.jsp?articleNo=" + articleNo + "&boardCd=" + boardCd + "&curPage=" + curPage + "&searchWord=" + searchWord);
%>

updateComment_proc.jsp

/bbs/updateComment_proc.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="net.java_school.commons.WebContants" %>
<%@ page import="net.java_school.user.User" %>
<%@ page import="net.java_school.board.*" %>
<%

User user = (User) session.getAttribute(WebContants.USER_KEY);

request.setCharacterEncoding("UTF-8");
int commentNo = Integer.parseInt(request.getParameter("commentNo"));

BoardService service = new BoardService();
Comment comment = service.getComment(commentNo);
if (user == null || !user.getEmail().equals(comment.getEmail())) {
    response.sendError(HttpServletResponse.SC_FORBIDDEN, WebContants.AUTHENTICATION_FAILED);
    return; 
}

String boardCd = request.getParameter("boardCd");
int articleNo = Integer.parseInt(request.getParameter("articleNo"));
int curPage = Integer.parseInt(request.getParameter("curPage"));
String searchWord = request.getParameter("searchWord");

String memo = request.getParameter("memo");

comment.setCommentNo(commentNo);
comment.setArticleNo(articleNo);
comment.setEmail(user.getEmail());
comment.setMemo(memo);

service.modifyComment(comment);

searchWord = java.net.URLEncoder.encode(searchWord,"UTF-8");
response.sendRedirect("view.jsp?articleNo=" + articleNo + "&boardCd=" + boardCd + "&curPage=" + curPage + "&searchWord=" + searchWord);
%>

deleteComment_proc.jsp

/bbs/deleteComment_proc.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="net.java_school.commons.WebContants" %>
<%@ page import="net.java_school.user.User" %>
<%@ page import="net.java_school.board.*" %>
<%

User user = (User) session.getAttribute(WebContants.USER_KEY);

request.setCharacterEncoding("UTF-8");
int commentNo = Integer.parseInt(request.getParameter("commentNo"));

BoardService service = new BoardService();
Comment comment = service.getComment(commentNo);
if (user == null || !user.getEmail().equals(comment.getEmail())) {
    response.sendError(HttpServletResponse.SC_FORBIDDEN, WebContants.AUTHENTICATION_FAILED);
    return; 
}

String boardCd = request.getParameter("boardCd");
int articleNo = Integer.parseInt(request.getParameter("articleNo"));
int curPage = Integer.parseInt(request.getParameter("curPage"));
String searchWord = request.getParameter("searchWord");

service.removeComment(commentNo);

searchWord = java.net.URLEncoder.encode(searchWord, "UTF-8");
response.sendRedirect("view.jsp?articleNo=" + articleNo + "&boardCd=" + boardCd + "&curPage=" + curPage + "&searchWord=" + searchWord);
%>

deleteAttachFile_proc.jsp

/bbs/deleteAttachFile_proc.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="net.java_school.user.User" %>
<%@ page import="net.java_school.board.*" %>
<%@ page import="net.java_school.commons.WebContants" %>
<%

User user = (User) session.getAttribute(WebContants.USER_KEY);

request.setCharacterEncoding("UTF-8");
int attachFileNo = Integer.parseInt(request.getParameter("attachFileNo"));

BoardService service = new BoardService();
AttachFile attachFile = service.getAttachFile(attachFileNo);
if (user == null || !user.getEmail().equals(attachFile.getEmail())) {
    response.sendError(HttpServletResponse.SC_FORBIDDEN, WebContants.AUTHENTICATION_FAILED);
    return; 
}

String boardCd = request.getParameter("boardCd");
int articleNo = Integer.parseInt(request.getParameter("articleNo"));
int curPage = Integer.parseInt(request.getParameter("curPage"));
String searchWord = request.getParameter("searchWord");

service.removeAttachFile(attachFileNo);

searchWord = java.net.URLEncoder.encode(searchWord, "UTF-8");
response.sendRedirect("view.jsp?articleNo=" + articleNo + "&boardCd=" + boardCd + "&curPage=" + curPage + "&searchWord=" + searchWord);
%>

modify_form.jsp

/bbs/modify_form.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" %>
<%@ page import="net.java_school.commons.WebContants" %>
<%@ page import="net.java_school.board.*" %>
<%@ page import="java.util.*" %>
<%
request.setCharacterEncoding("UTF-8");

int articleNo = Integer.parseInt(request.getParameter("articleNo"));
String boardCd = request.getParameter("boardCd");
int curPage = Integer.parseInt(request.getParameter("curPage"));
String searchWord = request.getParameter("searchWord");

User user = (User) session.getAttribute("user");
BoardService service = new BoardService();
Article article = service.getArticle(articleNo);

if (user == null || !user.getEmail().equals(article.getEmail())) {
    response.sendError(HttpServletResponse.SC_FORBIDDEN, WebContants.AUTHENTICATION_FAILED);
    return;
}

String title = article.getTitle();
String content = article.getContent();
if (content == null) content = "";

String boardName = service.getBoardName(boardCd);
%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8" />
<meta name="Keywords" content="Board article modify form page" />
<meta name="Description" content="Board article modify form page" />
<title><%=boardName %></title>
<link rel="stylesheet" href="/css/screen.css" type="text/css"  />
<script type="text/javascript">
function goView() {
    var form = document.getElementById("viewForm");
    form.submit();
}
</script>           
</head>
<body>

<div id="wrap">

    <div id="header">
        <%@ include file="../inc/header.jsp" %>
    </div>

    <div id="main-menu">
        <%@ include file="../inc/main-menu.jsp" %>
    </div>

    <div id="container">
        <div id="content">
        
<div id="content-categories"><%=boardName %></div>
<h3>Modify</h3>
<form id="modifyForm" action="modify_proc.jsp" method="post" enctype="multipart/form-data">
<input type="hidden" name="articleNo" value="<%=articleNo %>" />
<input type="hidden" name="boardCd" value="<%=boardCd %>" />
<input type="hidden" name="curPage" value="<%=curPage %>" />
<input type="hidden" name="searchWord" value="<%=searchWord %>" />
<table id="write-form" class="bbs-table">
<tr>
    <td>Title</td>
    <td><input type="text" name="title" style="width: 90%;" value="<%=title %>" /></td>
</tr>
<tr>
    <td colspan="2">
        <textarea name="content" rows="17" cols="50"><%=content %></textarea>
    </td>
</tr>
<tr>
    <td>Attach File</td>
    <td><input type="file" name="attachFile" /></td>
</tr>
</table>
<div style="text-align: center;padding-bottom: 15px;">
    <input type="submit" value="Submit" />
    <input type="button" value="Detailed view" onclick="goView()" />
</div>
</form>

        </div><!-- content end -->
    </div><!--  container end -->
    
    <div id="sidebar">
        <%@ include file="bbs-sub.jsp" %>
    </div>
    
    <div id="extra">
        <%@ include file="../inc/extra.jsp" %>
    </div>

    <div id="footer">
        <%@ include file="../inc/footer.jsp" %>
    </div>

</div>

<div id="form-group" style="display: none;">
    <form id="viewForm" action="view.jsp" method="get">
        <input type="hidden" name="articleNo" value="<%=articleNo %>" />
        <input type="hidden" name="boardCd" value="<%=boardCd %>" />
        <input type="hidden" name="curPage" value="<%=curPage %>" />
        <input type="hidden" name="searchWord" value="<%=searchWord %>" />
    </form>
</div>

</body>
</html>

modify_proc.jsp

/bbs/modify_proc.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.io.*" %>
<%@ page import="net.java_school.commons.WebContants" %>
<%@ page import="net.java_school.user.User" %>
<%@ page import="net.java_school.user.UserService" %>
<%@ page import="net.java_school.board.*" %>
<%@ page import="com.oreilly.servlet.MultipartRequest" %>
<%@ page import="com.oreilly.servlet.multipart.DefaultFileRenamePolicy" %>
<%

User user = (User) session.getAttribute(WebContants.USER_KEY);

String dir = application.getRealPath("/upload");

MultipartRequest multi = new MultipartRequest(
        request,
        dir,
        5*1024*1024,
        "UTF-8",
        new DefaultFileRenamePolicy());

BoardService service = new BoardService();
int articleNo = Integer.parseInt(multi.getParameter("articleNo"));

if (!service.getArticle(articleNo).getEmail().equals(user.getEmail())) {
    response.sendError(HttpServletResponse.SC_FORBIDDEN, WebContants.AUTHENTICATION_FAILED);
    return;
}

String boardCd = multi.getParameter("boardCd");
int curPage = Integer.parseInt(multi.getParameter("curPage"));
String searchWord = multi.getParameter("searchWord");
searchWord = java.net.URLEncoder.encode(searchWord, "UTF-8");

String title = multi.getParameter("title");
String content = multi.getParameter("content");
String filename = multi.getFilesystemName("attachFile");
String filetype = multi.getContentType("attachFile");

File f = multi.getFile("attachFile");
long filesize = 0L;
AttachFile attachFile = null;

if (f != null) {
    filesize = f.length();
    attachFile = new AttachFile();
    attachFile.setFilename(filename);
    attachFile.setFiletype(filetype);
    attachFile.setFilesize(filesize);
    attachFile.setEmail(user.getEmail());
    attachFile.setArticleNo(articleNo);
}

Article article = new Article();
article.setArticleNo(articleNo);
article.setBoardCd(boardCd);
article.setTitle(title);
article.setContent(content);
article.setEmail(user.getEmail());

service.modifyArticle(article, attachFile);

response.sendRedirect("view.jsp?articleNo=" + articleNo + "&boardCd=" + boardCd + "&curPage=" + curPage + "&searchWord=" + searchWord);
%>

del_proc.jsp

/bbs/del_proc.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="net.java_school.commons.WebContants" %>
<%@ page import="net.java_school.user.User" %>
<%@ page import="net.java_school.board.*" %>
<%

User user = (User) session.getAttribute(WebContants.USER_KEY);

request.setCharacterEncoding("UTF-8");

int articleNo = Integer.parseInt(request.getParameter("articleNo"));

BoardService service = new BoardService();
Article article = service.getArticle(articleNo);
if (user == null || !user.getEmail().equals(article.getEmail())) {
    response.sendError(HttpServletResponse.SC_FORBIDDEN, WebContants.AUTHENTICATION_FAILED);
    return;
}

service.removeArticle(articleNo);

String boardCd = request.getParameter("boardCd");
String curPage = request.getParameter("curPage");
String searchWord = request.getParameter("searchWord");

searchWord = java.net.URLEncoder.encode(searchWord, "UTF-8");
response.sendRedirect("list.jsp?boardCd=" + boardCd + "&curPage=" + curPage + "&searchWord=" + searchWord);
%>