---------------------------------------------------------
상담 게시판 답변글 처리
- 답변글 목록 출력 및 내용 보기 페이지 작성
//ConsultationDTO.java
package com.test;
public class ConsultationDTO {
private String sid, name, pw, title, content, wdate;
//-----------------------------
//답변글 읽어오는 전용 변수 추가
private String rid;
public String getRid() {
return rid;
}
public void setRid(String rid) {
this.rid = rid;
}
//-----------------------------
public String getSid() {
return sid;
}
public void setSid(String sid) {
this.sid = sid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPw() {
return pw;
}
public void setPw(String pw) {
this.pw = pw;
}
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;
}
public String getWdate() {
return wdate;
}
public void setWdate(String wdate) {
this.wdate = wdate;
}
}
//ConsultationDAO.java
package com.test;
import java.sql.*;
import java.util.*;
public class ConsultationDAO {
private Connection conn;
public void connect()
throws ClassNotFoundException, SQLException {
conn = DBConn.getConnection();
}
public void close()
throws SQLException {
DBConn.close();
}
//상담 게시판 글목록 출력 (페이지 처리 전, 답변글 번호 처리 전)
public ArrayList<ConsultationDTO> lists()
throws SQLException {
ArrayList<ConsultationDTO> arrayList
= new ArrayList<ConsultationDTO>();
String sql = String.format("SELECT sid, name, title, TO_CHAR(wdate, 'YYYY-MM-DD') AS wdate FROM consultation ORDER BY sid DESC");
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
while(rs.next()) {
ConsultationDTO dto = new ConsultationDTO();
dto.setSid(rs.getString("sid"));
dto.setName(rs.getString("name"));
dto.setTitle(rs.getString("title"));
dto.setWdate(rs.getString("wdate"));
arrayList.add(dto);
}
rs.close();
return arrayList;
}
//상담 게시판 글 입력
public int add(ConsultationDTO dto)
throws SQLException {
int result = 0;
String sql = String.format("INSERT INTO consultation (sid, name, pw, title, content, wdate) VALUES (consultationSeq.nextVal,'%s',encrypt('%s', '%s'),'%s','%s',SYSDATE)", dto.getName(), dto.getPw(), dto.getName(), dto.getTitle(), dto.getContent());
Statement stmt = conn.createStatement();
result = stmt.executeUpdate(sql);
return result;
}
public ConsultationDTO searchBySid(String sid)
throws SQLException {
ConsultationDTO dto = new ConsultationDTO();
String sql = String.format("SELECT sid, name, title, TO_CHAR(wdate, 'YYYY-MM-DD') AS wdate, content, rid FROM consultation WHERE sid=%s", sid);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
while(rs.next()) {
dto.setSid(rs.getString("sid"));
dto.setName(rs.getString("name"));
dto.setTitle(rs.getString("title"));
dto.setContent(rs.getString("content"));
dto.setWdate(rs.getString("wdate"));
//답변글 번호 읽어오는 부분
dto.setRid(rs.getString("rid"));
}
rs.close();
return dto;
}
public ConsultationDTO searchByPw(ConsultationDTO dto)
throws SQLException {
ConsultationDTO sdto = null;
String sql = String.format("SELECT sid, title, content FROM consultation WHERE sid=%s AND name='%s' AND pw=encrypt('%s', '%s')", dto.getSid(), dto.getName(), dto.getPw(), dto.getName());
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
while(rs.next()) {
sdto = new ConsultationDTO();
sdto.setSid(rs.getString("sid"));
sdto.setTitle(rs.getString("title"));
sdto.setContent(rs.getString("content"));
}
rs.close();
return sdto;
}
public int remove(String sid)
throws SQLException {
int result = 0;
String sql = String.format("DELETE FROM consultation WHERE sid=%s", sid);
Statement stmt = conn.createStatement();
result = stmt.executeUpdate(sql);
return result;
}
//상담 게시판 글검색 출력
public ArrayList<ConsultationDTO> searchLists(String skey, String svalue)
throws SQLException {
ArrayList<ConsultationDTO> arrayList
= new ArrayList<ConsultationDTO>();
String sql = String.format("SELECT sid, name, title, TO_CHAR(wdate, 'YYYY-MM-DD') AS wdate, rid FROM consultation WHERE LOWER(%s) LIKE '%%'||LOWER('%s')||'%%' ORDER BY sid DESC", skey, svalue);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
while(rs.next()) {
ConsultationDTO dto = new ConsultationDTO();
dto.setSid(rs.getString("sid"));
dto.setName(rs.getString("name"));
dto.setTitle(rs.getString("title"));
dto.setWdate(rs.getString("wdate"));
//답변글 번호 읽어오는 부분 추가
dto.setRid(rs.getString("rid"));
arrayList.add(dto);
}
rs.close();
return arrayList;
}
//-------------------------------------------
//페이지 처리 후
//상담 게시판 글목록 출력 (페이지 처리 후, 답변글 처리 후)
public ArrayList<ConsultationDTO> lists(int start, int end)
throws SQLException {
ArrayList<ConsultationDTO> arrayList
= new ArrayList<ConsultationDTO>();
String sql = String.format("SELECT * FROM pageListView WHERE rnum>=%d AND rnum<=%d", start, end);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
while(rs.next()) {
ConsultationDTO dto = new ConsultationDTO();
dto.setSid(rs.getString("sid"));
dto.setName(rs.getString("name"));
dto.setTitle(rs.getString("title"));
dto.setWdate(rs.getString("wdate"));
//답변글 읽어오는 부분 추가
dto.setRid(rs.getString("rid"));
arrayList.add(dto);
}
rs.close();
return arrayList;
}
public int count()
throws SQLException {
int result = 0;
String sql = String.format("SELECT COUNT(*) AS count FROM consultation");
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
while(rs.next()) {
result = rs.getInt("count");
}
rs.close();
return result;
}
//-------------------------------------------
public int adminReply(ConsultationDTO dto)
throws SQLException {
int result = 0;
//답변글 쓰기
String sql = String.format("INSERT INTO consultReply (rid, name, title, content, wdate) VALUES (consultReplySeq.nextval, '%s', '%s','%s', SYSDATE)", dto.getName(), dto.getTitle(), dto.getContent());
Statement stmt = conn.createStatement();
result = stmt.executeUpdate(sql);
//부모글에 답변글 연결 지정
String sql2 = String.format("UPDATE consultation SET rid=consultReplySeq.currval WHERE sid=%s", dto.getSid());
Statement stmt2 = conn.createStatement();
result = stmt2.executeUpdate(sql2);
return result;
}
//-------------------------------
//답변글 읽어오는 전용 메소드 추가
public ConsultationDTO searchByRid(String rid)
throws SQLException {
ConsultationDTO dto = new ConsultationDTO();
String sql = String.format("SELECT rid, name, title, TO_CHAR(wdate, 'YYYY-MM-DD') AS wdate, content FROM consultReply WHERE rid=%s", rid);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
while(rs.next()) {
dto.setRid(rs.getString("rid"));
dto.setName(rs.getString("name"));
dto.setTitle(rs.getString("title"));
dto.setContent(rs.getString("content"));
dto.setWdate(rs.getString("wdate"));
}
rs.close();
return dto;
}
//-------------------------------
}
//ConsultationServlet.java
package com.test;
import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ConsultationServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doGetPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doGetPost(req, resp);
}
protected void doGetPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//서블릿 주소 분석
String uri = req.getRequestURI();
if (uri.indexOf("consultList.con") != -1) {
consultList(req, resp);
}
if (uri.indexOf("consultInsertForm.con") != -1) {
consultInsertForm(req, resp);
}
if (uri.indexOf("consultInsert.con") != -1) {
consultInsert(req, resp);
}
if (uri.indexOf("consultView.con") != -1) {
consultView(req, resp);
}
if (uri.indexOf("consultModifyForm.con") != -1) {
consultModifyForm(req, resp);
}
if (uri.indexOf("consultModify.con") != -1) {
consultModify(req, resp);
}
if (uri.indexOf("consultRemoveForm.con") != -1) {
consultRemoveForm(req, resp);
}
if (uri.indexOf("consultSearch.con") != -1) {
consultSearch(req, resp);
}
if (uri.indexOf("adminReplyForm.con") != -1) {
adminReplyForm(req, resp);
}
if (uri.indexOf("adminReply.con") != -1) {
adminReply(req, resp);
}
}
private void consultList(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String pageUrl = "[1][2][3][4]...";
//--------------------------------
//페이지 처리 후
//페이지 번호 수신
//한 페이지당 게시물 숫자 지정
//총 게시물 수 확인
//총 페이지수 계산
//예를 들어, 한 페이지당 10개씩 계산
//게시물 21개 있다면
//총 페이지는 3페이지
//특정 페이지의 start, end 값 계산
String pn = req.getParameter("pageNum");
if (pn == null) {
pn = "1";
}
int recordCountPerPage = 10;
int start = (Integer.parseInt(pn) - 1)
* recordCountPerPage + 1;
int end = Integer.parseInt(pn) * recordCountPerPage;
int recordCount = 0;
//--------------------------------
ArrayList<ConsultationDTO> arrayList
= new ArrayList<ConsultationDTO>();
ConsultationDAO dao = new ConsultationDAO();
try {
dao.connect();
//페이지 처리 전
//arrayList = dao.lists();
//--------------------------
//페이지 처리 후
recordCount = dao.count();
arrayList = dao.lists(start, end);
//--------------------------
}catch(Exception e){
System.out.println(e.toString());
}finally{
try {
dao.close();
} catch (SQLException e) {
}
}
//---------------------------
//페이지 처리 후
MyUtil myUtil = new MyUtil();
pageUrl = myUtil.pageIndexList(
Integer.parseInt(pn)
, myUtil.getPageCount(recordCountPerPage, recordCount)
, "consultList.con");
//---------------------------
req.setAttribute("arrayList", arrayList);
req.setAttribute("title", "글목록");
req.setAttribute("pageUrl", pageUrl);
RequestDispatcher dispatcher
= req.getRequestDispatcher("consultList.jsp");
dispatcher.forward(req, resp);
}
private void consultInsertForm(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
RequestDispatcher dispatcher
= req.getRequestDispatcher("consultInsertForm.jsp");
dispatcher.forward(req, resp);
}
private void consultInsert(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//데이터 수신
//데이터베이스 연결
//INSERT 쿼리 메소드 호출
//consultList.con 으로 페이지 이동
req.setCharacterEncoding("euc-kr");
String name = req.getParameter("name");
String pw = req.getParameter("pw");
String title = req.getParameter("title");
String content = req.getParameter("content");
//-----------------------------
//입력 오류 처리 필요
//오라클에서는 입력 데이터에
//작은따옴표(')가 있으면
//입력 오류 발생됨
//작은따옴표(')를 두 번 입력('')하면 해결됨.
name = name.replaceAll("'", "''");
pw = pw.replaceAll("'", "''");
title = title.replaceAll("'", "''");
content = content.replaceAll("'", "''");
//-----------------------------
ConsultationDAO dao = new ConsultationDAO();
try {
dao.connect();
ConsultationDTO dto = new ConsultationDTO();
dto.setName(name);
dto.setPw(pw);
dto.setTitle(title);
dto.setContent(content);
dao.add(dto);
}catch(Exception e){
System.out.println(e.toString());
}finally{
try {
dao.close();
} catch (SQLException e) {
}
}
String url = String.format("consultList.con");
resp.sendRedirect(url);
}
private void consultView(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//글번호 수신
//데이터베이스 연결
//글번호에 해당하는 글 정보 읽어온다.
//글 정보(ConsultationDTO)를 출력 페이지로 전달
//답변글번호에 해당하는 글 정보 읽어온다.
//답변글 정보를 출력 페이지로 전달
//글 정보 출력 페이지(consultView.jsp)로 이동
String sid = req.getParameter("sid");
ConsultationDTO dto = new ConsultationDTO();
ConsultationDAO dao = new ConsultationDAO();
ConsultationDTO rdto = null;
try {
dao.connect();
dto = dao.searchBySid(sid);
//----------------------------------
//답변글 읽어오는 부분 추가
if (dto.getRid() != null) {
rdto = dao.searchByRid(dto.getRid());
}
//----------------------------------
}catch(Exception e){
System.out.println(e.toString());
}finally{
try {
dao.close();
}catch(Exception e){
}
}
req.setAttribute("dto", dto);
req.setAttribute("rdto", rdto);
RequestDispatcher dispatcher
= req.getRequestDispatcher("consultView.jsp");
dispatcher.forward(req, resp);
}
private void consultModifyForm(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//글번호 수신
//작성자, 패스워드 수신
//처음에는 패스워드 검사 페이지로 이동-> consultPW.jsp
//작성자, 패스워드가 수신된 경우는 패스워드 검사 과정 수행
//패스워드 검사 결과에 따라서
//맞는 경우는 수정 페이지로 이동 -> consultModifyForm.jsp
//틀린 경우는 에러 메시지 출력-> consultPW.jsp
req.setCharacterEncoding("euc-kr");
String sid = req.getParameter("sid");
String name = req.getParameter("name");
String pw = req.getParameter("pw");
if (name == null && pw == null) {
//consultView.jsp -> consultPW.jsp
RequestDispatcher dispatcher
= req.getRequestDispatcher("consultPW.jsp");
dispatcher.forward(req, resp);
} else {
//consultPW.jsp -> consultPW.jsp
//패스워드 검사 과정
ConsultationDAO dao = new ConsultationDAO();
ConsultationDTO dto = null;
try {
dao.connect();
ConsultationDTO sdto = new ConsultationDTO();
sdto.setSid(sid);
sdto.setName(name);
sdto.setPw(pw);
dto = dao.searchByPw(sdto);
}catch(Exception e){
System.out.println(e.toString());
}finally{
try {
dao.close();
}catch(Exception e){
}
}
if (dto != null) {
req.setAttribute("dto", dto);
RequestDispatcher dispatcher
= req.getRequestDispatcher("consultModifyForm.jsp");
dispatcher.forward(req, resp);
} else {
req.setAttribute("error", "true");
RequestDispatcher dispatcher
= req.getRequestDispatcher("consultPW.jsp");
dispatcher.forward(req, resp);
}
}
}
private void consultModify(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
}
private void consultRemoveForm(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
req.setCharacterEncoding("euc-kr");
String sid = req.getParameter("sid");
String name = req.getParameter("name");
String pw = req.getParameter("pw");
if (name == null && pw == null) {
//consultView.jsp -> consultPW.jsp
RequestDispatcher dispatcher
= req.getRequestDispatcher("consultPW.jsp");
dispatcher.forward(req, resp);
} else {
//consultPW.jsp -> consultPW.jsp
//패스워드 검사 과정
ConsultationDAO dao = new ConsultationDAO();
ConsultationDTO dto = null;
try {
dao.connect();
ConsultationDTO sdto = new ConsultationDTO();
sdto.setSid(sid);
sdto.setName(name);
sdto.setPw(pw);
dto = dao.searchByPw(sdto);
}catch(Exception e){
System.out.println(e.toString());
}finally{
try {
dao.close();
}catch(Exception e){
}
}
if (dto != null) {
//삭제 과정 추가 -> sid 필요
try {
dao.connect();
dao.remove(sid);
} catch(Exception e){
System.out.println(e.toString());
} finally {
try {
dao.close();
} catch (SQLException e) {
}
}
//목록 페이지로 이동
String url = String.format("consultList.con");
resp.sendRedirect(url);
} else {
req.setAttribute("error", "true");
RequestDispatcher dispatcher
= req.getRequestDispatcher("consultPW.jsp");
dispatcher.forward(req, resp);
}
}
}
private void consultSearch(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//한글 인코딩 처리
//데이터 수신(skey, svalue)
//검색 실행 -> searchLists(skey, svalue)
//검색 결과(ArrayList<ConsultationDTO>)를
//출력 페이지(consultList.jsp)로 전달
req.setCharacterEncoding("euc-kr");
String skey = req.getParameter("skey");
String svalue = req.getParameter("svalue");
ArrayList<ConsultationDTO> arrayList
= new ArrayList<ConsultationDTO>();
ConsultationDAO dao = new ConsultationDAO();
try {
dao.connect();
arrayList = dao.searchLists(skey, svalue);
}catch(Exception e){
System.out.println(e.toString());
}finally{
try {
dao.close();
} catch (SQLException e) {
}
}
req.setAttribute("arrayList", arrayList);
req.setAttribute("title", "글검색");
RequestDispatcher dispatcher
= req.getRequestDispatcher("consultList.jsp");
dispatcher.forward(req, resp);
}
private void adminReplyForm(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//글번호 수신
//데이터베이스 연결
//글번호에 해당하는 글 정보 읽어온다.
//글 정보(ConsultationDTO)를 출력 페이지로 전달
//답변 글쓰기 페이지(adminReplyForm.jsp)로 이동
String sid = req.getParameter("sid");
ConsultationDTO dto = new ConsultationDTO();
ConsultationDAO dao = new ConsultationDAO();
try {
dao.connect();
dto = dao.searchBySid(sid);
}catch(Exception e){
System.out.println(e.toString());
}finally{
try {
dao.close();
}catch(Exception e){
}
}
req.setAttribute("dto", dto);
RequestDispatcher dispatcher
= req.getRequestDispatcher("adminReplyForm.jsp");
dispatcher.forward(req, resp);
}
private void adminReply(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//데이터 수신
//데이터베이스 연결
//INSERT, UPDATE 쿼리 메소드 호출
//consultList.con 으로 페이지 이동
req.setCharacterEncoding("euc-kr");
String sid = req.getParameter("sid");
String name = req.getParameter("name");
String title = req.getParameter("title");
String content = req.getParameter("content");
//-----------------------------
//입력 오류 처리 필요
//오라클에서는 입력 데이터에
//작은따옴표(')가 있으면
//입력 오류 발생됨
//작은따옴표(')를 두 번 입력('')하면 해결됨.
name = name.replaceAll("'", "''");
title = title.replaceAll("'", "''");
content = content.replaceAll("'", "''");
//-----------------------------
ConsultationDAO dao = new ConsultationDAO();
try {
dao.connect();
ConsultationDTO dto = new ConsultationDTO();
dto.setSid(sid);
dto.setName(name);
dto.setTitle(title);
dto.setContent(content);
dao.adminReply(dto);
}catch(Exception e){
System.out.println(e.toString());
}finally{
try {
dao.close();
} catch (SQLException e) {
}
}
String url = String.format("consultList.con");
resp.sendRedirect(url);
}
}
//consultList.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@ page import="java.util.*" %>
<%@ page import="com.test.*" %>
<%
//검색 기준, 검색 단어 수신
String skey = request.getParameter("skey");
if (skey == null) {
skey = "";
}
String svalue = request.getParameter("svalue");
if (svalue == null) {
svalue = "";
}
//제목 글자 수신
String title = (String)request.getAttribute("title");
//페이징 처리 수신
String pageUrl = (String)request.getAttribute("pageUrl");;
if (pageUrl == null) {
pageUrl = "<br>";
}
@SuppressWarnings("unchecked")
ArrayList<ConsultationDTO> arrayList
= (ArrayList<ConsultationDTO>)request.getAttribute("arrayList");
StringBuilder str = new StringBuilder();
for (ConsultationDTO dto : arrayList) {
str.append("<tr>");
str.append(String.format("<td class=\"bDot\">%s</td>", dto.getSid()));
str.append(String.format("<td class=\"bTitle\"><a href=\"consultView.con?sid=%s\">%s</a>", dto.getSid(), dto.getTitle()));
if (dto.getRid() != null) {
str.append("<span style=\"color:blue; font-size:10pt;\">[답변있음]</span>");
}
str.append("</td>");
str.append(String.format("<td class=\"bDot\">%s</td>", dto.getName()));
str.append(String.format("<td class=\"bDot\">%s</td>", dto.getWdate()));
str.append("</tr>");
}
StringBuilder options = new StringBuilder();
if (skey.equals("title")) {
options.append("<option value=\"title\" selected=\"selected\">제목</option>");
} else {
options.append("<option value=\"title\">제목</option>");
}
if (skey.equals("content")) {
options.append("<option value=\"content\" selected=\"selected\">내용</option>");
} else {
options.append("<option value=\"content\">내용</option>");
}
if (skey.equals("name")) {
options.append("<option value=\"name\" selected=\"selected\">글작성자</option>");
} else {
options.append("<option value=\"name\">글작성자</option>");
}
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Java 전문 교육센터</title>
<link rel="stylesheet" type="text/css" href="common.css">
<link rel="stylesheet" type="text/css" href="table.css">
<script type="text/javascript" src="consultation.js"></script>
</head>
<body>
<div>
<div>
<h1>Java 전문 교육센터</h1>
<a href="javascript:">[교육원소개]</a>
<a href="javascript:">[교육과정안내]</a>
<a href="javascript:">[취업지원센터]</a>
<a href="consultList.con">[상담게시판]</a>
<a href="member.mem">[회원가입]</a>
<a href="login.mem">[로그인]</a>
<hr>
</div>
<div>
<h3>[상담게시판_<%=title%>]</h3>
<table cellpadding="5" class="style01">
<tr>
<td class="tName" width="60">번호</td>
<td class="tName">제목</td>
<td class="tName" width="160">작성자</td>
<td class="tName" width="160">작성일</td>
</tr>
<!-- <tr>
<td class="bDot">1</td>
<td class="bTitle"><a href="consultView.con?sid=1">상담 게시판이 오픈되었습니다.</a></td>
<td class="bDot">관리자</td>
<td class="bDot">2012-03-13</td>
</tr> -->
<%=str%>
</table>
<table class="style01">
<tr>
<!-- <td class="bDot">[1][2][3][4]...</td> -->
<td class="bDot"><%=pageUrl%></td>
</tr>
</table>
<form action="consultSearch.con" method="post" id="consultSearchForm">
<table class="style01">
<tr>
<td>
<select id="skey" name="skey"><%=options%></select>
<input type="text" id="svalue" name="svalue" value="<%=svalue%>">
<a href="javascript:consultSearchSubmit()">[검색]</a>
<span id="searchMsg" style="color:red; display:none;">검색 단어를 입력해야 합니다.</span>
</td>
<td style="text-align:right;">
<a href="consultInsertForm.con">[새글쓰기]</a>
</td>
</tr>
</table>
</form>
</div>
</div>
</body>
</html>
//consultView.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ page import="com.test.*" %>
<%
ConsultationDTO dto
= (ConsultationDTO)request.getAttribute("dto");
String sid = dto.getSid();
String name = dto.getName();
String title = dto.getTitle();
String wdate = dto.getWdate();
String content = dto.getContent();
//----------------------------------
//출력 오류 처리 필요
//내용에 HTML 태그가 포함된 경우
//HTML 태그가 태그로 보이는게 아니라 실행 코드가 되버린다.
//태그를 문자열로 변경시켜야 한다.
name = name.replaceAll("<", "<").replaceAll(">", ">");
title = title.replaceAll("<", "<").replaceAll(">", ">");
content = content.replaceAll("<", "<").replaceAll(">", ">");
//공백, 줄바꿈문자, 탭에 대한 특수문자 처리 필요
content = content.replaceAll(" ", " ");
content = content.replaceAll("\n", "<br>");
content = content.replaceAll("\t", " ");
//----------------------------------
//-----------------------------------
//답변글 출력 준비 추가
ConsultationDTO rdto
= (ConsultationDTO)request.getAttribute("rdto");
String rname = "";
String rtitle = "";
String rwdate = "";
String rcontent = "";
if (rdto != null) {
rname = rdto.getName();
rtitle = rdto.getTitle();
rwdate = rdto.getWdate();
rcontent = rdto.getContent();
rname = rname.replaceAll("<", "<").replaceAll(">", ">");
rtitle = rtitle.replaceAll("<", "<").replaceAll(">", ">");
rcontent = rcontent.replaceAll("<", "<").replaceAll(">", ">");
rcontent = rcontent.replaceAll(" ", " ");
rcontent = rcontent.replaceAll("\n", "<br>");
rcontent = rcontent.replaceAll("\t", " ");
}
//----------------------------------
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Java 전문 교육센터</title>
<link rel="stylesheet" type="text/css" href="common.css">
<link rel="stylesheet" type="text/css" href="table.css">
</head>
<body>
<div>
<div>
<h1>Java 전문 교육센터</h1>
<a href="javascript:">[교육원소개]</a>
<a href="javascript:">[교육과정안내]</a>
<a href="javascript:">[취업지원센터]</a>
<a href="consultList.con">[상담게시판]</a>
<a href="member.mem">[회원가입]</a>
<a href="login.mem">[로그인]</a>
<hr>
</div>
<div>
<h3>[상담게시판_내용보기]</h3>
<table cellpadding="5" class="style01 borderTop">
<tr>
<td class="bTitle">
<h3><!-- 상담 게시판을 오픈합니다. --><%=title%></h3>
<span><!-- 관리자 --><%=name%></span>
<span><!-- 2010-01-01 --><%=wdate%></span>
</td>
</tr>
<tr>
<td class="bTitle" style="padding-top:20px;padding-bottom:20px;">
<!-- 많은 이용 바랍니다. -->
<%=content%>
<!-- 답변글 내용 출력하는 부분 추가 -->
<c:if test="${!empty rdto}">
<div style="margin-left:50px;margin-top:20px;">
<table cellpadding="5" class="style01 borderTop">
<tr>
<td class="bTitle">
<h3><%=rtitle%></h3>
<span><%=rname%></span>
<span><%=rwdate%></span>
</td>
</tr>
<tr>
<td class="bTitle" style="padding-top:20px;padding-bottom:20px;">
<%=rcontent%>
</td>
</tr>
</table>
</div>
</c:if>
</td>
</tr>
</table>
<div style="margin-top:10px;">
<a href="adminReplyForm.con?sid=<%=sid%>">[*답변글쓰기]</a>
<a href="consultList.con">[목록보기]</a>
<a href="consultModifyForm.con?sid=<%=sid%>">[글 수정]</a>
<a href="consultRemoveForm.con?sid=<%=sid%>">[글 삭제]</a>
</div>
</div>
</div>
</body>
</html>
//요청주소
http://localhost:8090/ConsultationServlet_20121207/consultList.con
----------------------------------------------------
관리자 로그인, 로그아웃
-> 서블릿 주소를 *.mem 으로 처리함.
//web.xml
<?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" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>ConsultationServlet_20121207</display-name>
<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>
<servlet>
<servlet-name>consultationServlet</servlet-name>
<servlet-class>com.test.ConsultationServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>consultationServlet</servlet-name>
<url-pattern>*.con</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>memberServlet</servlet-name>
<servlet-class>com.test.MemberServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>memberServlet</servlet-name>
<url-pattern>*.mem</url-pattern>
</servlet-mapping>
</web-app>
//MemberDTO.java
package com.test;
public class MemberDTO {
private String id, pw, name, email, tel, wdate;
private int grade;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPw() {
return pw;
}
public void setPw(String pw) {
this.pw = pw;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
public String getWdate() {
return wdate;
}
public void setWdate(String wdate) {
this.wdate = wdate;
}
public int getGrade() {
return grade;
}
public void setGrade(int grade) {
this.grade = grade;
}
}
//MemberDAO.java
package com.test;
import java.sql.*;
public class MemberDAO {
private Connection conn;
public void connect()
throws ClassNotFoundException, SQLException {
conn = DBConn.getConnection();
}
public void close()
throws SQLException {
DBConn.close();
}
public MemberDTO login(String id, String pw)
throws SQLException {
MemberDTO dto = null;
String sql = String.format("SELECT id, name, email, tel, TO_CHAR(wdate, 'YYYY-MM-DD HH24:MI') AS wdate, grade FROM jmember WHERE id='%s' AND pw=encrypt('%s', '%s')", id, pw, id);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
while(rs.next()) {
dto = new MemberDTO();
dto.setId(rs.getString("id"));
dto.setName(rs.getString("name"));
dto.setEmail(rs.getString("email"));
dto.setTel(rs.getString("tel"));
dto.setWdate(rs.getString("wdate"));
dto.setGrade(rs.getInt("grade"));
}
rs.close();
return dto;
}
public MemberDTO searchId(String id)
throws SQLException {
MemberDTO dto = null;
String sql = String.format("SELECT id, name, email, tel, TO_CHAR(wdate, 'YYYY-MM-DD HH24:MI') AS wdate, grade FROM jmember WHERE id='%s'", id);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
while(rs.next()) {
dto = new MemberDTO();
dto.setId(rs.getString("id"));
dto.setName(rs.getString("name"));
dto.setEmail(rs.getString("email"));
dto.setTel(rs.getString("tel"));
dto.setWdate(rs.getString("wdate"));
dto.setGrade(rs.getInt("grade"));
}
rs.close();
return dto;
}
}
//MemberServlet.java
package com.test;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class MemberServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doGetPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doGetPost(req, resp);
}
protected void doGetPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//서블릿 주소 분석
String uri = req.getRequestURI();
if (uri.indexOf("login.mem") != -1) {
login(req,resp);
}
if (uri.indexOf("logout.mem") != -1) {
logout(req,resp);
}
if (uri.indexOf("memberInfo.mem") != -1) {
memberInfo(req,resp);
}
}
private void login(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//세션 객체 생성 과정
//HttpSession session = req.getSession();
//로그인 성공한 후 세션 객체는
//회원의 아이디 저장용 -> id
//회원의 이름 저장용 -> name
//회원의 회원등급 저장용 -> grade
//세션을 준비한다.
//session.setAttribute("id", dto.getId());
String id = req.getParameter("id");
String pw = req.getParameter("pw");
if (id == null && pw == null) {
RequestDispatcher dispatcher
= req.getRequestDispatcher("login.jsp");
dispatcher.forward(req, resp);
} else {
//패스워드 검사 과정
MemberDAO dao = new MemberDAO();
MemberDTO dto = null;
try {
dao.connect();
dto = dao.login(id, pw);
}catch(Exception e){
System.out.println(e.toString());
}finally{
try {
dao.close();
}catch(Exception e){
}
}
if (dto != null) {
HttpSession session = req.getSession();
session.setAttribute("id", dto.getId());
session.setAttribute("name", dto.getName());
session.setAttribute("grade", dto.getGrade());
req.setAttribute("dto", dto);
RequestDispatcher dispatcher
= req.getRequestDispatcher("memberInfo.jsp");
dispatcher.forward(req, resp);
} else {
req.setAttribute("error", "true");
RequestDispatcher dispatcher
= req.getRequestDispatcher("login.jsp");
dispatcher.forward(req, resp);
}
}
}
private void logout(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
HttpSession session = req.getSession();
session.invalidate();
resp.sendRedirect("login.mem");
}
private void memberInfo(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//로그인한 회원의 정보 출력 (회원 아이디 필요)
HttpSession session = req.getSession();
String id = (String)session.getAttribute("id");
MemberDTO dto = new MemberDTO();
MemberDAO dao = new MemberDAO();
try {
dao.connect();
dto = dao.searchId(id);
}catch(Exception e){
System.out.println(e.toString());
}finally{
try {
dao.close();
}catch(Exception e){
}
}
req.setAttribute("dto", dto);
RequestDispatcher dispatcher
= req.getRequestDispatcher("memberInfo.jsp");
dispatcher.forward(req, resp);
}
}
//memberInfo.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ page import="com.test.*" %>
<%
MemberDTO dto
= (MemberDTO)request.getAttribute("dto");
String id = dto.getId();
String name = dto.getName();
String email = dto.getEmail();
String tel = dto.getTel();
String[] array = {"관리자", "직원", "학생", "회원가입"};
String grade = array[dto.getGrade()-1];
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Java 전문 교육센터</title>
<link rel="stylesheet" type="text/css" href="common.css">
<link rel="stylesheet" type="text/css" href="table.css">
<script type="text/javascript" src="consultation.js"></script>
<script type="text/javascript">
function msg() {
}
</script>
</head>
<body onload="msg()">
<div>
<%-- 메인메뉴를 import 구문으로 대체 --%>
<c:import url="mainMenu.jsp"></c:import>
<div>
<h3>[회원정보]</h3>
<table cellpadding="5" class="style01 borderTop borderBottom">
<tr>
<td width="150">아이디</td><td class="bTitle"><%=id%></td>
</tr>
<tr>
<td width="150">이름</td><td class="bTitle"><%=name%></td>
</tr>
<tr>
<td width="150">이메일</td><td class="bTitle"><%=email%></td>
</tr>
<tr>
<td width="150">전화번호</td><td class="bTitle"><%=tel%></td>
</tr>
<tr>
<td width="150">등급</td><td class="bTitle"><%=grade%></td>
</tr>
</table>
</div>
<div>
<br>
<a href="">[패스워드변경]</a>
<a href="">[회원정보수정]</a>
<a href="">[회원탈퇴]</a>
</div>
</div>
</body>
</html>
//mainMenu.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<div>
<h1>Java 전문 교육센터</h1>
<a href="javascript:">[교육원소개]</a>
<a href="javascript:">[교육과정안내]</a>
<a href="javascript:">[취업지원센터]</a>
<a href="consultList.con">[상담게시판]</a>
<c:choose>
<c:when test="${empty sessionScope.id}">
<a href="member.mem">[회원가입]</a>
<a href="login.mem">[로그인]</a>
</c:when>
<c:otherwise>
<a href="memberInfo.mem">[회원정보]</a>
<a href="logout.mem">[로그아웃]</a>
</c:otherwise>
</c:choose>
<hr>
</div>
//consultView.jsp -> 관리자 전용 메뉴 출력 부분 추가
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ page import="com.test.*" %>
<%
ConsultationDTO dto
= (ConsultationDTO)request.getAttribute("dto");
String sid = dto.getSid();
String name = dto.getName();
String title = dto.getTitle();
String wdate = dto.getWdate();
String content = dto.getContent();
//----------------------------------
//출력 오류 처리 필요
//내용에 HTML 태그가 포함된 경우
//HTML 태그가 태그로 보이는게 아니라 실행 코드가 되버린다.
//태그를 문자열로 변경시켜야 한다.
name = name.replaceAll("<", "<").replaceAll(">", ">");
title = title.replaceAll("<", "<").replaceAll(">", ">");
content = content.replaceAll("<", "<").replaceAll(">", ">");
//공백, 줄바꿈문자, 탭에 대한 특수문자 처리 필요
content = content.replaceAll(" ", " ");
content = content.replaceAll("\n", "<br>");
content = content.replaceAll("\t", " ");
//----------------------------------
//-----------------------------------
//답변글 출력 준비 추가
ConsultationDTO rdto
= (ConsultationDTO)request.getAttribute("rdto");
String rname = "";
String rtitle = "";
String rwdate = "";
String rcontent = "";
if (rdto != null) {
rname = rdto.getName();
rtitle = rdto.getTitle();
rwdate = rdto.getWdate();
rcontent = rdto.getContent();
rname = rname.replaceAll("<", "<").replaceAll(">", ">");
rtitle = rtitle.replaceAll("<", "<").replaceAll(">", ">");
rcontent = rcontent.replaceAll("<", "<").replaceAll(">", ">");
rcontent = rcontent.replaceAll(" ", " ");
rcontent = rcontent.replaceAll("\n", "<br>");
rcontent = rcontent.replaceAll("\t", " ");
}
//----------------------------------
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Java 전문 교육센터</title>
<link rel="stylesheet" type="text/css" href="common.css">
<link rel="stylesheet" type="text/css" href="table.css">
</head>
<body>
<div>
<%-- 메인메뉴를 import 구문으로 대체 --%>
<c:import url="mainMenu.jsp"></c:import>
<div>
<h3>[상담게시판_내용보기]</h3>
<table cellpadding="5" class="style01 borderTop">
<tr>
<td class="bTitle">
<h3><!-- 상담 게시판을 오픈합니다. --><%=title%></h3>
<span><!-- 관리자 --><%=name%></span>
<span><!-- 2010-01-01 --><%=wdate%></span>
</td>
</tr>
<tr>
<td class="bTitle" style="padding-top:20px;padding-bottom:20px;">
<!-- 많은 이용 바랍니다. -->
<%=content%>
<!-- 답변글 내용 출력하는 부분 추가 -->
<c:if test="${!empty rdto}">
<div style="margin-left:50px;margin-top:20px;">
<table cellpadding="5" class="style01 borderTop">
<tr>
<td class="bTitle">
<h3><%=rtitle%></h3>
<span><%=rname%></span>
<span><%=rwdate%></span>
</td>
</tr>
<tr>
<td class="bTitle" style="padding-top:20px;padding-bottom:20px;">
<%=rcontent%>
</td>
</tr>
</table>
</div>
</c:if>
</td>
</tr>
</table>
<div style="margin-top:10px;">
<%-- 관리자 전용 메뉴 출력 부분 --%>
<c:if test="${sessionScope.grade == '1'}">
<a href="adminReplyForm.con?sid=<%=sid%>">[*답변글쓰기]</a>
</c:if>
<a href="consultList.con">[목록보기]</a>
<a href="consultModifyForm.con?sid=<%=sid%>">[글 수정]</a>
<a href="consultRemoveForm.con?sid=<%=sid%>">[글 삭제]</a>
</div>
</div>
</div>
</body>
</html>
//모든 JSP 페이지의 메뉴 부분을 아래와 같이 수정 (JSTL 표기 추가)
<%-- 메인메뉴를 import 구문으로 대체 --%>
<c:import url="mainMenu.jsp"></c:import>
'Java > JSP & Servlet' 카테고리의 다른 글
[20121213] 22일차 (상담게시판) (0) | 2012.12.18 |
---|---|
[20121212] 21일차 (상담게시판) (0) | 2012.12.18 |
[20121210] 19일차 (상담게시판) (0) | 2012.12.18 |
[20121207] 18일차 (상담게시판) (0) | 2012.12.18 |
[20121206] 17일차 (0) | 2012.12.14 |
WRITTEN BY