게시판

|

주요 기능 : 회원가입, 로그인, 방명록, 글쓰기, 글수정, 글삭제, 페이징

============================= 0. 프로퍼티즈, web.xml, 통합 핸들러, 유틸 ============================= 
/viewArticle.do=command.ViewHandler
/modArticle.do=command.ModHandler
/removeArticle.do=command.RemoveHandler
/writeForm.do=com.action.WriteFormAction
/writePro.do=com.action.WriteProAction
/list.do=com.action.ListAction
/join.do=member.command.JoinHandler
/login.do=member.command.LoginHandler
/logout.do=member.command.LogoutHandler
/changepw.do=member.command.ChangePwHandler
/addGuest.do=guestbook.command.AddGuestbookHandler
/pwdCheck.do=guestbook.command.PwdCheckHandler
/modifyCheck.do=guestbook.command.ModifyCheckHandler
/modify.do=guestbook.command.ModifyHandler
---------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">

<!-- <security-constraint>
<web-resource-collection>
<web-resource-name>PreventViewingJSPs</web-resource-name>
            <description>브라우저로 접속한 사용자가 JSP파일로 직접 접근할 수 없도록 한다.</description>
            <url-pattern>*.do</url-pattern>
            <http-method>GET</http-method>
            <http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
</auth-constraint>
</security-constraint>--> 

	<display-name>BBS</display-name>
	
  <servlet>
    <servlet-name>ControllerUsingURI</servlet-name>
    <servlet-class>controller.ControllerUsingURI</servlet-class>
    <init-param>
         <param-name>configFile</param-name>
         <param-value>/WEB-INF/commandHandlerURI.properties</param-value>
	     </init-param>
  </servlet>
  
  <servlet-mapping>
    <servlet-name>ControllerUsingURI</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>
  
   <welcome-file-list>
	   <welcome-file>index.html</welcome-file>
	   <welcome-file>index.htm</welcome-file>
	   <welcome-file>index.jsp</welcome-file>
	   <welcome-file>default.html</welcome-file>
	   <welcome-file>default.htm</welcome-file>
	   <welcome-file>default.jsp</welcome-file>
  	</welcome-file-list>

</web-app>

---------------------------------------------
package controller;


import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Properties;

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

import command.CommandHandler;
import command.NullHandler;

public class ControllerUsingURI extends HttpServlet {

	//
	private Map<String, CommandHandler> commandHandlerMap = new HashMap<>();

	public void init() throws ServletException {
		String configFile = getInitParameter("configFile");
		Properties prop = new Properties();

		String configFilePath = getServletContext().getRealPath(configFile);
		try (FileReader fis = new FileReader(configFilePath)) {
			prop.load(fis);
		} catch (IOException e) {
			throw new ServletException(e);
		}

		Iterator keyIter = prop.keySet().iterator();
		while (keyIter.hasNext()) {
			String command = (String) keyIter.next();
			String handlerClassName = prop.getProperty(command);
			try {
				Class<?> handlerClass = Class.forName(handlerClassName);
				CommandHandler handlerInstance = (CommandHandler) handlerClass.newInstance();
				commandHandlerMap.put(command, handlerInstance);
			} catch (ClassNotFoundException | InstantiationException | IllegalAccessException e) {
				throw new ServletException(e);
			}
		}
	}

	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		process(request, response);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		process(request, response);
	}

	private void process(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String command = request.getRequestURI(); // BBS/...
		if (command.indexOf(request.getContextPath()) == 0) { // ServletContext로 시작된 URI이면
			command = command.substring(request.getContextPath().length()); // ServletContext다음부터가 Command
		}

		CommandHandler handler = commandHandlerMap.get(command); // Handler 객체를 가져온다.
		if (handler == null) {
			handler = new NullHandler(); // 존재하지 않는 command 이면 Not Found Error를 Client에게 전송
		}

		String viewPage = null;
		try {
			viewPage = handler.process(request, response); // handler에서 작업을 처리 후 viewPage를 리턴
		} catch (Throwable e) {
			throw new ServletException(e);
		}
		if (viewPage != null) {
			RequestDispatcher dispatcher = request.getRequestDispatcher(viewPage); // viewPage로 forward처리
			dispatcher.forward(request, response);
		}
	}
}
---------------------------------------------
package command;


import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public interface CommandHandler {
	public String process(HttpServletRequest req, HttpServletResponse res) throws Exception;
}

---------------------------------------------
package command;


import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class NullHandler implements CommandHandler {

	@Override
	public String process(HttpServletRequest req, HttpServletResponse res) throws Exception {
		res.sendError(HttpServletResponse.SC_NOT_FOUND);
		return null;
	}
}
---------------------------------------------

package util;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class CharacterEncodingFilter implements Filter {

	private String encoding;
	
	@Override
	public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
			throws IOException, ServletException {
		req.setCharacterEncoding(encoding);
		chain.doFilter(req, res);
	}

	@Override
	public void init(FilterConfig config) throws ServletException {
		encoding = config.getInitParameter("encoding");
		if (encoding == null) {
			encoding = "UTF-8";
		}
	}

	@Override
	public void destroy() {
	}

}
---------------------------------------------

package jdbc.connection;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;


public class ConnectionProvider {

	public static Connection getConnection() throws SQLException, NamingException {
		
		Context ctx = new InitialContext(); 
		Context envContext = (Context) ctx.lookup("java:/comp/env");
		DataSource dataFactory = (DataSource) envContext.lookup("jdbc/oracle");		
		
		return dataFactory.getConnection();
	}
}

---------------------------------------------
package jdbc;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class JdbcUtil {

	public static void close(ResultSet rs) {
		if (rs != null) {
			try {
				rs.close();
			} catch (SQLException ex) {
			}
		}
	}

	public static void close(Statement stmt) {
		if (stmt != null) {
			try {
				stmt.close();
			} catch (SQLException ex) {
			}
		}
	}

	public static void close(Connection conn) {
		if (conn != null) {
			try {
				conn.close();
			} catch (SQLException ex) {
			}
		}
	}

	public static void rollback(Connection conn) {
		if (conn != null) {
			try {
				conn.rollback();
			} catch (SQLException ex) {
			}
		}
	}
}

---------------------------------------------

============================= 1. 메인페이지, 로그인, 회원가입 ============================= 
<%@ page contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>메인 페이지(초기화면)</title>
</head>
<body>
<a href = "/BBS/view/guestbook.jsp">방명록</a><br>
<a href = "list.do">게시판</a><br>
<a href = "login.do">로그인</a><br>
<a href = "join.do">회원가입</a><br>
</body>
</html>
---------------------------------------------
<%@ page contentType="text/html; charset=utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
	request.setCharacterEncoding("utf-8");
%>
<!DOCTYPE html>
<html>
<head>
<title>가입</title>
</head>
<body>
<form action="join.do" method="post">
<p>
	아이디:<br/><input type="text" name="id" value="${param.id}">
	<c:if test="${errors.id}">ID를 입력하세요.</c:if>
	<c:if test="${errors.duplicateId}">이미 사용중인 아이디입니다.</c:if>
</p>
<p>
	이름:<br/><input type="text" name="name" value="${param.name}">
	<c:if test="${errors.name}">이름을 입력하세요.</c:if>
</p>
<p>
	암호:<br/><input type="password" name="password">
	<c:if test="${errors.password}">암호를 입력하세요.</c:if>
</p>
<p>
	확인:<br/><input type="password" name="confirmPassword">
	<c:if test="${errors.confirmPassword}">확인을 입력하세요.</c:if>
	<c:if test="${errors.notMatch}">암호와 확인이 일치하지 않습니다.</c:if>
</p>
<input type="submit" value="가입">
<input type="button" value="메인으로" onClick="location.href='/BBS/main.jsp'">
</form>
</body>
</html>
---------------------------------------------
<%@ page contentType="text/html; charset=utf-8"%>
<!DOCTYPE html>
<html>
<head>
<title>가입 완료</title>
</head>
<body>
&nbsp;&nbsp;${param.name}님, 회원 가입에 성공했습니다.
<br><br>
<a href ="/BBS/login.do">로그인 창으로 가기</a>
<br/>
</body>
</html>
---------------------------------------------
<%@ page language="java" contentType="text/html; charset=UTF-8"
	session ="true"
    pageEncoding="UTF-8"
    import="member.*"
    isELIgnored="false"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
	request.setCharacterEncoding("utf-8");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그인 화면</title>
</head>
<body>
<form method="post" action="login.do" >
<p>
아이디 : <br><input type ="text" name="id" value="${param.id }"><br><br>
</p>
<p>
비밀번호 : <br><input type="password" name="password"><br>
<c:if test="${errors.result}">일치하지 않습니다</c:if>
</p>
<input type="submit" value="로그인">
<input type="button" value="메인으로" onClick="location.href='/BBS/main.jsp'">

</form>
</body>
</html>
---------------------------------------------
<%@ page language="java" contentType="text/html; charset=UTF-8"
	session="true"
	import ="java.util.*"
    pageEncoding="UTF-8"
    isELIgnored="false"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
	request.setCharacterEncoding("utf-8");
%>

<%
	String name = (String)request.getAttribute("name");
%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<script type="text/javascript">
	function fn_logout(){
		var frmLogout = document.frm;
		frmLogout.method = "post";
		frmLogout.action = "BBS/logout.do";
		frmLogout.submit();
	}

</script>
<title>로그인 후 초기화면</title>
</head>
<body>
	<form name = "frm" method="post">
	&nbsp;${name}님 안녕하세요. <a href="logout.do" onclick="fn_logout()">[로그아웃하기]</a>
	<a href = "/BBS/changepw.do">[암호변경하기]</a><br><br>
	&nbsp;<a href = "/BBS/view/guestbook.jsp">방명록</a><br>
	&nbsp;<a href = "list.do">게시판</a>
	</form>
</body>
</html>
---------------------------------------------
<%@ page language="java" contentType="text/html; charset=UTF-8"
    session="true"
    import="java.util.*"
    isELIgnored="false"
    pageEncoding="UTF-8"%>
<%
	request.setCharacterEncoding("utf-8");
%>
    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>암호 변경</title>
</head>
<body>
	<form method="post" action="changepw.do">
	현재 암호:<br><input type = "password" name="old_pwd"><br>
	새 암호:<br><input type = "password" name="new_pwd"><br>
	<input type="submit" value="암호 변경">
	<input type="button" value="메인으로" onClick="location.href='/BBS/loginafter.jsp'">
	</form>
</body>
</html>
---------------------------------------------
package member.command;

import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import command.CommandHandler;
import member.service.DuplicateIdException;
import member.service.JoinRequest;
import member.service.JoinService;

public class JoinHandler implements CommandHandler {

	private static final String FORM_VIEW = "/join.jsp";
	private JoinService joinService = new JoinService();

	@Override
	public String process(HttpServletRequest req, HttpServletResponse res) throws UnsupportedEncodingException {
		if (req.getMethod().equalsIgnoreCase("GET")) {
			return processForm(req, res);
		} else if (req.getMethod().equalsIgnoreCase("POST")) {
			return processSubmit(req, res);
		} else {
			res.setStatus(HttpServletResponse.SC_METHOD_NOT_ALLOWED);
			return null;
		}
	}

	private String processForm(HttpServletRequest req, HttpServletResponse res) {
		return FORM_VIEW;
	}

	private String processSubmit(HttpServletRequest req, HttpServletResponse res) throws UnsupportedEncodingException {
		
		req.setCharacterEncoding("utf-8");
		
		JoinRequest joinReq = new JoinRequest();
		joinReq.setId(req.getParameter("id"));
		joinReq.setName(req.getParameter("name"));
		joinReq.setPassword(req.getParameter("password"));
		joinReq.setConfirmPassword(req.getParameter("confirmPassword"));

		Map<String, Boolean> errors = new HashMap<>();
		req.setAttribute("errors", errors);

		joinReq.validate(errors);

		if (!errors.isEmpty()) {
			return FORM_VIEW;
		}

		try {
			joinService.join(joinReq);
			return "/joinsuccess.jsp";
		} catch (DuplicateIdException e) {
			errors.put("duplicateId", Boolean.TRUE);
			return FORM_VIEW;
		}
	}

}
---------------------------------------------
package member.command;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;

import javax.naming.NamingException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import command.CommandHandler;
import member.dao.MemberDao;
import member.model.Member;
import member.service.DuplicateIdException;
import member.service.LoginRequest;
import member.service.LoginService;

public class LoginHandler implements CommandHandler {

	private static final String FORM_VIEW = "/login.jsp";
	private static final String FORM_VIEW2 = "/loginafter.jsp";
	private LoginService loginService = new LoginService();

	@Override
	public String process(HttpServletRequest req, HttpServletResponse res) throws SQLException, NamingException {
		if (req.getMethod().equalsIgnoreCase("GET")) {
			return processForm(req, res);
		} else if (req.getMethod().equalsIgnoreCase("POST")) {
			return processSubmit(req, res);
		} else {
			res.setStatus(HttpServletResponse.SC_METHOD_NOT_ALLOWED);
			return null;
		}
	}

	private String processForm(HttpServletRequest req, HttpServletResponse res) {
		return FORM_VIEW;
	}

	private String processSubmit(HttpServletRequest req, HttpServletResponse res) throws SQLException, NamingException {
		LoginRequest loginreq = new LoginRequest();
		loginreq.setId(req.getParameter("id"));
		loginreq.setPassword(req.getParameter("password"));
		MemberDao dao = new MemberDao();
		Map<String, Boolean> errors = new HashMap<>();
		req.setAttribute("errors", errors);
		
		Connection conn = null;
		String name = dao.name(conn, loginreq.getId());
		
		HttpSession session = req.getSession();
		session.setAttribute("input_id", loginreq.getId());
		session.setAttribute("input_pwd", loginreq.getPassword());
		session.setAttribute("name", name);
		
		loginreq.validate(errors);
		
		if(!errors.isEmpty()) {
			return FORM_VIEW;
		}
		try {
			loginService.login(loginreq, req, errors);;
			return FORM_VIEW2;
			
		}catch(DuplicateIdException e) {
			errors.put("duplicateId", Boolean.TRUE);
			return FORM_VIEW;
		}
		
		
		}
	}
---------------------------------------------
package member.command;


import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import command.CommandHandler;
import member.service.DuplicateIdException;

public class LogoutHandler implements CommandHandler {

	private static final String FORM_VIEW = "/main.jsp";

	@Override
	public String process(HttpServletRequest req, HttpServletResponse res) {
			return processSubmit(req, res);
	}

	private String processSubmit(HttpServletRequest req, HttpServletResponse res) {
		System.out.println("logout : ");
			HttpSession session = req.getSession();
			session.invalidate();
						
			
			return FORM_VIEW;
	}

}
---------------------------------------------
package member.command;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;

import javax.naming.NamingException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import command.CommandHandler;
import member.dao.MemberDao;
import member.model.Member;
import member.service.DuplicateIdException;
import member.service.ChangePwRequest;

public class ChangePwHandler implements CommandHandler {

	private static final String FORM_VIEW = "/changepw.jsp";
	private static final String LOGIN_AFTER = "/loginafter.jsp";

	@Override
	public String process(HttpServletRequest req, HttpServletResponse res) throws SQLException, NamingException {
		if (req.getMethod().equalsIgnoreCase("GET")) {
			return processForm(req, res);
		} else if (req.getMethod().equalsIgnoreCase("POST")) {
			return processSubmit(req, res);
		} else {
			res.setStatus(HttpServletResponse.SC_METHOD_NOT_ALLOWED);
			return null;
		}
	}

	private String processForm(HttpServletRequest req, HttpServletResponse res) {
		return FORM_VIEW;
	}

	private String processSubmit(HttpServletRequest req, HttpServletResponse res) throws SQLException, NamingException {
		ChangePwRequest changereq = new ChangePwRequest();
		changereq.setOld_pwd(req.getParameter("old_pwd"));
		changereq.setNew_pwd(req.getParameter("new_pwd"));
		String old_pwd = changereq.getOld_pwd();
		MemberDao dao = new MemberDao();
		Connection conn = null;
		HttpSession session = req.getSession();
		
		String id = (String) session.getAttribute("input_id");
		String pwd = (String) session.getAttribute("input_pwd");
		String name = dao.name(conn, id);
		req.setAttribute("name", name);;
		System.out.println("id:"+id);
		System.out.println("pw:"+pwd);
		if (old_pwd.equals(pwd)) {
			session.setAttribute("input_pwd", changereq.getNew_pwd());
			dao.changepw(conn, new Member(id, changereq.getOld_pwd(), changereq.getNew_pwd()));
			return LOGIN_AFTER;
		} else {
				return FORM_VIEW;
		}
	}
}
---------------------------------------------
package member.service;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.Date;

import javax.naming.NamingException;

import jdbc.JdbcUtil;
import jdbc.connection.ConnectionProvider;
import member.dao.MemberDao;
import member.model.Member;

public class JoinService {
	private MemberDao memberDao = new MemberDao();

	public void join(JoinRequest joinReq) {
		Connection conn = null;
		try {
			conn = ConnectionProvider.getConnection(); 
			conn.setAutoCommit(false);

			Member member = memberDao.selectById(conn, joinReq.getId());
			if (member != null) {
				JdbcUtil.rollback(conn);
				throw new DuplicateIdException();
			}

			memberDao.insert(conn, new Member(joinReq.getId(), joinReq.getName(), joinReq.getPassword(), new Date()));
			conn.commit();
		} catch (NamingException e) {
			JdbcUtil.rollback(conn);
			throw new RuntimeException(e);
		} catch (SQLException e) {
			JdbcUtil.rollback(conn);
			throw new RuntimeException(e);
		} finally {
			JdbcUtil.close(conn);
		}
	}
}
---------------------------------------------
package member.service;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;

import javax.naming.NamingException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import jdbc.JdbcUtil;
import jdbc.connection.ConnectionProvider;
import member.dao.MemberDao;
import member.model.Member;

public class LoginService {
	private MemberDao dao = new MemberDao();
	
	

	public void login(LoginRequest loginreq, HttpServletRequest req, Map<String, Boolean> errors) {
		boolean result = false;
		Connection conn = null;
		try {
			conn = ConnectionProvider.getConnection(); 
			Member bean = dao.selectById(conn, loginreq.getId());
					
			
			result =  dao.isExisted(conn, new Member(loginreq.getId(),loginreq.getPassword()));
			System.out.println("1111:"+ result);
			check(errors, result, "result");
			System.out.println("2222:" + result);
			if (!result) {
				JdbcUtil.rollback(conn);
				throw new DuplicateIdException();		
			}
			HttpSession session = req.getSession();
	        session.setAttribute("isLogon", true);
			
		} catch (NamingException e) {
			JdbcUtil.rollback(conn);
			throw new RuntimeException(e);
		} catch (SQLException e) {
			JdbcUtil.rollback(conn);
			throw new RuntimeException(e);
		} finally {
			JdbcUtil.close(conn);
		}
	}
	
	private void check(Map<String, Boolean> errors, boolean result, String fieldName) {
		if(!result) {
			errors.put(fieldName, Boolean.TRUE);
			throw new DuplicateIdException();
		}
		System.out.println("333333:" + result);
	}
	
}
---------------------------------------------
package member.service;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.Date;

import javax.naming.NamingException;

import jdbc.JdbcUtil;
import jdbc.connection.ConnectionProvider;
import member.dao.MemberDao;
import member.model.Member;

public class ChangePwService {
	private MemberDao memberDao = new MemberDao();

	public void join(JoinRequest joinReq) {
		Connection conn = null;
		try {
			conn = ConnectionProvider.getConnection(); 
			conn.setAutoCommit(false);

			Member member = memberDao.selectById(conn, joinReq.getId());
			if (member != null) {
				JdbcUtil.rollback(conn);
				throw new DuplicateIdException();
			}

			memberDao.insert(conn, new Member(joinReq.getId(), joinReq.getName(), joinReq.getPassword(), new Date()));
			conn.commit();
		} catch (NamingException e) {
			JdbcUtil.rollback(conn);
			throw new RuntimeException(e);
		} catch (SQLException e) {
			JdbcUtil.rollback(conn);
			throw new RuntimeException(e);
		} finally {
			JdbcUtil.close(conn);
		}
	}
}
---------------------------------------------
package member.service;

import java.util.Map;

public class JoinRequest {

	private String id;
	private String name;
	private String password;
	private String confirmPassword;

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public String getConfirmPassword() {
		return confirmPassword;
	}

	public void setConfirmPassword(String confirmPassword) {
		this.confirmPassword = confirmPassword;
	}

	public boolean isPasswordEqualToConfirm() {
		return password != null && password.equals(confirmPassword);
	}

	public void validate(Map<String, Boolean> errors) {
		checkEmpty(errors, id, "id");
		checkEmpty(errors, name, "name");
		checkEmpty(errors, password, "password");
		checkEmpty(errors, confirmPassword, "confirmPassword");
		if (!errors.containsKey("confirmPassword")) {
			if (!isPasswordEqualToConfirm()) {
				errors.put("notMatch", Boolean.TRUE);
			}
		}
	}

	private void checkEmpty(Map<String, Boolean> errors, 
			String value, String fieldName) {
		if (value == null || value.isEmpty())
			errors.put(fieldName, Boolean.TRUE);
	}
}
---------------------------------------------
package member.service;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.Map;

import javax.naming.NamingException;

import member.dao.MemberDao;
import member.model.Member;


public class LoginRequest {
	private String id;
	private String password;
	
	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public String getId() {
		return id;
	}
	
	public void setId(String id) {
		this.id = id;	
	}
	
	//패스워드 일치 여부

	   public void validate(Map<String, Boolean> errors) throws SQLException{
	      checkEmpty(errors, id, "id");
	      checkEmpty(errors, password, "password");
	      
	      
	   }
   
	
	   private void checkEmpty(Map<String, Boolean> errors, 
	         String value, String fieldName) {
	      if (value == null || value.isEmpty())
	         errors.put(fieldName, Boolean.TRUE);
	   }
	
	

}
---------------------------------------------
package member.service;

public class ChangePwRequest {
	
	private String old_pwd;
	private String new_pwd;
	
	
	public String getOld_pwd() {
		return old_pwd;
	}
	public void setOld_pwd(String old_pwd) {
		this.old_pwd = old_pwd;
	}
	public String getNew_pwd() {
		return new_pwd;
	}
	public void setNew_pwd(String new_pwd) {
		this.new_pwd = new_pwd;
	}
	
	
}
---------------------------------------------

package member.service;

public class DuplicateIdException extends RuntimeException {

}
---------------------------------------------

package member.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.Date;
import java.util.Map;

import javax.naming.NamingException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import jdbc.JdbcUtil;
import jdbc.connection.ConnectionProvider;
import member.model.Member;
import member.service.LoginRequest;

public class MemberDao {

	public Member selectById(Connection conn, String id) throws SQLException {
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		try {
			pstmt = conn.prepareStatement(
					"select * from member where member_id = ?");
			pstmt.setString(1, id);
			rs = pstmt.executeQuery();
			Member member = null;
			if (rs.next()) {
				member = new Member(
						rs.getString("member_id"), 
						rs.getString("name"), 
						rs.getString("password"),
						toDate(rs.getTimestamp("regdate")));
			}
			return member;
		} finally {
			JdbcUtil.close(rs);
			JdbcUtil.close(pstmt);
		}
	}

	private Date toDate(Timestamp date) {
		return date == null ? null : new Date(date.getTime());
	}

	public void insert(Connection conn, Member mem) throws SQLException {
		try (PreparedStatement pstmt = 
				conn.prepareStatement("insert into member values(?,?,?,?)")) {
			pstmt.setString(1, mem.getId());
			pstmt.setString(2, mem.getName());
			pstmt.setString(3, mem.getPassword());
			pstmt.setTimestamp(4, new Timestamp(mem.getRegDate().getTime()));
			pstmt.executeUpdate();
		}
	}

	public void changepw(Connection conn, Member bean) throws SQLException {
		 	PreparedStatement pstmt = null;
		 	String old_pwd = bean.getPassword();
		 	String new_pwd = bean.getNewPwd();
		 	System.out.println("old_pwd:" + old_pwd);
		 	System.out.println("new_pwd:" + new_pwd);
		 	try {
		 	 conn = ConnectionProvider.getConnection();
		 	 String query = "update member set password = ? where member_id = ?";
			 System.out.println(query);
	    	 pstmt = conn.prepareStatement(query);
	         pstmt.setString(1, bean.getNewPwd());
	         pstmt.setString(2, bean.getId());
	         pstmt.executeUpdate();
	         pstmt.close();
	         conn.close();
	      }catch(Exception e) {
	    	  e.printStackTrace();
	      }
}
	
	public String name(Connection conn, String id) throws SQLException, NamingException {
		PreparedStatement pstmt = null;
		ResultSet rs = null;
	 	try {
	 	 conn = ConnectionProvider.getConnection();
	 	 String query = "select name from member where member_id=?";
		 System.out.println(query);
    	 pstmt = conn.prepareStatement(query);
         pstmt.setString(1, id);
         rs = pstmt.executeQuery();
         Member member = null;
         String name= null;
         if(rs.next()) {
        	 member = new Member(rs.getString("name"));
        	 name = member.getName();
         }
         	rs.close();
         	conn.close();
         	pstmt.close();
			return name;
		} finally {
			JdbcUtil.close(rs);
			JdbcUtil.close(pstmt);
		}
	}
	public boolean isExisted(Connection conn, Member bean) {
		boolean result = false;	
		PreparedStatement pstmt = null;
		String id = bean.getId();
		String pwd = bean.getPassword();
		try {
			conn = ConnectionProvider.getConnection(); 
			String query = "SELECT DECODE(COUNT(*),1,'true','false') AS result FROM member WHERE member_id ='" + id +"' AND password ='" + pwd +"'";
			System.out.println(query);
			pstmt = conn.prepareStatement(query);
			ResultSet rs = pstmt.executeQuery();
			rs.next();
			result = Boolean.parseBoolean(rs.getString("result"));
			rs.close();
			conn.close();
			pstmt.close();
		}catch(Exception e) {
			e.printStackTrace();
		}
		System.out.println(result);
		return result;
	}
	
}
---------------------------------------------
package member.model;

import java.util.Date;

public class Member {

	private String id;
	private String name;
	private String password;
	private Date regDate;
	private String new_pwd;
	
	public Member(String id, String name, String password, Date regDate) {
		this.id = id;
		this.name = name;
		this.password = password;
		this.regDate = regDate;
	}
		
	public Member(String id, String password) {
		this.id = id;
		this.password = password;
	}
		
	public Member(String id, String password, String new_pwd) {
		super();
		this.id = id;
		this.password = password;
		this.new_pwd = new_pwd;
	}

	public Member() {
		
	}
	
	
	
	
	public void setName(String name) {
		this.name = name;
	}

	public Member(String name) {
		super();
		this.name = name;
	}

	public String getId() {
		return id;
	}

	public String getName() {
		return name;
	}

	public String getPassword() {
		return password;
	}
	
	public Date getRegDate() {
		return regDate;
	}
	
	public String getNewPwd() {
		return new_pwd;
	}
	
	public boolean matchPassword(String pwd) {
		return password.equals(pwd);
	}

	public void changePassword(String newPwd) {
		this.password = newPwd;
	}

}

============================= 2. 게시판 ============================= 
<%@ page import="member.model.Member" %>
<%@page import="dao.ArticleVO"%>
<%@page import="dao.BoardDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%
	request.setCharacterEncoding("utf-8");
	String name = (String)request.getAttribute("name");
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>글목록</title>

</head>
<body>

<marquee behavior="alternate" scrolldelay="100" direction="right">
      3조의 게시판입니다.</marquee>

<c:if test="${page.count == 0}">
<table width="70%" border="1" cellpadding="0" cellspacing="0" align="center">
<tr>
    <td bgcolor="#e9e9e9">
   
    </td>
</table>
</c:if>


<table width="70%" border="1" cellpadding="0" cellspacing="0" align="center">
<tr><td colspan="6" align="center"><h1>게시판</h1></td></tr>
<tr bgcolor="gray">
    <td width="70">번호</td>
    <td width="70">글제목</td>
    <td width="120">작성자</td>
    <td width="70">조회수</td>
   <td width="120">작성일 </td>
</tr>
<c:set var="number" value="${page.number}"/>
<c:forEach var="article" items="${articleList}">

<tr> 
    
    <td>${article.article_no}</td>    
    <td><a href="viewArticle.do?article_no=${article.article_no}">${article.title}</a></td>
    <td>${article.writer_name}</td>
     <td>${article.read_cnt}</td>
    <td><fmt:formatDate value="${article.regdate}" pattern="yyyy년MM월dd일"/></td>
</tr>
</c:forEach>
</table>

 <form action="list.do" name="search" method="get" onsubmit="return searchMessage()">
 
<table width="70%" border="1" align="center" cellpadding="4" cellspacing="0">
  
  <tr><td width="200"><a href="writeForm.do">글쓰기</a></td>
  
    <td align="center" valign="bottom">
      <select name="keyField">
          <option value="title">제목</option>      
          <option value="name">이름</option>
          <option value="content">내용</option>
      </select></td>
        <td><input type="text" size=16 name="keyWord"><input type="submit" value="찾기"></td>
   </tr> 
   <tr><td colspan="3" align="center">
   
<c:if test="${page.count > 0}">
   <c:set var="pageCount" value="${(page.count - 1) / page.pageSize + 1}"/>
   <c:set var="pageBlock" value="${10}"/>
   <fmt:parseNumber var="rs" value="${(currentPage - 1) / pageBlock}" integerOnly="true" />
   <c:set var="startPage" value="${rs*pageBlock+1}"/>
   <c:set var="endPage" value="${startPage + pageBlock-1}"/>
   <c:if test="${endPage > pageCount}">
        <c:set var="endPage" value="${pageCount}"/>
   </c:if> 
          
   <c:if test="${startPage > pageBlock}">
        <a href="list.do?pageNum=${startPage - pageBlock }&keyField=${page.keyField}&keyWord=${page.keyWord}">[이전]</a>
   </c:if>
	<input type="button" value="메인으로" onClick="location.href='/BBS/loginafter.jsp'">
   <c:forEach var="i" begin="${startPage}" end="${endPage}">
   
       <c:if test="${i == page.currentPage}">
          [${i}]
       </c:if>
       <c:if test="${i != page.currentPage}">
           <a href="list.do?pageNum=${i}&keyField=${page.keyField}&keyWord=${page.keyWord}">[${i}]</a>
       </c:if>
       
   </c:forEach>

   <c:if test="${endPage < pageCount}">
        <a href="list.do?pageNum=${startPage + pageBlock}&keyField=${page.keyField}&keyWord=${page.keyWord}">[다음]</a>
   </c:if>
</c:if>
   </td></tr>
</table>
</form>
</body>
</html>
---------------------------------------------
<%@page import="com.domain.Article2"%>
<%@page import="com.dao.ArticleDao"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
    request.setCharacterEncoding("utf-8");
   String name = request.getParameter("name");
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>게시판</title>

<script type="text/javaScript">
function writeSave(){
   
  
   if(writeform.title.value==""){
     alert("제목을 입력하십시요.");
     return false;
   }
   
   if(writeform.content.value==""){
     alert("내용을 입력하십시요.");
     return false;
   }
   
   if(writeform.password.value==""){
        alert(" 비밀번호를 입력하십시요.");        
        return false;
      }
   
   writeform.action="writePro.do";
   writeform.submit();
        
   return true;
 }    
</script>
<c:set var="contextPath"  value="${pageContext.request.contextPath}"  />
</head>
<body>
<center><b>글쓰기</b></center>
<br>
<form method="post" name="writeform">
<input type="hidden" name="name" value="${sessionScope.name}">
<table width="400" border="1" cellspacing="0" cellpadding="0" align="center">
   <tr>
    <td align="right" colspan="2">
       <a href="list.do"> 글목록</a> 
   </td>
   </tr>
   <tr>
    <td  width="70" align="center">이 름</td>
    <td  width="330">
       <input type="text" size="10" maxlength="10" name="writer_name" value="${sessionScope.name }" disabled="disabled" /></td>
  </tr>
  <tr>
    <td  width="70" align="center" >제 목</td>
    <td  width="330">
      <input type="text" size="40" maxlength="50" name="title" value="${article2.title }">
    </td>
  </tr>
 
  <tr>
    <td  width="70" align="center" >내 용</td>
    <td  width="330" >
     <textarea name="content" rows="13" cols="40">${article2.content }</textarea> </td>
  </tr>
    <tr>
    <td  width="70" align="center" >비밀번호</td>
    <td  width="330" >
     <input type="password" size="8" maxlength="12" name="password" value="${article2.password }"> 
    </td>
  </tr>

<tr>      
 <td colspan=2 align="center"> 
  <input type="button" value="글쓰기" onclick ="writeSave()">  
  <input type="reset" value="다시작성">
  <input type="button" value="목록보기" onClick="location.href='list.do'">
</td></tr></table>
</form>            
</body>
</html>      
---------------------------------------------
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<script type="text/javaScript">
alert("게시판에 글을 등록하였습니다.");
location.href = "list.do";
</script>
---------------------------------------------
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"
    isELIgnored="false" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>    
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
	request.setCharacterEncoding("utf-8");
%>
<%
	String name = (String)request.getAttribute("name");
%>
<c:set var="contextPath"  value="${pageContext.request.contextPath}"  />
<head>
<meta charset="UTF-8">
   <title>게시글 보기</title>
   <script type="text/javascript">
   
      <!--목록으로 이동-->
      function move(url) {
  		location.href=url;
  	  }
      
	</script>
</head>
<body>
  <form name="frmArticle" method="post"   enctype="multipart/form-data">
  <h2 align=center>글 상세보기</h2>
  <table border solid align = center>
  <tr>
   <td>글번호</td>
    <td><input type="text" name="article_no" value="${article.article_no }"  disabled />
    <input type="hidden" name="article_no" value="${article.article_no}"  /></td>
     <!--글 수정시 글 번호를 컨트롤러로 전송하기 위해 미리 hidden 태그를 이용해 글 번호를 저장-->
  </tr>
  
  <tr>
   <td>작성자</td>
   <td width = 100><input type="text" value="${article.writer_name }" name="writer_name" disabled/></td>
  </tr>
  
  <tr>
   <td>등록일자</td>
 	<td width = 100><input type=text value="<fmt:formatDate value="${article.regdate}" />" name="regdate" disabled/></td>
  </tr>
  
    <tr>
	   <td>수정일자</td>
	    <td width = 100><input type=text value="<fmt:formatDate value="${article.moddate}" />" name="moddate" disabled /></td>
  </tr>
  
      <tr>
	   <td>조회수</td>
	    <td width = 100><input type=text value="${article.read_cnt}" name="read_cnt" disabled /></td>
  </tr>
  
  <tr>
   <td>제목</td>
    <td width = 100><input type="text" value="${article.title }"  name="title"  id="i_title" disabled /></td>
  </tr>
  
  <tr>
   <td>내용</td>
	<td width = 100 height = 100><textarea id=content name="content" rows = "20" cols = "50" disabled >${article.content}</textarea></td>
  </tr>
    
  <tr  id="tr_btn"    >
   <td colspan=2 align="center">
	  <input type=button value="게시글수정" onClick="location.href='contentdelalterChk.jsp?mode=alter&article_no=${article.article_no }'">
	  <input type=button value="게시글삭제" onClick="location.href='contentdelalterChk.jsp?mode=del&article_no=${article.article_no }'">
	  <input type=button value="목록"  onClick="move('list.do');">
   </td>
  </tr>
 </table>
 </form>
</body>
</html>
---------------------------------------------
<%@page import="dao.ArticleVO"%>
<%@page import="dao.BoardDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"
    isELIgnored="false" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>    
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
	request.setCharacterEncoding("utf-8");
	String mode = request.getParameter("mode");
	String password = request.getParameter("password");
	int article_no = Integer.parseInt(request.getParameter("article_no"));
%>
<c:set var="contextPath"  value="${pageContext.request.contextPath}"  />

<html>
<head>
<meta charset="UTF-8">
<title>암호 확인</title>
<script type="text/javascript">
	
	function passChkProcBtn(){
		frm.method='post';
		frm.action='passChkProc.jsp';
		frm.submit();
	}
	
	function move(url) {
  		location.href=url;
  	}
	
	
</script>
</head>

<body>
<%
	if("del".equals(mode)){
%>
	<h2 align=center>글 삭제</h2>
	<form id = frm method="post" action="passChkProc.jsp?mode=del&article_no=<%=article_no %>"
		encType="UTF-8">
		<table border 1 align = center>
			<tr>
				<th>비밀번호를 입력해주세요</th>
			</tr>
 	<tr>
     	<td>비밀번호 : <input type=password name=password>
		<input type = hidden name =password value=password>
		</td>
    </tr>
    <tr>
		<td align=center>
		<input type=submit value="게시글 삭제하기" >
		<input type=button value="뒤로" onClick="history.back()">
		</td>
	</tr>
<% 	} %>
<%
	if("alter".equals(mode)){
%> 
	<h2 align=center>글 수정</h2>
	<form id = frm method="post" action="passChkProc.jsp?mode=alter&article_no=<%=article_no %>"
		encType="UTF-8">
		<table border 1 align = center>
			<tr>
				<th>비밀번호를 입력해주세요</th>
			</tr>
 	<tr>
     	<td>비밀번호 : <input type=password name=password>
		<input type = hidden name = password value=password>
		</td>
    </tr>
    <tr>
		<td align=center>
		<input type=submit value="게시글 수정하기" >
		<input type=button value="뒤로" onClick="history.back()">
		</td>
	</tr>
<% 	} %>
	</form> 
</body>
</html>
---------------------------------------------
<%@page import="dao.ArticleVO"%>
<%@page import="dao.BoardDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"
    isELIgnored="false" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>    
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>글 수정</title>
<%
   request.setCharacterEncoding("utf-8");
   int article_no = Integer.parseInt(request.getParameter("article_no"));
   BoardDAO dao = BoardDAO.getInstance();
   ArticleVO bb = dao.selectArticle(article_no, 0);
%>

<script>
   function updateBtn(){
   
      if(frm.title.value==""){
         alert("제목을 입력해주세요");
         return false;
      }
      if(frm.content.value==""){
         alert("내용을 입력해주세요");
         return false;
      }
      frm.action="modArticle.do?article_no=<%=bb.getArticle_no() %>";
      frm.submit();
   }
   
   function move(url) {
         location.href=url;
   }

</script>

<c:set var="contextPath"  value="${pageContext.request.contextPath}"  />
</head>
<body>
<h2 align=center >글 수정</h2>
   <form name="frm" method="post">
      <table border solid align = center>
         <tr>
            <td>글번호</td>
            <td><input type = text name="article_no" value="<%=bb.getArticle_no() %>" disabled/></td>
         </tr>
         <tr>
            <td>제목</td>
            <td><input type=text name="title" size = 20 value ="<%=bb.getTitle() %>"></td>
         </tr>
         <tr>
            <td>내용</td>
            <td width = 100 height = 100><textarea name="content" rows = "20" cols = "50" ><%=bb.getContent() %></textarea></td>
         </tr>
          </tr>
         <tr>
            <td colspan=2 align=center>
            <input type=button value="수정" onclick ="updateBtn()">
               <input type="button" value="뒤로" onclick="javascript:location.href='/BBS/viewArticle.do?article_no=<%=bb.getArticle_no() %>'"></td>
         </tr>
      </table>
   </form>
</body>
</html>
---------------------------------------------
<%@page import="dao.ModRequest"%>
<%@page import="dao.ArticleVO"%>
<%@page import="dao.BoardDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
request.setCharacterEncoding("utf-8");
String mode = request.getParameter("mode");
String password = request.getParameter("password");
int article_no = Integer.parseInt(request.getParameter("article_no"));
BoardDAO dao = BoardDAO.getInstance();
Boolean result = dao.PwdCheck(article_no, password);
if("alter".equals(mode) && result==true){
	System.out.println("수정 - 비번확인완료");
	response.sendRedirect("/BBS/contentalter.jsp?article_no=" + article_no);
}else if("del".equals(mode) && result==true){
	System.out.println("삭제 - 비번확인완료");
	response.sendRedirect("/BBS/removeArticle.do?article_no=" + article_no);
}else{
	%>
	<script>
	alert("비밀번호가 맞지 않습니다.")
	history.back();
	</script>
	<%
};
%>
---------------------------------------------
package com.action;

import java.io.IOException;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.dao.ArticleDao;
import com.domain.Article;
import com.domain.ArticlePage;

import command.CommandHandler;


public class ListAction implements CommandHandler{
    
	@Override
	public String process(HttpServletRequest req, HttpServletResponse res) throws IOException {
			return processSubmit(req, res);
	}

	private String processSubmit(HttpServletRequest req, HttpServletResponse res) throws IOException {
    
    try {
		req.setCharacterEncoding("utf-8");
	} catch (UnsupportedEncodingException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
    
    HttpSession session = req.getSession();
    if(session.getAttribute("isLogon")==null) {
       return "/main.jsp";
    }else {
       boolean isLogon = (boolean)session.getAttribute("isLogon");
       if(!isLogon) {
          return "/main.jsp";
       }
    }

    String keyField =req.getParameter("keyField");
    String keyWord =req.getParameter("keyWord");
    if(keyField==null){
        keyField="";
    }
    if(keyWord==null){
        keyWord="";
    }    
    
    String pageNum =req.getParameter("pageNum");
    
    if(pageNum ==null){
        pageNum = "1";
    }    
    
    int pageSize = 10;
    int currentPage = Integer.parseInt(pageNum);
    int startRow =(currentPage-1)*pageSize +1;
    int endRow =currentPage * pageSize;
    int count = 0;
    int number = 0;
    
    List<Article> articleList =null;
    ArticleDao manager = ArticleDao.getInstance();
    try {
		count =manager.getArticleCount(keyField,keyWord);
	} catch (Exception e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
    
    if(count>0){
       try {
		articleList = manager.getArticles(startRow, endRow, keyField, keyWord);
	} catch (Exception e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
    }
    //가짜 글번호
    number=count-(currentPage-1)*pageSize;

    ArticlePage page= new ArticlePage();
    page.setCount(count);
    page.setCurrentPage(currentPage);
    page.setNumber(number);
    page.setPageSize(pageSize);    
    page.setKeyField(keyField);    
    page.setKeyWord(keyWord);    
    
    req.setAttribute("page", page);
    req.setAttribute("articleList", articleList);

    return "/view/list.jsp";
    }
}
---------------------------------------------
package com.action;

import java.io.UnsupportedEncodingException;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.dao.ArticleDao;
import com.domain.Article2;

import command.CommandHandler;
import member.model.Member;


public class WriteProAction  implements CommandHandler{

	@Override
	public String process(HttpServletRequest req, HttpServletResponse res) throws Exception {
			return processSubmit(req, res);
	}

	private String processSubmit(HttpServletRequest req, HttpServletResponse res) throws Exception {

    	 req.setCharacterEncoding("utf-8");
        
        Article2 article = new Article2();
        
        article.setWriter_id(req.getParameter("writer_id")); 
        article.setWriter_name(req.getParameter("name")); 
        article.setTitle(req.getParameter("title"));   
        article.setContent(req.getParameter("content")); 
        article.setPassword(req.getParameter("password"));

        ArticleDao manager = ArticleDao.getInstance();
        
        manager.insertArticle1(article);
        manager.insertArticle2(article);
       
        return "/view/writePro.jsp";
    }
}
---------------------------------------------
package com.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


import command.CommandHandler;

public class WriteFormAction implements CommandHandler{

	@Override
	public String process(HttpServletRequest req, HttpServletResponse res) {
			return processSubmit(req, res);
	}

	private String processSubmit(HttpServletRequest req, HttpServletResponse res) {
        
        return "/view/writeForm.jsp";
    }
}
---------------------------------------------
package com.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;

import com.domain.Article;
import com.domain.Article2;
//import com.util.StringUtil;

public class ArticleDao {

    private static ArticleDao instance =new ArticleDao();
    Article ac = new Article();

    //�̱��� ����
    private ArticleDao(){}
    public static ArticleDao getInstance(){
        return instance;
    }


    //getConnection : JDBC DB���� 
    private Connection getConnection() throws Exception{
        Context initCtx= new InitialContext();
        Context envCtx=(Context)initCtx.lookup("java:comp/env");
        DataSource ds=(DataSource)envCtx.lookup("jdbc/oracle");

        return ds.getConnection();
    }

    //Article 테이블에 넣기
    public void insertArticle1(Article2 article)throws Exception{
    	

        Connection conn= null;
        PreparedStatement pstmt = null;
        String sql=null;
        int cnt = 0;
        try{
            conn= getConnection();
			sql = "insert into ARTICLE (article_no, writer_id, writer_name, title, moddate, regdate, read_cnt, password) " 
                + "values(article_no_seq.nextval,1,?,?,sysdate,sysdate,0,?)";
            
            System.out.println("query:"+sql);
            pstmt = conn.prepareStatement(sql);
            System.out.println(article.getTitle());
            System.out.println(article.getWriter_name());
            System.out.println(article.getPassword());
            pstmt.setString(++cnt, article.getWriter_name());
            pstmt.setString(++cnt, article.getTitle());
            pstmt.setString(++cnt, article.getPassword());
            pstmt.executeUpdate();
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            execClose(null,pstmt,conn);
        }
    }
    
    //Article_content 테이블에 넣기
    public void insertArticle2(Article2 article)throws Exception{

        Connection conn= null;
        PreparedStatement pstmt = null;
        String sql2=null;
        int cnt = 0;        

        try{
            conn= getConnection();
            sql2 = "insert into ARTICLE_content (article_no, content) " 
                    + "values(article_no_seq.currval,?)";
            System.out.println("query:"+sql2);
            pstmt = conn.prepareStatement(sql2);
            pstmt.setString(++cnt, article.getContent());             
            pstmt.executeUpdate();
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            execClose(null,pstmt,conn);
        }
    }
    
    
    //�۰���
    public int getArticleCount(String keyField,String keyWord)throws Exception{
        Connection conn= null;
        PreparedStatement pstmt =null;
        ResultSet rs= null;
        int count =0;
        String sql =null;
        
        try{
            conn=getConnection();
            if(keyWord == null || "".equals(keyWord.trim())){
                sql="select count(*) from ARTICLE";
                pstmt =conn.prepareStatement(sql);
            }else{
                sql="select count(*) from ARTICLE where "+keyField+" like ?";
                pstmt =conn.prepareStatement(sql);
                pstmt.setString(1, "%"+keyWord+"%");
            }
            rs =pstmt.executeQuery();
            if (rs.next()){
                count =rs.getInt(1);
            }
        }catch(Exception ex){
            ex.printStackTrace();
        }finally{
            execClose(rs,pstmt,conn);
        }            
        return count;
    }
    
    //����Ʈ�̱�
    public List<Article> getArticles(int startRow, int endRow, String keyField,String keyWord)throws Exception{
        Connection conn= null;
        PreparedStatement pstmt =null;
        ResultSet rs= null;
        List<Article> list =null;
        String sql=null;
        
        try{
            conn =getConnection();
            if(keyWord == null || "".equals(keyWord.trim())){
                sql ="select * from (select a.*, rownum rnum from (select * from ARTICLE order by article_no desc)a) where rnum >=? and rnum <=?";
                pstmt =conn.prepareStatement(sql);            
                pstmt.setInt(1, startRow);
                pstmt.setInt(2, endRow);    
            }else{
                sql ="select * from(select a.*, rownum rnum from(select * from ARTICLE where "+keyField+" like ? order by article_no desc)a) where rnum >=? and rnum <=?";
                pstmt =conn.prepareStatement(sql);    
                pstmt.setString(1, "%"+keyWord+"%");
                pstmt.setInt(2, startRow);
                pstmt.setInt(3, endRow);
            }
            rs = pstmt.executeQuery();
            if(rs.next()){
                list= new ArrayList<Article>();                
                do{
                    Article article =new Article();
                    article.setArticle_no(rs.getInt("article_no"));
                    article.setTitle(rs.getString("title"));
                    article.setWriter_name(rs.getString("writer_name"));                                     
                    article.setRead_cnt(rs.getInt("read_cnt"));
                    article.setRegdate(rs.getTimestamp("regdate"));
                  
                    list.add(article);
                }while(rs.next());
            }else{
                list = Collections.EMPTY_LIST;
            }            
        }catch(Exception ex){
            ex.printStackTrace();
        }finally{
            execClose(rs,pstmt,conn);
        }        
        return list;
    }
    
    //��������
//    public Article getArticle(int num)throws Exception{
//        Connection conn =null;
//        PreparedStatement  pstmt= null;
//        ResultSet rs = null;
//        Article article =null;
//        String sql=null;
//        
//        try{
//            conn=getConnection();
//            sql ="select * from ARTICLE where article_no = ? ";
//
//            pstmt=conn.prepareStatement(sql);
//            pstmt.setInt(1, num);
//            rs=pstmt.executeQuery();
//            
//            if(rs.next()){
//                article =new Article();
//                article.setArticle_no(rs.getInt("article_no"));
//                article.setWriter_id(rs.getString("writer_id"));
//                article.setWriter_name(rs.getString("writer_name"));
//                article.setTitle(rs.getString("title"));
//                article.setRegdate(rs.getTimestamp("regdate"));
//                article.setModdate(rs.getTimestamp("moddate"));                   
//                article.setRead_cnt(rs.getInt("read_cnt"));
//                article.setContent(StringUtil.clobToString(rs,"content"));
//            }
//        }catch(Exception ex){
//            ex.printStackTrace();
//        }finally{
//            execClose(rs,pstmt,conn);
//        }
//        return article;
//    }

    //execClose : �ڿ�����
    public void execClose(ResultSet rs, PreparedStatement pstmt, Connection conn)throws Exception{
        if(rs !=null) try{rs.close();}catch(SQLException sqle){}
        if(pstmt !=null) try{pstmt.close();}catch(SQLException sqle){}
        if(conn !=null) try{conn.close();}catch(SQLException sqle){}
    }
}
---------------------------------------------
package com.domain;

import java.sql.Timestamp;

public class Article {
    
    private int article_no;
    private String writer_id;
    private String writer_name;
    private String title;
    private Timestamp regdate;
    private Timestamp moddate;
    private int read_cnt;
    private String content;
    
    public int getArticle_no() {
		return article_no;
	}
	public void setArticle_no(int article_no) {
		this.article_no = article_no;
	}
	public String getWriter_id() {
		return writer_id;
	}
	public void setWriter_id(String writer_id) {
		this.writer_id = writer_id;
	}
	public String getWriter_name() {
		return writer_name;
	}
	public void setWriter_name(String writer_name) {
		this.writer_name = writer_name;
	}
	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
	public Timestamp getRegdate() {
		return regdate;
	}
	public void setRegdate(Timestamp regdate) {
		this.regdate = regdate;
	}
	public Timestamp getModdate() {
		return moddate;
	}
	public void setModdate(Timestamp moddate) {
		this.moddate = moddate;
	}
	public int getRead_cnt() {
		return read_cnt;
	}
	public void setRead_cnt(int read_cnt) {
		this.read_cnt = read_cnt;
	}
	public String getContent() {
		return content;
	}
	public void setContent(String content) {
		this.content = content;
	}
	
    
    
   
	
 
    
    
 
}
---------------------------------------------
package com.domain;

public class Article2 {

	
	 private String writer_name;
	 private String title;
	 private String content;
	 private String writer_id;
	 
	 private int article_no;
	 
	 private String password; // 게시글비밀번호
	 
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public int getArticle_no() {
		return article_no;
	}
	public void setArticle_no(int article_no) {
		this.article_no = article_no;
	}
	public String getWriter_id() {
		return writer_id;
	}
	public void setWriter_id(String writer_id) {
		this.writer_id = writer_id;
	}
	public String getWriter_name() {
		return writer_name;
	}
	public void setWriter_name(String writer_name) {
		this.writer_name = writer_name;
	}
	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
	public String getContent() {
		return content;
	}
	public void setContent(String content) {
		this.content = content;
	}
}
---------------------------------------------
package com.domain;

public class ArticlePage {
    
    private int count;
    private int pageSize;
    private int currentPage;
    private int number;
    private String keyField;
    private String keyWord;
    
    
    public int getCount() {
        return count;
    }
    public void setCount(int count) {
        this.count = count;
    }
    public int getPageSize() {
        return pageSize;
    }
    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }
    public int getCurrentPage() {
        return currentPage;
    }
    public void setCurrentPage(int currentPage) {
        this.currentPage = currentPage;
    }
    public int getNumber() {
        return number;
    }
    public void setNumber(int number) {
        this.number = number;
    }    
    public String getKeyField() {
        return keyField;
    }
    public void setKeyField(String keyField) {
        this.keyField = keyField;
    }
    public String getKeyWord() {
        return keyWord;
    }
    public void setKeyWord(String keyWord) {
        this.keyWord = keyWord;
    }        
}



---------------------------------------------
package command;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.RequestDispatcher;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import dao.ArticleVO;
import dao.BoardDAO;
import dao.ViewRequest;
import dao.ViewService;

public class ViewHandler implements CommandHandler {
	
	private static final String FORM_VIEW = "/contentdetail.jsp";
	private ViewService viewService = new ViewService();
	ArticleVO articleVO;
	ViewRequest viewReq;
	
	@Override
	public String process(HttpServletRequest req, HttpServletResponse res) {
			return processSubmit(req, res);
	}

	private String processSubmit(HttpServletRequest req, HttpServletResponse res) {
		
		System.out.println("viewHandler 실행");
		
		try {
			req.setCharacterEncoding("utf-8");
		} catch (UnsupportedEncodingException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		
		res.setContentType("text/html; charset=utf-8");
		String action = req.getPathInfo();
		System.out.println("action:" + action);
		
		String article_no = req.getParameter("article_no");
		
		try {
			List<ArticleVO> articlesList = new ArrayList<ArticleVO>();
			
				article_no = req.getParameter("article_no");
				articleVO = viewService.viewArticle(Integer.parseInt(article_no));
				req.setAttribute("article", articleVO);
				req.setAttribute("article_no", article_no);
		} catch (Exception e) {
			e.printStackTrace();
		}
        
        return "/contentdetail.jsp?article_no='" + article_no + "'";
		
	}

}
---------------------------------------------
package dao;

import java.sql.Connection;
import java.sql.SQLException;

import javax.naming.NamingException;

import jdbc.JdbcUtil;
import jdbc.connection.ConnectionProvider;

public class ViewService {
	private BoardDAO boardDAO = new BoardDAO();
	private ArticleVO articleVO = new ArticleVO();

	public ViewService() {
		boardDAO = new BoardDAO();
		articleVO = new ArticleVO();
	}
	
	// 글 상세정보
	public ArticleVO viewArticle(int article_no) {
		ArticleVO article = null;
		article = boardDAO.selectArticle(article_no, 0);
		return article;
	}

}
---------------------------------------------
package dao;

import java.sql.Date;
import java.util.Map;

public class ViewRequest {
	
	private int article_no; // 게시글 번호
	private String writer_id; // 등록자 Id
	private String name; // member테이블의 name
	private String title; // 제목
	private Date regdate; // 등록일시
	private Date moddate; // 수정일시
	private int read_cnt; // 조회수 count
	
	// article_content 테이블
	private String content; // 게시내용
	
	public int getArticle_no() {
		return article_no;
	}

	public void setArticle_no(int article_no) {
		this.article_no = article_no;
	}

	public String getWriter_id() {
		return writer_id;
	}

	public void setWriter_id(String writer_id) {
		this.writer_id = writer_id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public Date getRegdate() {
		return regdate;
	}

	public void setRegdate(Date regdate) {
		this.regdate = regdate;
	}

	public Date getModdate() {
		return moddate;
	}

	public void setModdate(Date moddate) {
		this.moddate = moddate;
	}

	public int getRead_cnt() {
		return read_cnt;
	}

	public void setRead_cnt(int read_cnt) {
		this.read_cnt = read_cnt;
	}

	public String getContent() {
		return content;
	}

	public void setContent(String content) {
		this.content = content;
	}

}
---------------------------------------------
package command;

import java.io.UnsupportedEncodingException;

import javax.servlet.RequestDispatcher;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import dao.ArticleVO;
import dao.BoardDAO;
import dao.ModRequest;
import dao.ModService;
import dao.ViewRequest;

public class ModHandler implements CommandHandler {
	
	private static final String FORM_VIEW = "/contentalter.jsp";
	private ModService modService = new ModService();
	ArticleVO articleVO;
	ModRequest modReq;

	@Override
	public String process(HttpServletRequest req, HttpServletResponse res) {
			return processSubmit(req, res);
	}

	private String processSubmit(HttpServletRequest req, HttpServletResponse res) {
		
		System.out.println("modHandler 실행");
		try {
			req.setCharacterEncoding("utf-8");
		} catch (UnsupportedEncodingException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		ModRequest modReq = new ModRequest();
		modReq.setArticle_no(Integer.parseInt(req.getParameter("article_no")));
		modReq.setTitle(req.getParameter("title"));
		modReq.setContent(req.getParameter("content"));
		
        
        String article_no = req.getParameter("article_no");
        
        try {
    			article_no = req.getParameter("article_no");
				modService.mod(modReq);
				articleVO = modService.viewArticle(Integer.parseInt(article_no));
				req.setAttribute("article", articleVO);
				req.setAttribute("article_no", article_no);
        
		} catch (Exception e) {
			e.printStackTrace();
		}
        
        return "/contentdetail.jsp?article_no=" + article_no;
		
	}

}
---------------------------------------------
package dao;

import java.lang.reflect.Member;
import java.sql.Connection;
import java.sql.Date;
import java.sql.SQLException;

import javax.naming.NamingException;

import jdbc.JdbcUtil;
import jdbc.connection.ConnectionProvider;

public class ModService {
	private BoardDAO boardDAO = new BoardDAO();
	private ArticleVO articleVO = new ArticleVO();

	public ModService() {
		boardDAO = new BoardDAO();
		articleVO = new ArticleVO();
	}

	public void mod(ModRequest modReq) {
			try {
				boardDAO.update1(modReq);
				boardDAO.update2(modReq);
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
	}
	
	public ArticleVO viewArticle(int article_no) { // 업데이트된 글 가져오는 메소드
		ArticleVO article = null;
		article = boardDAO.selectArticle(article_no, 0);
		return article;
	}
	
}
---------------------------------------------
package dao;

import java.sql.Date;


public class ModRequest {
	
	private int article_no; // 게시글 번호
	private String title; // 제목
	private Date moddate; // 수정일시
	
	private String content; // 게시내용
	
	 private String password; // 게시글 비밀번호

	 
	 

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public int getArticle_no() {
		return article_no;
	}

	public void setArticle_no(int article_no) {
		this.article_no = article_no;
	}

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public Date getModdate() {
		return moddate;
	}

	public void setModdate(Date moddate) {
		this.moddate = moddate;
	}

	public String getContent() {
		return content;
	}

	public void setContent(String content) {
		this.content = content;
	}

}
---------------------------------------------
package command;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import dao.ArticleVO;
import dao.BoardDAO;
import dao.ModRequest;
import dao.ViewRequest;
import dao.RemoveService;

public class RemoveHandler implements CommandHandler {
	
	private static final String FORM_VIEW = "/delProc.jsp";
	private RemoveService removeService = new RemoveService();
	ArticleVO articleVO;
	ModRequest modReq;

	@Override
	public String process(HttpServletRequest req, HttpServletResponse res) {
			return processSubmit(req, res);
	}

	private String processSubmit(HttpServletRequest req, HttpServletResponse res) {
		
		System.out.println("removeHandler 실행");
		
		try {
			req.setCharacterEncoding("utf-8");
		} catch (UnsupportedEncodingException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		int article_no = Integer.parseInt(req.getParameter("article_no"));
        
			
        try {
				articleVO = removeService.deleteArticle(article_no);
				req.setAttribute("article", articleVO);
				req.setAttribute("article_no", article_no);
		} catch (Exception e) {
			e.printStackTrace();
		}
        
        req.setAttribute("article_no", article_no);
        
        return "/list.do";
			
	}

}
---------------------------------------------

package dao;

import java.util.List;

public class RemoveService {
	
	private BoardDAO boardDAO = new BoardDAO();
	private ArticleVO articleVO = new ArticleVO();

	public RemoveService() {
		boardDAO = new BoardDAO();
		articleVO = new ArticleVO();
	}
	
//	public boolean chk(int article_no, String password) {
//		boolean result = boardDAO.PwdCheck(article_no, password);
//		return result;
//	}
	
	public ArticleVO deleteArticle(int article_no) {
		ArticleVO article = null;
		article = boardDAO.deleteArticle1(article_no);
		article = boardDAO.deleteArticle2(article_no);
		return article;
	}

}

---------------------------------------------
package dao;

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.List;


import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

import jdbc.JdbcUtil;
import jdbc.connection.ConnectionProvider;
import member.model.Member;

public class BoardDAO {
	private DataSource dataFactory;
	Connection conn;
	PreparedStatement pstmt;
	
	private static BoardDAO instance = new BoardDAO();

	public static BoardDAO getInstance() {
		if (instance == null)              
		   instance = new BoardDAO();
		return instance;
	}

	public BoardDAO() {
		try {
			Context ctx = new InitialContext();
			Context envContext = (Context) ctx.lookup("java:/comp/env");
			dataFactory = (DataSource) envContext.lookup("jdbc/oracle");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public ArticleVO selectArticle(int article_no, int i){ // 게시글 상세 정보 조회 메소드
		ArticleVO article=new ArticleVO();
		try{
		conn = dataFactory.getConnection();
		
		if(i!=-1) { //조회수 증가 메소드
			String query = "update article set read_cnt = read_cnt+1 where article_no = " + article_no;
			System.out.println(query);
			pstmt = conn.prepareStatement(query);
			pstmt.executeUpdate();
		}
		
		String query ="select a.article_no, a.writer_id, a.writer_name, a.title, ac.content, a.regdate, a.moddate, a.read_cnt"
			                     +" from article a, article_content ac" 
			                     +" where a.article_no = ac.article_no"
								 +" and a.article_no=?";
		System.out.println(query);
		pstmt = conn.prepareStatement(query);
		pstmt.setInt(1, article_no);
		ResultSet rs =pstmt.executeQuery();
		rs.next();
		int _article_no =rs.getInt("article_no");
		String writer_id = rs.getString("writer_id");
		String writer_name = rs.getString("writer_name");
		String title = rs.getString("title");
		Date regdate = rs.getDate("regdate");
		Date moddate = rs.getDate("moddate");
		int read_cnt = rs.getInt("read_cnt");
		String content = rs.getString("content");

		article.setArticle_no(_article_no);
		article.setWriter_id(writer_id);
		article.setWriter_name(writer_name);
		article.setTitle(title);
		article.setRegdate(regdate);
		article.setModdate(moddate);
		article.setRead_cnt(read_cnt);
		article.setContent(content);
		rs.close();
		pstmt.close();
		conn.close();
		}catch(Exception e){
		e.printStackTrace();	
		}
		return article;
		}
	
	public boolean PwdCheck(int article_no, String password) { // 게시글 수정, 삭제시 확인 - passChkProc.jsp 에서 사용
		String pwd="";
		boolean result = false;
		try {
			conn = dataFactory.getConnection();
			String query = "select password from article";
				query += " where article_no='"+article_no+"'";
			pstmt = conn.prepareStatement(query);
			System.out.println("prepareStatement:" + query);
			ResultSet rs = pstmt.executeQuery();
			rs.next();
			pwd = rs.getString("password");
			System.out.println(pwd);
			rs.close();
			pstmt.close();
			conn.close();
		}catch(Exception e){
			e.printStackTrace();
		}
		result = password.equals(pwd);
		System.out.println("password : "+password + "//pwd : "+pwd);
		System.out.println("result결과 : "+result);
		return result;
	}
	
	public void update1(ModRequest modReq) throws SQLException { // 게시글 제목, 수정일시 수정 메소드
		conn = dataFactory.getConnection();
		try {
			conn = dataFactory.getConnection();
			String query2 = "update article set title='" + modReq.getTitle() + "'";
			query2 += ", moddate=?";
			query2 += " where article_no=" + modReq.getArticle_no() ;

			System.out.println(query2);
			pstmt = conn.prepareStatement(query2);
			pstmt.setTimestamp(1, new java.sql.Timestamp(System.currentTimeMillis()));
			pstmt.executeUpdate();
			pstmt.close();
			conn.close();
			} catch (Exception e) {
			e.printStackTrace();
		}
				
	}
	
	public void update2(ModRequest modReq) throws SQLException { // 게시글 내용 수정 메소드
		try {
			conn = dataFactory.getConnection();
			String query1 = "update article_content set content='" + modReq.getContent() + "'";
			query1 += " where article_no=" + modReq.getArticle_no() ;
	
			System.out.println(query1);
			pstmt = conn.prepareStatement(query1);
			pstmt.executeUpdate();
			pstmt.close();
			conn.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}
	
	public ArticleVO deleteArticle1(int article_no) { // 게시글 제목삭제 메소드
		ArticleVO article = new ArticleVO();
		try {
			conn = dataFactory.getConnection();
			String query1 = "DELETE FROM article WHERE article_no=" + article_no;
			System.out.println(query1);
			pstmt = conn.prepareStatement(query1);
			pstmt.executeUpdate();
			pstmt.close();
			conn.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return article;
	}
	
	public ArticleVO deleteArticle2(int article_no) { // 게시글 내용삭제 메소드
		ArticleVO article = new ArticleVO();
		try {
			conn = dataFactory.getConnection();
			String query2 = "DELETE FROM article_content WHERE article_no=" + article_no;
			System.out.println(query2);
			pstmt = conn.prepareStatement(query2);
			pstmt.executeUpdate();
			pstmt.close();
			conn.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return article;
	}
	
}
---------------------------------------------
package dao;

import java.sql.Date;

public class ArticleVO {
	// article 테이블
	private int article_no; // 게시글 번호
	private String writer_id; // 등록자 Id
	private String writer_name; // 등록자 이름
	private String title; // 제목
	private Date regdate; // 등록일시
	private Date moddate; // 수정일시
	private int read_cnt; // 조회수 count
	
	// article_content 테이블
	private String content; // 게시내용
	
	public ArticleVO() {
		
	}

	public ArticleVO(int article_no, String writer_id, String writer_name, String title, Date regdate, Date moddate,
			int read_cnt, String content) {
		this.article_no = article_no;
		this.writer_id = writer_id;
		this.writer_name = writer_name;
		this.title = title;
		this.regdate = regdate;
		this.moddate = moddate;
		this.read_cnt = read_cnt;
		this.content = content;
	}

	public int getArticle_no() {
		return article_no;
	}

	public void setArticle_no(int article_no) {
		this.article_no = article_no;
	}

	public String getWriter_id() {
		return writer_id;
	}

	public void setWriter_id(String writer_id) {
		this.writer_id = writer_id;
	}

	public String getWriter_name() {
		return writer_name;
	}

	public void setWriter_name(String writer_name) {
		this.writer_name = writer_name;
	}

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public Date getRegdate() {
		return regdate;
	}

	public void setRegdate(Date regdate) {
		this.regdate = regdate;
	}

	public Date getModdate() {
		return moddate;
	}

	public void setModdate(Date moddate) {
		this.moddate = moddate;
	}

	public int getRead_cnt() {
		return read_cnt;
	}

	public void setRead_cnt(int read_cnt) {
		this.read_cnt = read_cnt;
	}

	public String getContent() {
		return content;
	}

	public void setContent(String content) {
		this.content = content;
	}

}

---------------------------------------------

============================= 3. 방명록 ============================= 
<%@ page language="java" contentType="text/html; charset=UTF-8"
    import="java.util.*"
    import="guestbook.dao.*"
    pageEncoding="UTF-8"
    %>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>방명록</title>
</head>
<body>
<h3 align="left">방명록</h3>
<div style="border:1px solid; padding:5px; width:270px;background-color:ivory; text-align:center">
	<span style="font-weight: bold;">[ 방명록 등록 ]</span>
	<form name="addGuest" method="post" action="/BBS/addGuest.do"  encType="UTF-8">
	이름 : <input type="text" name ="guest_name"><br>
	암호 : <input type="password" name ="password"><br>	
	-------------메시지---------------
	<br><textarea rows="5" cols="30" name="message"></textarea><br>
	<input type="submit" value="등록">
	<input type="reset" value="다시입력">
	<input type="hidden" name="command" value="addGuest">
	<input type="reset" value="새로고침" onclick="location.href='/BBS/view/guestbook.jsp'">
	<c:if test="${isLogon }">
		<input type="button" value="메인으로" onClick="location.href='/BBS/loginafter.jsp'">
	</c:if>
	<c:if test="${!isLogon }">
		<input type="button" value="메인으로" onClick="location.href='/BBS/main.jsp'">
	</c:if>
	</form>
	</div>
	<%
		int pageNumber = 1;
		if(request.getParameter("pageNumber")!=null){
			pageNumber = Integer.parseInt(request.getParameter("pageNumber"));
		}
		request.setCharacterEncoding("utf-8");
		MessageList msgList = new MessageList();
		List guestList = new ArrayList();	
		guestList = msgList.message(pageNumber);
	%>
	<c:set var="guestList" value="<%=guestList %>"/>
	<br><table border=1 width=400 align=left>
	<c:forEach var="guest" items="${guestList }">
		<tr  bgcolor="#F8ECE0">
			<td>메시지 번호 : ${guest.messageId}<br>
			손님 이름 :	${guest.name}<br>
			메시지 :${guest.message}<br>
			<a href='/BBS/view/deletePwd.jsp?messageId=${guest.messageId }'>삭제</a>
			<a href='/BBS/view/modifyPwd.jsp?messageId=${guest.messageId }'>수정</a>
			</td>
		</tr>
	</c:forEach> 
		<tr bgcolor="#F6D8CE"><td align="center">
			<c:forEach var="pageNum" begin="1" end="<%=msgList.pageTotalCount() %>">
				<a href="/BBS/view/guestbook.jsp?pageNumber=${pageNum}">[${pageNum}]</a>
			</c:forEach>
		</td></tr>
	</table>
</body>
</html>
---------------------------------------------
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>방명록 등록 성공 페이지</title>
</head>
<body>
<c:if test="${'false'==check }">
	<h3>메시지 등록 실패</h3>
</c:if>
<c:if test="${'false'!=check }">
	<h3>방명록에 메시지를 남겼습니다.</h3>
</c:if>
<a href='/BBS/view/guestbook.jsp'>[목록 보기]</a>
</body>
</html>
---------------------------------------------
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%
	request.setCharacterEncoding("utf-8");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>방명록 등록 성공 페이지</title>
</head>
<body>
<c:if test="${'false'==check }">
	<h3>비밀번호가 일치하지 않습니다!</h3>
</c:if>
<c:if test="${'false'!=check }">
	<h3>메시지를 삭제하였습니다.</h3>
</c:if>

<a href='/BBS/view/guestbook.jsp'>[목록 보기]</a>
</body>
</html>
---------------------------------------------
<%@ 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>
	<div style="border:1px solid; padding:5px; width:270px;background-color:ivory; text-align:center">
	<span style="font-weight: bold;">[ 방명록 수정 ]</span>
	<form name="modifyGuest" method="post" action="/BBS/modify.do"  encType="UTF-8">
	<table>
	<tr><td>이름  : </td><td><input type="text" name ="guest_name" value=${guest_name }></td></tr>
	<tr><td>암호변경 : </td><td><input type="password" name ="password"></td></tr>
	</table>
	-------------메시지---------------
	<br><textarea rows="5" cols="30" name="message" >${message }</textarea><br>
	<input type="submit" value="수정">
	<input type="reset" value="다시입력">
	<input type="hidden" name="messageId" value=${param.messageId }>
	<input type="button" value="목록" onClick="location.href='/BBS/view/guestbook.jsp'">
	</form>
	</div>
</body>
</html>
---------------------------------------------
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>수정 확인</title>
</head>
<body>
	<h3>수정: password check</h3>
	<form name="delGuest" method="post" action="/BBS/modifyCheck.do"
		encType="UTF-8">
		<input type="hidden" name="messageId" value="${param.messageId}">
		암호입력 : <input type="password" name="password"> <input
			type="submit" value="확인"> <input type="reset" value="취소"
			onclick="history.back()">
	</form>
</body>
</html>
---------------------------------------------
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>방명록 암호확인 결과</title>
</head>
<body>
	<h3>비밀번호가 일치하지 않습니다!</h3>
<a href='/BBS/view/guestbook.jsp'>[목록 보기]</a>
</body>
</html>
---------------------------------------------
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>방명록 수정 결과</title>
</head>
<body>
	<h3>방명록 수정이 완료되었습니다!</h3>
<a href='/BBS/view/guestbook.jsp'>[목록 보기]</a>
</body>
</html>
---------------------------------------------
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>삭제 확인</title>
</head>
<body>
	<h3>삭제: password check</h3>
	<form name="delGuest" method="post" action="/BBS/pwdCheck.do"
		encType="UTF-8">
		<input type="hidden" name="messageId" value="${param.messageId}">
		암호입력 : <input type="password" name="password"> <input
			type="submit" value="확인"> <input type="reset" value="취소"
			onclick="history.back()">
	</form>
</body>
</html>
---------------------------------------------
package guestbook.command;

import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import command.CommandHandler;
import guestbook.service.*;
import guestbook.model.*;

public class AddGuestbookHandler implements CommandHandler {
	private static final String FORM_VIEW = "view/addGuestbook.jsp";
	private AddGuestService addGuest = new AddGuestService();

	@Override
	public String process(HttpServletRequest req, HttpServletResponse res) throws UnsupportedEncodingException {
		if (req.getMethod().equalsIgnoreCase("GET")) {
			return processForm(req, res);
		} else if (req.getMethod().equalsIgnoreCase("POST")) {
			return processSubmit(req, res);
		} else {
			res.setStatus(HttpServletResponse.SC_METHOD_NOT_ALLOWED);
			return null;
		}
	}

	private String processForm(HttpServletRequest req, HttpServletResponse res) {
		return FORM_VIEW;
	}

	private String processSubmit(HttpServletRequest req, HttpServletResponse res) throws UnsupportedEncodingException {
		
		req.setCharacterEncoding("utf-8");
		
		GuestbookVO vo = new GuestbookVO();
		String message = req.getParameter("message");
		String name = req.getParameter("guest_name");
		String pwd = req.getParameter("password");
		
		vo.setMessage(message);
		vo.setName(name);
		vo.setPassword(pwd);
		try {
			if((message!=null && message.length()!=0)
					&&(name!=null && name.length()!=0)
					&&(pwd!=null && pwd.length()!=0)) {
				addGuest.add(vo);
				return FORM_VIEW;
			}else {
				throw new Exception();
			}
		} catch (Exception e) {
			req.setAttribute("check", false);
			return FORM_VIEW;
		}
	}

}
---------------------------------------------
package guestbook.service;


import guestbook.dao.GuestbookDAO;
import guestbook.model.GuestbookVO;


public class AddGuestService{
	private GuestbookDAO dao = new GuestbookDAO();

	public void add(GuestbookVO vo) {
		String maxNum =Integer.toString(dao.GuestbookMax());
		vo.setMessageId(maxNum);
		dao.addGuestbook(vo);
	}
}
---------------------------------------------
package guestbook.model;

public class GuestbookVO {
	private String messageId;
	private String name;
	private String password;
	private String message;
	
	public String getMessageId() {
		return messageId;
	}
	public void setMessageId(String messageId) {
		this.messageId = messageId;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public String getMessage() {
		return message;
	}
	public void setMessage(String message) {
		this.message = message;
	}
}
---------------------------------------------
package guestbook.dao;

import java.lang.Character.Subset;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;

import guestbook.model.GuestbookVO;

public class GuestbookDAO {

	private Connection con;
	private PreparedStatement pstmt;
	private DataSource dataFactory;
	
	public GuestbookDAO() {
		try {
			Context ctx = new InitialContext();
			Context envContext = (Context)ctx.lookup("java:/comp/env");
			dataFactory = (DataSource) envContext.lookup("jdbc/oracle");
		} catch(Exception e) {
			e.printStackTrace();
		}
	}
	
	public void addGuestbook(GuestbookVO vo) {
		try {
			con = dataFactory.getConnection();
			String messageId = vo.getMessageId();
			String password = vo.getPassword();
			String name = vo.getName();
			String message = vo.getMessage();
			System.out.println("message ID : "+messageId);
			String query = "insert into guestbook_message";
			query += " (message_id, password, guest_name, message)";
			query += " values(?,?,?,?)";
			System.out.println("prepareStatement : " + query);
			pstmt = con.prepareStatement(query);
			pstmt.setString(1, messageId);
			pstmt.setString(2, password);
			pstmt.setString(3, name);
			pstmt.setString(4, message);
			pstmt.executeUpdate();
			pstmt.close();
		}catch(Exception e) {
			e.printStackTrace();
		}
	}
	
	public List GuestList(int firstRow, int endRow) {
		List list = new ArrayList();
		try {
			con = dataFactory.getConnection();
			String query = "select * ";
				query += " from (select rownum rnum, a.*";
				query += " from guestbook_message a order by message_id desc) ";
				query += "where rnum >= ? and rnum <= ? ";
			pstmt = con.prepareStatement(query);
			pstmt.setInt(1, firstRow);
			pstmt.setInt(2, endRow);
			
			System.out.println("prepareStatement:" + query);
			ResultSet rs = pstmt.executeQuery();
			while (rs.next()) {
				String message_id = rs.getString("message_id");
				String password = rs.getString("password");
				String guest_name = rs.getString("guest_name");
				String message = rs.getString("message");
				GuestbookVO vo = new GuestbookVO();
				vo.setMessageId(message_id);
				vo.setPassword(password);
				vo.setName(guest_name);
				vo.setMessage(message);
				list.add(vo);
			}
			rs.close();
			pstmt.close();
			con.close();
		}catch(Exception e) {
			e.printStackTrace();
		}
		return list;
	}
	
	public GuestbookVO SelectById(String id) {
		GuestbookVO vo = new GuestbookVO();
		try {
			con = dataFactory.getConnection();
			String query = "select * ";
				query += " from guestbook_message";
				query += " where message_id=?";
			pstmt = con.prepareStatement(query);
			pstmt.setString(1, id);
			System.out.println("prepareStatement:" + query);
			ResultSet rs = pstmt.executeQuery();
			rs.next();
			String message_id = rs.getString("message_id");
			String password = rs.getString("password");
			String guest_name = rs.getString("guest_name");
			String message = rs.getString("message");
			vo.setMessageId(message_id);
			vo.setPassword(password);
			vo.setName(guest_name);
			vo.setMessage(message);
			rs.close();
			pstmt.close();
			con.close();
		}catch(Exception e) {
			e.printStackTrace();
		}
		return vo;
	}
	
	public void GuestbookDelete(GuestbookVO vo) {
		String message_id = vo.getMessageId();
		try {
			System.out.println("delete 메소드 실행 : " + message_id);
			con = dataFactory.getConnection();
			String query = "delete from guestbook_message";
				query += " where message_id='"+message_id+"'";
			System.out.println("prepareStatement : "+  query);
			pstmt = con.prepareStatement(query);
			pstmt.executeUpdate();
			pstmt.close();
		}catch(Exception e) {
			e.printStackTrace();
		}
	}
	
	public boolean PwdCheck(GuestbookVO vo) {	
		String id = vo.getMessageId();
		String delPwd = vo.getPassword();
		String pwd="";
		boolean result = false;
		try {
			con = dataFactory.getConnection();
			String query = "select password from guestbook_message";
				query += " where message_id='"+id+"'";
			pstmt = con.prepareStatement(query);
			System.out.println("prepareStatement:" + query);
			ResultSet rs = pstmt.executeQuery();
			rs.next();
			pwd = rs.getString("password");
			rs.close();
			pstmt.close();
			con.close();
		}catch(Exception e){
			e.printStackTrace();
		}
		result = delPwd.equals(pwd);
		System.out.println("delpwd : "+delPwd + "//pwd : "+pwd);
		System.out.println("result결과 : "+result);
		return result;
	}
	
	public int GuestbookMax() {
		System.out.println("guestbookmax실행");
		String max = "0";
		try {
			con = dataFactory.getConnection();
			String query = "select MAX(message_id) as max from guestbook_message";
			pstmt = con.prepareStatement(query);
			System.out.println("prepareStatement:" + query);
			ResultSet rs = pstmt.executeQuery();
			while (rs.next()) {
				max = rs.getString("max");
			}
			rs.close();
			pstmt.close();
			con.close();
			return Integer.parseInt(max)+1;
		}catch(Exception e) {
			return 1;
		}
	}
	
	public int GuestbookNum() {
		String num = "0";
		try {
			con = dataFactory.getConnection();
			String query = "select COUNT(message_id) as num "
					+ "from guestbook_message";
			pstmt = con.prepareStatement(query);
			System.out.println("prepareStatement:" + query);
			ResultSet rs = pstmt.executeQuery();
			while (rs.next()) {
				num = rs.getString("num");
			}
			rs.close();
			pstmt.close();
			con.close();
		}catch(Exception e) {
			e.printStackTrace();
		}
		return Integer.parseInt(num);
	}
	
	public boolean Modified(GuestbookVO vo) {
		String id = vo.getMessageId();
		String message = vo.getMessage();
		String name = vo.getName();
		String password = vo.getPassword();
		try {
			con = dataFactory.getConnection();
			String query = "UPDATE guestbook_message SET";
			if((name!=null)&&(name!="")) {
				query +=" guest_name='"+name+"',";
			}if((message!=null)&&(message!="")) {
				query +=" message='"+message+"',";
			}if((password!=null)&&(password!="")) {
				query +=" password='"+password+"',";
			}
				query = query.substring(0, query.length()-1);
				query += " WHERE message_id='"+id+"'";
			System.out.println("prepareStatement : " + query);
			pstmt = con.prepareStatement(query);
			pstmt.executeUpdate();
			pstmt.close();
		}catch(Exception e) {
			e.printStackTrace();
			return false;
		}
		return true;
	}
	
}
---------------------------------------------
package guestbook.dao;


import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import guestbook.model.GuestbookVO;

public class MessageList {
	private static final int MESSAGE_COUNT_PER_PAGE = 3;
	GuestbookDAO dao = new GuestbookDAO();
	
	public List message(int pageNumber) {
		List list = new ArrayList();
		int messageTotalCount = dao.GuestbookNum();
		int currentPageNumber = pageNumber;
		try {
			int firstRow = 0;
			int endRow = 0;
			if (messageTotalCount > 0) {
				firstRow = (pageNumber - 1) * MESSAGE_COUNT_PER_PAGE + 1;
				endRow = firstRow + MESSAGE_COUNT_PER_PAGE - 1;
				list = dao.GuestList(firstRow, endRow);
			} else {
				currentPageNumber = 0;
				list = Collections.emptyList();
			}
		}catch(Exception e) {
			e.printStackTrace();
		}
		return list;
	}
	
	public int pageTotalCount() {
		int messageTotalCount = dao.GuestbookNum();
		int pageNum = messageTotalCount / 3;
		if(pageNum == 0) {
			return 1;
		}else if((pageNum !=0) && (messageTotalCount%3==0)) {
			return pageNum;
		}else {
			return pageNum+1;
		}
	}
}
---------------------------------------------
package guestbook.command;

import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import command.CommandHandler;
import guestbook.service.*;
import guestbook.model.*;


public class ModifyHandler implements CommandHandler{
	private static final String FORM_VIEW = "view/modifyResult.jsp";
	private GuestModifyService checkService = new GuestModifyService();
	
	@Override
	public String process(HttpServletRequest req, HttpServletResponse res) throws UnsupportedEncodingException {
		if (req.getMethod().equalsIgnoreCase("GET")) {
			return processForm(req, res);
		} else if (req.getMethod().equalsIgnoreCase("POST")) {
			return processSubmit(req, res);
		} else {
			res.setStatus(HttpServletResponse.SC_METHOD_NOT_ALLOWED);
			return null;
		}
	}

	private String processForm(HttpServletRequest req, HttpServletResponse res) {
		return FORM_VIEW;
	}

	private String processSubmit(HttpServletRequest req, HttpServletResponse res) throws UnsupportedEncodingException {
		
		req.setCharacterEncoding("utf-8");
		
		GuestbookVO vo = new GuestbookVO();
		vo.setMessageId(req.getParameter("messageId"));
		vo.setMessage(req.getParameter("message"));
		vo.setPassword(req.getParameter("password"));
		vo.setName(req.getParameter("guest_name"));
		System.out.println(vo.getName());
		if(checkService.modify(vo)) {
			return FORM_VIEW;
		}else {
			req.setAttribute("check", false);
			return FORM_VIEW;
		}
	}
}
---------------------------------------------
package guestbook.command;

import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import command.CommandHandler;
import guestbook.service.*;
import guestbook.model.*;


public class ModifyCheckHandler implements CommandHandler{
	private static final String FORM_VIEW = "view/guestModify.jsp";
	private GuestModifyService checkService = new GuestModifyService();
	
	@Override
	public String process(HttpServletRequest req, HttpServletResponse res) throws UnsupportedEncodingException {
		if (req.getMethod().equalsIgnoreCase("GET")) {
			return processForm(req, res);
		} else if (req.getMethod().equalsIgnoreCase("POST")) {
			return processSubmit(req, res);
		} else {
			res.setStatus(HttpServletResponse.SC_METHOD_NOT_ALLOWED);
			return null;
		}
	}

	private String processForm(HttpServletRequest req, HttpServletResponse res) {
		return FORM_VIEW;
	}

	private String processSubmit(HttpServletRequest req, HttpServletResponse res) throws UnsupportedEncodingException {
		
		req.setCharacterEncoding("utf-8");
		
		GuestbookVO vo = new GuestbookVO();
		vo.setMessageId(req.getParameter("messageId"));
		vo.setPassword(req.getParameter("password"));
		if(checkService.modifyCheck(vo)) {
			vo = checkService.selectById(vo.getMessageId());
			req.setAttribute("guest_name", vo.getName());
			req.setAttribute("message", vo.getMessage());
			return FORM_VIEW;
		}else {
			return "view/modifyPwdFalse.jsp";
		}
	}
}
---------------------------------------------
package guestbook.service;

import guestbook.dao.GuestbookDAO;
import guestbook.model.GuestbookVO;

public class GuestModifyService {
	private GuestbookDAO dao = new GuestbookDAO();

	public boolean modifyCheck(GuestbookVO vo) {
		boolean result = dao.PwdCheck(vo);
		if(result) {
			return true;
		}
		return false;
	}
	
	public boolean modify(GuestbookVO vo) {
		boolean result = dao.Modified(vo);
		if(result) {
			return true;
		}
		return false;
	}
	public GuestbookVO selectById(String message_id) {
		GuestbookVO vo = dao.SelectById(message_id);
		return vo;
	}
	
}
---------------------------------------------
package guestbook.command;

import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import command.CommandHandler;
import guestbook.service.*;
import guestbook.model.*;

public class PwdCheckHandler implements CommandHandler {
	private static final String FORM_VIEW = "view/deleteGuestbook.jsp";
	private PwdCheckService checkService = new PwdCheckService();

	@Override
	public String process(HttpServletRequest req, HttpServletResponse res) throws UnsupportedEncodingException {
		if (req.getMethod().equalsIgnoreCase("GET")) {
			return processForm(req, res);
		} else if (req.getMethod().equalsIgnoreCase("POST")) {
			return processSubmit(req, res);
		} else {
			res.setStatus(HttpServletResponse.SC_METHOD_NOT_ALLOWED);
			return null;
		}
	}

	private String processForm(HttpServletRequest req, HttpServletResponse res) {
		return FORM_VIEW;
	}

	private String processSubmit(HttpServletRequest req, HttpServletResponse res) throws UnsupportedEncodingException {
		req.setCharacterEncoding("utf-8");
		
		GuestbookVO vo = new GuestbookVO();
		vo.setMessageId(req.getParameter("messageId"));
		vo.setPassword(req.getParameter("password"));
		if(checkService.delete(vo)) {
			return FORM_VIEW;
		}else {
			req.setAttribute("check", false);
			return FORM_VIEW;
		}
	}
}
---------------------------------------------
package guestbook.service;

import guestbook.dao.GuestbookDAO;
import guestbook.model.GuestbookVO;

public class PwdCheckService{
	private GuestbookDAO dao = new GuestbookDAO();

	public boolean delete(GuestbookVO vo) {
		boolean result = dao.PwdCheck(vo);
		if(result) {
			dao.GuestbookDelete(vo);
			return true;
		}
		return false;
	
	}
}



---------------------------------------------

'Bitcamp > BITCAMP - Servlet & JSP' 카테고리의 다른 글

14일차  (0) 2019.08.27
13일차  (0) 2019.08.26
12일차  (0) 2019.08.19
11일차  (0) 2019.08.14
10일차  (0) 2019.08.13
And