주요 기능 : 회원가입, 로그인, 방명록, 글쓰기, 글수정, 글삭제, 페이징
============================= 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>
${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">
${name}님 안녕하세요. <a href="logout.do" onclick="fn_logout()">[로그아웃하기]</a>
<a href = "/BBS/changepw.do">[암호변경하기]</a><br><br>
<a href = "/BBS/view/guestbook.jsp">방명록</a><br>
<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;
}
}
---------------------------------------------