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

상담 게시판  답변글 처리

- 답변글 목록 출력 및 내용 보기 페이지 작성


//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("<", "&lt;").replaceAll(">", "&gt;");

title = title.replaceAll("<", "&lt;").replaceAll(">", "&gt;");

content = content.replaceAll("<", "&lt;").replaceAll(">", "&gt;");

//공백, 줄바꿈문자, 탭에 대한 특수문자 처리 필요

content = content.replaceAll("  ", "&nbsp;");

content = content.replaceAll("\n", "<br>");

content = content.replaceAll("\t", "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");

//----------------------------------


//-----------------------------------

//답변글 출력 준비 추가

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("<", "&lt;").replaceAll(">", "&gt;");

rtitle = rtitle.replaceAll("<", "&lt;").replaceAll(">", "&gt;");

rcontent = rcontent.replaceAll("<", "&lt;").replaceAll(">", "&gt;");

rcontent = rcontent.replaceAll("  ", "&nbsp;");

rcontent = rcontent.replaceAll("\n", "<br>");

rcontent = rcontent.replaceAll("\t", "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");

}


//----------------------------------


%>    

<!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("<", "&lt;").replaceAll(">", "&gt;");

title = title.replaceAll("<", "&lt;").replaceAll(">", "&gt;");

content = content.replaceAll("<", "&lt;").replaceAll(">", "&gt;");

//공백, 줄바꿈문자, 탭에 대한 특수문자 처리 필요

content = content.replaceAll("  ", "&nbsp;");

content = content.replaceAll("\n", "<br>");

content = content.replaceAll("\t", "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");

//----------------------------------


//-----------------------------------

//답변글 출력 준비 추가

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("<", "&lt;").replaceAll(">", "&gt;");

rtitle = rtitle.replaceAll("<", "&lt;").replaceAll(">", "&gt;");

rcontent = rcontent.replaceAll("<", "&lt;").replaceAll(">", "&gt;");

rcontent = rcontent.replaceAll("  ", "&nbsp;");

rcontent = rcontent.replaceAll("\n", "<br>");

rcontent = rcontent.replaceAll("\t", "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");

}


//----------------------------------


%>    

<!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
빨강꼬마

,