WAR -
ConsultationServlet_20121207_my.war
(내가 작업한 소스)
ConsultationServlet_20121207_TC.war
(교수님 소스)
-------------------------------------------------
상담 게시판 (Servlet 버전) 최종 결과
상담 게시판 구현 기능 --------------
1. 게시판 글 목록 출력
2. 게시판 글 내용보기 출력
3. 게시판 글쓰기(비회원)
4. 게시판 글수정(비회원)
5. 게시판 글삭제(비회원)
6. 답변글 쓰기(관리자)
7. 답변글 내용보기
8. 회원가입
9. 회원로그인, 로그아웃
10. 게시판 글쓰기(회원)
11. 게시판 글수정(회원)
12. 게시판 글삭제(회원)
13. 댓글 쓰기(회원)
14. 댓글 출력
15. 댓글 삭제(회원)
16. 회원정보 출력(회원)
17. 회원명단 출력(관리자)
18. 회원 패스워드 변경(회원)
19. 회원 정보 수정(회원)
20. 회원 정보 수정(관리자)
-------------------------------------------------
--데이터베이스 구성
--상담게시판 테이블 (글번호, 글쓴이이름, 패스워드, 제목, 내용, 작성일)
CREATE TABLE consultation (
sid NUMBER --PK 지정. 시퀀스 지원.
,name NVARCHAR2(20)
,pw VARCHAR2(20) --암호화 지원
,title NVARCHAR2(100)
,content NVARCHAR2(2000)
,wdate DATE --자동 입력. 시스템 현재 날짜.
);
ALTER TABLE consultation
ADD CONSTRAINT consultation_sid_pk PRIMARY KEY(sid);
CREATE SEQUENCE consultationSeq;
INSERT INTO consultation (sid, name, pw, title, content, wdate)
VALUES (consultationSeq.nextVal
,'관리자'
,encrypt('1234', '관리자') --사용자 정의 암호화 함수
,'상담 게시판이 오픈되었습니다'
,'많은 이용 바랍니다'
,SYSDATE);
COMMIT;
SELECT sid, name, title, TO_CHAR(wdate, 'YYYY-MM-DD') AS wdate
FROM consultation
ORDER BY sid DESC;
--SID 기준 검색 쿼리
SELECT sid, name, title, TO_CHAR(wdate, 'YYYY-MM-DD') AS wdate
, content
FROM consultation
WHERE sid=1;
SELECT sid, title, content
FROM consultation
WHERE sid=1 AND name='관리자' AND pw=encrypt('1234', '관리자');
--이름 기준 검색 (부분 검색 가능하도록 할 것. 대소문자 구분 하지 않도록 할 것)
SELECT sid, name, title, TO_CHAR(wdate, 'YYYY-MM-DD') AS wdate
FROM consultation
WHERE LOWER(name) LIKE '%'||LOWER('홍길동')||'%'
ORDER BY sid DESC;
--제목 기준 검색 (부분 검색 가능하도록 할 것. 대소문자 구분 하지 않도록 할 것)
SELECT sid, name, title, TO_CHAR(wdate, 'YYYY-MM-DD') AS wdate
FROM consultation
WHERE LOWER(title) LIKE '%'||LOWER('html')||'%'
ORDER BY sid DESC;
--내용 기준 검색 (부분 검색 가능하도록 할 것. 대소문자 구분 하지 않도록 할 것)
SELECT sid, name, title, TO_CHAR(wdate, 'YYYY-MM-DD') AS wdate
FROM consultation
WHERE LOWER(content) LIKE '%'||LOWER('html')||'%'
ORDER BY sid DESC;
--페이지 처리 쿼리문 (총 게시물 카운트)
SELECT COUNT(*) AS count FROM consultation;
--페이지 처리 쿼리문 (특정 페이지 게시물 읽어오기. 시작번호, 끝번호 필요)
--> 한 페이지당 10개의 게시물 처리
--> 1페이지 게시물은 시작번호 1 ~ 끝번호 10
--> 2페이지 게시물은 시작번호 11 ~ 끝번호 20
SELECT *
FROM (SELECT ROWNUM rnum, data.*
FROM (SELECT sid, name, title
,TO_CHAR(wdate, 'YYYY-MM-DD') AS wdate
FROM consultation
ORDER BY sid DESC) data)
WHERE rnum>=1 AND rnum<=10;
CREATE VIEW pageListView
AS
SELECT *
FROM (SELECT ROWNUM rnum, data.*
FROM (SELECT sid, name, title
,TO_CHAR(wdate, 'YYYY-MM-DD') AS wdate
FROM consultation
ORDER BY sid DESC) data);
SELECT *
FROM pageListView
WHERE rnum>=1 AND rnum<=10;
-----------------------------------------------------------
--관리자 답변글 전용 테이블
CREATE TABLE consultReply (
rid NUMBER --PK
,name NVARCHAR2(20) --관리자 전용
--,pw VARCHAR2(20) --관리자 전용이므로 패스워드 저장 안함
,title NVARCHAR2(100)
,content NVARCHAR2(2000)
,wdate DATE
);
ALTER TABLE consultReply
ADD CONSTRAINT consultReply_rid_pk PRIMARY KEY(rid);
CREATE SEQUENCE consultReplySeq;
--답변글과 부모글 연관성 지정 필요
--> 부모글 테이블에 답변글 번호를 저장하는 컬럼 추가 및 FK 지정
ALTER TABLE consultation
ADD rid NUMBER;
ALTER TABLE consultation
ADD CONSTRAINT consultation_rid_fk FOREIGN KEY (rid)
REFERENCES consultReply(rid);
--답변글 추가 쿼리
INSERT INTO consultReply (rid, name, title, content, wdate)
VALUES (consultReplySeq.nextval, '관리자', '예약 확인했습니다.'
,'내일 오전 중으로 연락 드리겠습니다.', SYSDATE);
COMMIT;
--특정 부모글에 답변글 번호를 연결하는 쿼리
UPDATE consultation
SET rid=consultReplySeq.currval
WHERE sid=49;
COMMIT;
--답변글 번호도 읽어올 수 있도록 SELECT 쿼리문 변경(검색 쿼리)
SELECT sid, name, title, TO_CHAR(wdate, 'YYYY-MM-DD') AS wdate
,rid --답변글 번호 추가
FROM consultation
WHERE LOWER(name) LIKE '%'||LOWER('홍길동')||'%'
ORDER BY sid DESC;
SELECT sid, name, title, TO_CHAR(wdate, 'YYYY-MM-DD') AS wdate
, content
,rid --답변글 번호 추가
FROM consultation
WHERE sid=1;
--답변글 번호도 읽어올 수 있도록 SELECT 쿼리문 변경(전체 출력 쿼리)
CREATE OR REPLACE VIEW pageListView
AS
SELECT *
FROM (SELECT ROWNUM rnum, data.*
FROM (SELECT sid, name, title
,TO_CHAR(wdate, 'YYYY-MM-DD') AS wdate
,rid --답변글 번호 추가
FROM consultation
ORDER BY sid DESC) data);
--답변글 읽어오는 쿼리(RID 필요)
SELECT rid, name, title, TO_CHAR(wdate, 'YYYY-MM-DD') AS wdate
, content
FROM consultReply
WHERE rid=1;
----------------------------------------------------
--회원 가입, 로그인, 로그아웃 쿼리 작성
--회원 테이블 작성
CREATE TABLE jmember (
id VARCHAR2(20) --PK
,pw VARCHAR2(20) --암호화 지원
,name NVARCHAR2(20)
,email VARCHAR2(100)
,tel VARCHAR2(30)
,wdate DATE
,grade NUMBER DEFAULT 4 --관리자 1, 직원 2, 학생 3, 회원가입 4
);
ALTER TABLE jmember
ADD CONSTRAINT jmember_id_pk PRIMARY KEY(id);
--관리자 전용 입력 쿼리
INSERT INTO jmember (id, pw, name, email, tel, wdate, grade)
VALUES ('admin', encrypt('1234', 'admin'),'관리자', 'admin@test.com', '02-123-1234', SYSDATE, 1);
COMMIT;
--사용자 입력 쿼리 (회원등급이 자동으로 회원가입(4) 등급이 된다)
INSERT INTO jmember (id, pw, name, email, tel, wdate)
VALUES ('test', encrypt('1234', 'test'),'테스트'
, 'test@test.com', '02-111-1111', SYSDATE);
COMMIT;
--회원 확인용 쿼리 (id, pw 동시 검사)
SELECT id, name, email, tel
, TO_CHAR(wdate, 'YYYY-MM-DD HH24:MI') AS wdate
, grade
FROM jmember
WHERE id='admin' AND pw=encrypt('1234', 'admin');
--회원 확인용 쿼리 (id만 검사)
SELECT id, name, email, tel
, TO_CHAR(wdate, 'YYYY-MM-DD HH24:MI') AS wdate
, grade
FROM jmember
WHERE id='admin';
--패스워드 수정 쿼리
UPDATE jmember
SET pw=encrypt('새로운패스워드', '아이디')
WHERE pw=encrypt('기존패스워드', '아이디')
AND id='아이디';
--회원 정보 수정 쿼리
UPDATE jmember
SET name='새로운이름', email='새로운이메일', tel='새로운전화번호'
WHERE pw=encrypt('기존패스워드', '아이디')
AND id='아이디';
-----------------------------------------------------------
--댓글 저장용 테이블 생성
CREATE TABLE consultComment (
cid NUMBER --PK. 댓글 번호
,id VARCHAR2(20) -- 글쓴이의 아이디
,name NVARCHAR2(20) --글쓴이의 이름
,title NVARCHAR2(200)
,wdate DATE
,sid NUMBER --FK. 부모 글번호
);
ALTER TABLE consultComment
ADD CONSTRAINT consultComment_cid_pk PRIMARY KEY(cid);
ALTER TABLE consultComment
ADD CONSTRAINT consultComment_sid_fk FOREIGN KEY (sid)
REFERENCES consultation(sid);
--댓글 추가 여부를 확인할 수 있는 컬럼을 부모 테이블에 추가
ALTER TABLE consultation
ADD commentCount NUMBER DEFAULT 0;
CREATE SEQUENCE consultCommentSeq;
--댓글 입력 (댓글 테이블에 댓글 내용 추가)
INSERT INTO consultComment (cid, id, name, title, wdate, sid)
VALUES (consultCommentSeq.nextval, 'hong', '홍길동', '댓글 테스트', SYSDATE, 1);
COMMIT;
--댓글 입력 (부모 테이블에 댓글 갯수 증가)
UPDATE consultation
SET commentCount = commentCount + 1
WHERE sid=1;
COMMIT;
--댓글 출력(부모글 기준)
SELECT cid, id, name, title, TO_CHAR(wdate, 'YYYY-MM-DD') AS wdate
FROM consultComment
WHERE sid=1
ORDER BY cid ASC;
--댓글 갯수도 읽어올 수 있도록 SELECT 쿼리문 변경(검색 쿼리)
SELECT sid, name, title, TO_CHAR(wdate, 'YYYY-MM-DD') AS wdate
,rid
,commentCount --댓글 갯수
FROM consultation
WHERE LOWER(name) LIKE '%'||LOWER('홍길동')||'%'
ORDER BY sid DESC;
SELECT sid, name, title, TO_CHAR(wdate, 'YYYY-MM-DD') AS wdate
, content
,rid
,commentCount --댓글 갯수
FROM consultation
WHERE sid=1;
--댓글 갯수도 읽어올 수 있도록 SELECT 쿼리문 변경(전체 출력 쿼리)
CREATE OR REPLACE VIEW pageListView
AS
SELECT *
FROM (SELECT ROWNUM rnum, data.*
FROM (SELECT sid, name, title
,TO_CHAR(wdate, 'YYYY-MM-DD') AS wdate
,rid
,commentCount --댓글 갯수
FROM consultation
ORDER BY sid DESC) data);
--댓글 삭제 쿼리
DELETE
FROM consultComment
WHERE cid=1 AND id='hong';
-----------------------------------------------------------
--회원 전용 글쓰기 과정 추가
--회원 전용 글쓰기를 위해서 consultation 테이블에 id 컬럼 추가
ALTER TABLE consultation
ADD id VARCHAR2(20);
--글쓰기 내용을 입력하는 과정에서 ID 추가
INSERT INTO consultation (sid, name, pw, title, content, wdate, id)
VALUES (consultationSeq.nextVal
,'관리자'
,encrypt('1234', '관리자') --사용자 정의 암호화 함수
,'상담 게시판이 오픈되었습니다'
,'많은 이용 바랍니다'
,SYSDATE
, 'hong');
COMMIT;
--아이디도 읽어올 수 있도록 SELECT 쿼리문 변경(검색 쿼리)
SELECT sid, name, title, TO_CHAR(wdate, 'YYYY-MM-DD') AS wdate
,rid
,commentCount
,id --아이디
FROM consultation
WHERE LOWER(name) LIKE '%'||LOWER('홍길동')||'%'
ORDER BY sid DESC;
SELECT sid, name, title, TO_CHAR(wdate, 'YYYY-MM-DD') AS wdate
, content
,rid
,commentCount
,id --아이디
FROM consultation
WHERE sid=1;
--아이디도 읽어올 수 있도록 SELECT 쿼리문 변경(전체 출력 쿼리)
CREATE OR REPLACE VIEW pageListView
AS
SELECT *
FROM (SELECT ROWNUM rnum, data.*
FROM (SELECT sid, name, title
,TO_CHAR(wdate, 'YYYY-MM-DD') AS wdate
,rid
,commentCount
,id --아이디
FROM consultation
ORDER BY sid DESC) data);
-------------------------------------------------
//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>
------------------------------------------------------------
//DBConn.java
package com.test;
import java.sql.*;
public class DBConn {
//Singleton pattern
private static Connection dbConn;
public static Connection getConnection()
throws SQLException, ClassNotFoundException {
if (dbConn == null) {
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String user = "scott";
String pw = "tiger";
Class.forName("oracle.jdbc.driver.OracleDriver");
dbConn = DriverManager.getConnection(url, user, pw);
}
return dbConn;
}
public static void close()
throws SQLException {
if (dbConn != null) {
if (!dbConn.isClosed()) {
dbConn.close();
}
}
dbConn = null;
}
}
---------------------------------------------------
//MyUtil.java
package com.test;
public class MyUtil {
/*
* 전체 페이지수 구하기
* numPerPage:한 화면에 표시할 데이터의 갯수
* dataCount:전체 데이터 갯수
*/
public int getPageCount(int numPerPage,int dataCount){
int pageCount=0;
pageCount=dataCount/numPerPage;
if(dataCount%numPerPage !=0)
pageCount++;
return pageCount;
}
/*
* 페이징 처리 메소드(get 방식)
* current_page:현재 표시할 페이지
* total_page:전체 페이지 수
* list_url:링크를 설정할 url
*/
public String pageIndexList(int current_page,int total_page, String list_url){
int numPerBlock=10;
int currentPageSetup;
int n,page;
StringBuffer sb=new StringBuffer();
if(current_page==0||total_page==0)
return"";
if(list_url.indexOf("?")!=-1){
list_url=list_url+"&";
}else{
list_url=list_url+"?";
}
//currentPageSetup:표시할 첫페이지-1의 값
currentPageSetup=(current_page/numPerBlock)*numPerBlock;
if(current_page%numPerBlock==0)
currentPageSetup=currentPageSetup-numPerBlock;
//1,[prev]
n=current_page-numPerBlock;
if(total_page>numPerBlock&¤tPageSetup>0){
sb.append("<a href=\"" +list_url + "pageNum=1\">[1]</a> ");
sb.append("[<a href=\"" + list_url + "pageNum=" + n + "\">prev</a>] ");
}
//바로가기 페이지
page=currentPageSetup+1;
while(page<=total_page&&page<=(currentPageSetup+numPerBlock)){
if(page==current_page){
sb.append("[<font color=\"Fuchsia\">"+page+"</font>] ");
}else{
sb.append("<a href=\""+list_url+"pageNum="+page+"\">["+page+"]</a> ");
}
page++;
}
//[Next], 마지막 페이지
n=current_page+numPerBlock;
if(total_page-currentPageSetup > numPerBlock){
sb.append("[<a href=\""+list_url+"pageNum="+n+"\">Next</a>] ");
sb.append("<a href=\""+list_url+"pageNum="+total_page+"\">["+total_page+"]</a>");
}
return sb.toString();
}
}
-------------------------------------------------
//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;
}
//-----------------------------
//-------------------------------
//댓글 처리를 위한 id 변수 추가
private String id;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
//댓글 처리를 위한 commentCount 변수 추가
private int commentCount;
public int getCommentCount() {
return commentCount;
}
public void setCommentCount(int commentCount) {
this.commentCount = commentCount;
}
//댓글 처리를 위한 cid 변수 추가
private String cid;
public String getCid() {
return cid;
}
public void setCid(String cid) {
this.cid = cid;
}
//-------------------------------
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, commentCount, id 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"));
//댓글 갯수 읽어오는 부분 추가
dto.setCommentCount(rs.getInt("commentCount"));
//회원 전용 글쓰기 처리 부분 추가
dto.setId(rs.getString("id"));
}
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 modify(ConsultationDTO dto) throws SQLException {
int result =0;
String sql = String.format("UPDATE consultation SET title='%s', CONTENT='%s', wdate=SYSDATE WHERE SID=%s"
, dto.getTitle()
, dto.getContent()
, dto.getSid());
Statement stmt = conn.createStatement();
result = stmt.executeUpdate(sql);
return result;
}
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, commentCount, id 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"));
//댓글 갯수 읽어오는 부분 추가
dto.setCommentCount(rs.getInt("commentCount"));
//회원 전용 글쓰기 처리 부분 추가
dto.setId(rs.getString("id"));
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"));
//댓글 갯수 읽어오는 부분 추가
dto.setCommentCount(rs.getInt("commentCount"));
//회원 전용 글쓰기 처리 부분 추가
dto.setId(rs.getString("id"));
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;
}
//-------------------------------
//-------------------------------
//댓글 입력 메소드 추가
public int commentAdd(ConsultationDTO dto)
throws SQLException {
int result = 0;
//댓글 쓰기
String sql = String.format("INSERT INTO consultComment (cid, id, name, title, wdate, sid) VALUES (consultCommentSeq.nextval, '%s', '%s', '%s', SYSDATE, %s)", dto.getId(), dto.getName(), dto.getTitle(), dto.getSid());
Statement stmt = conn.createStatement();
result = stmt.executeUpdate(sql);
//부모글에 댓글 갯수 증가
String sql2 = String.format("UPDATE consultation SET commentCount = commentCount + 1 WHERE sid=%s", dto.getSid());
Statement stmt2 = conn.createStatement();
result = stmt2.executeUpdate(sql2);
return result;
}
//-------------------------------
//--------------------------------
//댓글 목록 읽어오는 전용 메소드 추가
public ArrayList<ConsultationDTO> commentLists(String sid)
throws SQLException {
ArrayList<ConsultationDTO> arrayList
= new ArrayList<ConsultationDTO>();
String sql = String.format("SELECT cid, id, name, title, TO_CHAR(wdate, 'YYYY-MM-DD') AS wdate FROM consultComment WHERE sid=%s ORDER BY cid ASC", sid);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
while(rs.next()) {
ConsultationDTO dto = new ConsultationDTO();
dto.setCid(rs.getString("cid"));
dto.setId(rs.getString("id"));
dto.setName(rs.getString("name"));
dto.setTitle(rs.getString("title"));
dto.setWdate(rs.getString("wdate"));
arrayList.add(dto);
}
rs.close();
return arrayList;
}
//---------------------------------
//---------------------------------------
//상담 게시판 글 입력 (회원 글쓰기)
public int memberAdd(ConsultationDTO dto)
throws SQLException {
int result = 0;
String sql = String.format("INSERT INTO consultation (sid, name, pw, title, content, wdate, id) VALUES (consultationSeq.nextVal,'%s',encrypt('%s', '%s'),'%s','%s',SYSDATE, '%s')", dto.getName(), dto.getPw(), dto.getName(), dto.getTitle(), dto.getContent(), dto.getId());
Statement stmt = conn.createStatement();
result = stmt.executeUpdate(sql);
return result;
}
//---------------------------------------
//--------------------------------
//회원 전용 삭제 메소드 추가
public int memberRemove(ConsultationDTO dto)
throws SQLException {
int result = 0;
String sql = String.format("DELETE FROM consultation WHERE sid=%s AND id='%s'", dto.getSid(), dto.getId());
Statement stmt = conn.createStatement();
result = stmt.executeUpdate(sql);
return result;
}
//--------------------------------
}
-------------------------------------------------
//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;
import javax.servlet.http.HttpSession;
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);
}
if (uri.indexOf("commentInsert.con") != -1) {
commentInsert(req, resp);
}
if (uri.indexOf("consultMemberInsertForm.con") != -1) {
consultMemberInsertForm(req, resp);
}
if (uri.indexOf("consultMemberInsert.con") != -1) {
consultMemberInsert(req, resp);
}
if (uri.indexOf("consultMemberModifyForm.con") != -1) {
consultMemberModifyForm(req, resp);
}
if (uri.indexOf("consultMemberDelete.con") != -1) {
consultMemberDelete(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;
ArrayList<ConsultationDTO> commentLists
= new ArrayList<ConsultationDTO>();
try {
dao.connect();
dto = dao.searchBySid(sid);
//----------------------------------
//답변글 읽어오는 부분 추가
if (dto.getRid() != null) {
rdto = dao.searchByRid(dto.getRid());
}
//----------------------------------
//----------------------------------
//댓글 목록 읽어오는 부분 추가
if (dto.getCommentCount() > 0) {
commentLists = dao.commentLists(sid);
}
//----------------------------------
}catch(Exception e){
System.out.println(e.toString());
}finally{
try {
dao.close();
}catch(Exception e){
}
}
req.setAttribute("dto", dto);
req.setAttribute("rdto", rdto);
req.setAttribute("commentLists", commentLists);
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 {
req.setCharacterEncoding("euc-kr");
String sid = req.getParameter("sid");
String title = req.getParameter("title");
String content = req.getParameter("content");
ConsultationDAO dao = new ConsultationDAO();
try{
dao.connect();
ConsultationDTO dto = new ConsultationDTO();
dto.setSid(sid);
dto.setTitle(title);
dto.setContent(content);
dao.modify(dto);
}catch(Exception e){
System.out.println(e.toString());
}finally{
try{
dao.close();
}catch(Exception e){
System.out.println(e.toString());
}
}
String url = String.format("consultView.con?sid=%s", sid);
resp.sendRedirect(url);
}
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);
}
private void commentInsert(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//데이터 수신
//데이터베이스 연결
//INSERT, UPDATE 쿼리 메소드 호출
//consultView.con 으로 페이지 이동
HttpSession session = req.getSession();
req.setCharacterEncoding("euc-kr");
String id = (String)session.getAttribute("id");
String name = (String)session.getAttribute("name");
String title = req.getParameter("title");
String sid = req.getParameter("sid");
//-----------------------------
//입력 오류 처리 필요
//오라클에서는 입력 데이터에
//작은따옴표(')가 있으면
//입력 오류 발생됨
//작은따옴표(')를 두 번 입력('')하면 해결됨.
title = title.replaceAll("'", "''");
//-----------------------------
ConsultationDAO dao = new ConsultationDAO();
try {
dao.connect();
ConsultationDTO dto = new ConsultationDTO();
dto.setId(id);
dto.setName(name);
dto.setTitle(title);
dto.setSid(sid);
dao.commentAdd(dto);
}catch(Exception e){
System.out.println(e.toString());
}finally{
try {
dao.close();
} catch (SQLException e) {
}
}
String url = String.format("consultView.con?sid=%s", sid);
resp.sendRedirect(url);
}
private void consultMemberInsertForm(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
RequestDispatcher dispatcher
= req.getRequestDispatcher("consultMemberInsertForm.jsp");
dispatcher.forward(req, resp);
}
private void consultMemberInsert(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//데이터 수신
//데이터베이스 연결
//INSERT 쿼리 메소드 호출
//consultList.con 으로 페이지 이동
//회원 정보를 세션을 이용해서 얻어 온다
//name, pw 를 채운다.
HttpSession session = req.getSession();
req.setCharacterEncoding("euc-kr");
String name = (String)session.getAttribute("name");
String pw = (String)session.getAttribute("id");
String title = req.getParameter("title");
String content = req.getParameter("content");
String id = (String)session.getAttribute("id");
//-----------------------------
//입력 오류 처리 필요
//오라클에서는 입력 데이터에
//작은따옴표(')가 있으면
//입력 오류 발생됨
//작은따옴표(')를 두 번 입력('')하면 해결됨.
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);
dto.setId(id);
dao.memberAdd(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 consultMemberModifyForm(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//글번호 수신
//수정 페이지로 이동 -> consultMemberModifyForm.jsp
req.setCharacterEncoding("euc-kr");
String sid = req.getParameter("sid");
ConsultationDAO dao = new ConsultationDAO();
ConsultationDTO dto = null;
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("consultModifyForm.jsp");
dispatcher.forward(req, resp);
}
//회원 전용 삭제 메소드 추가
private void consultMemberDelete(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//데이터 수신
//데이터베이스 연결
//DELETE 쿼리 메소드 호출
//consultList.con 으로 페이지 이동
//회원 정보를 세션을 이용해서 얻어 온다
//name, pw 를 채운다.
HttpSession session = req.getSession();
String sid = req.getParameter("sid");
String id = (String)session.getAttribute("id");
ConsultationDAO dao = new ConsultationDAO();
try {
dao.connect();
ConsultationDTO dto = new ConsultationDTO();
dto.setSid(sid);
dto.setId(id);
dao.memberRemove(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);
}
//--------------------------------------------
}
-------------------------------------------------
//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.*;
import java.util.ArrayList;
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;
}
public int add(MemberDTO dto)
throws SQLException {
int result = 0;
String sql = String.format("INSERT INTO jmember (id, pw, name, email, tel, wdate) VALUES ('%s', encrypt('%s', '%s'),'%s', '%s', '%s', SYSDATE)", dto.getId(), dto.getPw(), dto.getId(), dto.getName(), dto.getEmail(), dto.getTel());
Statement stmt = conn.createStatement();
result = stmt.executeUpdate(sql);
return result;
}
public ArrayList<MemberDTO> lists()
throws SQLException {
ArrayList<MemberDTO> arrayList
= new ArrayList<MemberDTO>();
String sql = String.format("SELECT id, name, tel, email, grade, TO_CHAR(wdate, 'YYYY-MM-DD HH24:MI') AS wdate FROM jmember ORDER BY grade ASC, name ASC");
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
while(rs.next()) {
MemberDTO dto = new MemberDTO();
dto.setId(rs.getString("id"));
dto.setName(rs.getString("name"));
dto.setTel(rs.getString("tel"));
dto.setEmail(rs.getString("email"));
dto.setGrade(rs.getInt("grade"));
dto.setWdate(rs.getString("wdate"));
arrayList.add(dto);
}
rs.close();
return arrayList;
}
public ArrayList<MemberDTO> lists(String wheres)
throws SQLException {
ArrayList<MemberDTO> arrayList
= new ArrayList<MemberDTO>();
String sql = String.format("SELECT id, name, tel, email, grade, TO_CHAR(wdate, 'YYYY-MM-DD HH24:MI') AS wdate FROM jmember %s ORDER BY grade ASC, name ASC", wheres);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
while(rs.next()) {
MemberDTO dto = new MemberDTO();
dto.setId(rs.getString("id"));
dto.setName(rs.getString("name"));
dto.setTel(rs.getString("tel"));
dto.setEmail(rs.getString("email"));
dto.setGrade(rs.getInt("grade"));
dto.setWdate(rs.getString("wdate"));
arrayList.add(dto);
}
rs.close();
return arrayList;
}
public int adminModify(MemberDTO dto)
throws SQLException {
int result = 0;
String sql = String.format("UPDATE jmember SET name='%s', email='%s', tel='%s', grade=%d WHERE id='%s'", dto.getName(), dto.getEmail(), dto.getTel(), dto.getGrade(), dto.getId());
Statement stmt = conn.createStatement();
result = stmt.executeUpdate(sql);
return result;
}
public int pwModify(String id, String pw, String newpw)
throws SQLException {
int result = 0;
String sql = String.format("UPDATE jmember SET pw=encrypt('%s', '%s') WHERE pw=encrypt('%s', '%s') AND id='%s'", newpw, id, pw, id, id);
Statement stmt = conn.createStatement();
result = stmt.executeUpdate(sql);
return result;
}
public int memberModify(MemberDTO dto)
throws SQLException {
int result = 0;
String sql = String.format("UPDATE jmember SET name='%s', email='%s', tel='%s' WHERE pw=encrypt('%s', '%s') AND id='%s'", dto.getName(), dto.getEmail(), dto.getTel(), dto.getPw(), dto.getId(), dto.getId());
Statement stmt = conn.createStatement();
result = stmt.executeUpdate(sql);
return result;
}
}
-------------------------------------------------
//MemberServlet.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;
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);
}
if (uri.indexOf("memberInsertForm.mem") != -1) {
memberInsertForm(req,resp);
}
if (uri.indexOf("memberInsert.mem") != -1) {
memberInsert(req,resp);
}
if (uri.indexOf("memberInsertOK.mem") != -1) {
memberInsertOK(req,resp);
}
if (uri.indexOf("memberInsertCancel.mem") != -1) {
memberInsertCancel(req,resp);
}
if (uri.indexOf("memberList.mem") != -1) {
memberList(req,resp);
}
if (uri.indexOf("adminUpdateForm.mem") != -1) {
adminUpdateForm(req,resp);
}
if (uri.indexOf("adminUpdate.mem") != -1) {
adminUpdate(req,resp);
}
if (uri.indexOf("memberPWModifyForm.mem") != -1) {
memberPWModifyForm(req,resp);
}
if (uri.indexOf("memberPWModify.mem") != -1) {
memberPWModify(req,resp);
}
if (uri.indexOf("memberModifyForm.mem") != -1) {
memberModifyForm(req,resp);
}
if (uri.indexOf("memberModify.mem") != -1) {
memberModify(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();
//로그인 상태 확인 부분 추가
if (session.getAttribute("id") == null) {
resp.sendRedirect("login.mem");
}
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);
}
private void memberInsertForm(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
RequestDispatcher dispatcher
= req.getRequestDispatcher("memberInsertForm.jsp");
dispatcher.forward(req, resp);
}
private void memberInsert(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//데이터 수신
//데이터베이스 연결
//INSERT 쿼리 메소드 호출
//memberInsertOK.con으로 페이지 이동
req.setCharacterEncoding("euc-kr");
String id = req.getParameter("id");
String pw = req.getParameter("pw");
String name = req.getParameter("name");
String email = req.getParameter("email");
String tel = req.getParameter("tel");
//-----------------------------
//입력 오류 처리 필요
//오라클에서는 입력 데이터에
//작은따옴표(')가 있으면
//입력 오류 발생됨
//작은따옴표(')를 두 번 입력('')하면 해결됨.
id = id.replaceAll("'", "''");
pw = pw.replaceAll("'", "''");
name = name.replaceAll("'", "''");
email = email.replaceAll("'", "''");
tel = tel.replaceAll("'", "''");
//-----------------------------
//데이터베이스 입력시 다시 한 번 아이디 중복 체크 추가
boolean idCheck = false;
MemberDAO dao = new MemberDAO();
try {
dao.connect();
MemberDTO dto = new MemberDTO();
dto.setId(id);
dto.setPw(pw);
dto.setName(name);
dto.setEmail(email);
dto.setTel(tel);
dao.add(dto);
//데이터베이스 입력시 다시 한 번 아이디 중복 체크 추가
idCheck = true;
}catch(Exception e){
System.out.println(e.toString());
}finally{
try {
dao.close();
} catch (SQLException e) {
}
}
if (idCheck) {
String url = String.format("memberInsertOK.mem");
resp.sendRedirect(url);
} else {
String url = String.format("memberInsertCancel.mem");
resp.sendRedirect(url);
}
}
private void memberInsertOK(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
RequestDispatcher dispatcher
= req.getRequestDispatcher("memberInsertOK.jsp");
dispatcher.forward(req, resp);
}
private void memberInsertCancel(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
RequestDispatcher dispatcher
= req.getRequestDispatcher("memberInsertCancel.jsp");
dispatcher.forward(req, resp);
}
private void memberList(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//관리자, 직원만 접근 가능
HttpSession session = req.getSession();
if ((Integer)session.getAttribute("grade") != 1
&& (Integer)session.getAttribute("grade") != 2) {
resp.sendRedirect("login.mem");
}
//----------------------------------
//등급별 회원 명단 출력 부분 추가
String grade = req.getParameter("grade");
if (grade == null) {
grade = "0";
}
//등급별로 쿼리의 다른 조건식 생성
String wheres = "";
if (!grade.equals("0")) {
wheres = String.format("WHERE grade=%s", grade);
}
//----------------------------------
ArrayList<MemberDTO> arrayList
= new ArrayList<MemberDTO>();
MemberDAO dao = new MemberDAO();
try {
dao.connect();
//----------------------------------
//등급별 출력 이전 쿼리
//arrayList = dao.lists();
//등급별 출력 이후 쿼리
arrayList = dao.lists(wheres);
//----------------------------------
}catch(Exception e){
System.out.println(e.toString());
}finally{
try {
dao.close();
} catch (SQLException e) {
}
}
req.setAttribute("arrayList", arrayList);
RequestDispatcher dispatcher
= req.getRequestDispatcher("memberList.jsp");
dispatcher.forward(req, resp);
}
private void adminUpdateForm(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//관리자만 접근 가능
HttpSession session = req.getSession();
if ((Integer)session.getAttribute("grade") != 1) {
resp.sendRedirect("login.mem");
}
//아이디 수신
//해당 아이디에 대한 개인정보(MemberDTO) 읽어오기
//수정 페이지에 전송 준비
//수정 페이지(adminUpdateForm.jsp)로 이동
String id = req.getParameter("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 (SQLException e) {
}
}
req.setAttribute("dto", dto);
RequestDispatcher dispatcher
= req.getRequestDispatcher("adminUpdateForm.jsp");
dispatcher.forward(req, resp);
}
private void adminUpdate(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//관리자만 접근 가능
HttpSession session = req.getSession();
if ((Integer)session.getAttribute("grade") != 1) {
resp.sendRedirect("login.mem");
}
//데이터 수신
//UPDATE 쿼리 메소드(adminModify(MemberDTO dto)) 호출
//memberList.con으로 이동
req.setCharacterEncoding("euc-kr");
String id = req.getParameter("id");
String name = req.getParameter("name");
String email = req.getParameter("email");
String tel = req.getParameter("tel");
String grade = req.getParameter("grade");
//-----------------------------
//입력 오류 처리 필요
//오라클에서는 입력 데이터에
//작은따옴표(')가 있으면
//입력 오류 발생됨
//작은따옴표(')를 두 번 입력('')하면 해결됨.
name = name.replaceAll("'", "''");
email = email.replaceAll("'", "''");
tel = tel.replaceAll("'", "''");
//-----------------------------
MemberDAO dao = new MemberDAO();
try {
dao.connect();
MemberDTO dto = new MemberDTO();
dto.setId(id);
dto.setName(name);
dto.setEmail(email);
dto.setTel(tel);
dto.setGrade(Integer.parseInt(grade));
dao.adminModify(dto);
}catch(Exception e){
System.out.println(e.toString());
}finally{
try {
dao.close();
} catch (SQLException e) {
}
}
String url = String.format("memberList.mem");
resp.sendRedirect(url);
}
private void memberPWModifyForm(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
RequestDispatcher dispatcher
= req.getRequestDispatcher("memberPWModifyForm.jsp");
dispatcher.forward(req, resp);
}
private void memberPWModify(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String pw = req.getParameter("pw");
String newpw = req.getParameter("newpw");
HttpSession session = req.getSession();
String id = (String)session.getAttribute("id");
//패스워드 검사 과정
MemberDAO dao = new MemberDAO();
int result = 0;
try {
dao.connect();
result = dao.pwModify(id, pw, newpw);
}catch(Exception e){
System.out.println(e.toString());
}finally{
try {
dao.close();
}catch(Exception e){
}
}
if (result == 1) {
//정보 페이지로 이동
String url = String.format("memberInfo.mem");
resp.sendRedirect(url);
} else {
req.setAttribute("error", "true");
RequestDispatcher dispatcher
= req.getRequestDispatcher("memberPWModifyForm.jsp");
dispatcher.forward(req, resp);
}
}
private void memberModifyForm(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//로그인 상태 확인
HttpSession session = req.getSession();
if (session.getAttribute("id") == null) {
resp.sendRedirect("login.mem");
}
//아이디 확보 -> 세션에서 얻는다.
//해당 아이디에 대한 개인정보(MemberDTO) 읽어오기
//수정 페이지에 전송 준비
//수정 페이지(memberModifyForm.jsp)로 이동
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 (SQLException e) {
}
}
req.setAttribute("dto", dto);
RequestDispatcher dispatcher
= req.getRequestDispatcher("memberModifyForm.jsp");
dispatcher.forward(req, resp);
}
private void memberModify(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//로그인 상태 확인
HttpSession session = req.getSession();
if (session.getAttribute("id") == null) {
resp.sendRedirect("login.mem");
}
//데이터 수신
//UPDATE 쿼리 메소드(memberModify(MemberDTO dto)) 호출
//memberInfo.mem으로 이동
req.setCharacterEncoding("euc-kr");
String id = (String)session.getAttribute("id");
String pw = req.getParameter("pw");
String name = req.getParameter("name");
String email = req.getParameter("email");
String tel = req.getParameter("tel");
//-----------------------------
//입력 오류 처리 필요
//오라클에서는 입력 데이터에
//작은따옴표(')가 있으면
//입력 오류 발생됨
//작은따옴표(')를 두 번 입력('')하면 해결됨.
name = name.replaceAll("'", "''");
email = email.replaceAll("'", "''");
tel = tel.replaceAll("'", "''");
//-----------------------------
MemberDAO dao = new MemberDAO();
MemberDTO dto = new MemberDTO();
int result = 0;
try {
dao.connect();
dto.setId(id);
dto.setPw(pw);
dto.setName(name);
dto.setEmail(email);
dto.setTel(tel);
result = dao.memberModify(dto);
}catch(Exception e){
System.out.println(e.toString());
}finally{
try {
dao.close();
} catch (SQLException e) {
}
}
if (result == 1) {
//정보 페이지로 이동
String url = String.format("memberInfo.mem");
resp.sendRedirect(url);
} else {
req.setAttribute("error", "true");
req.setAttribute("dto", dto);
RequestDispatcher dispatcher
= req.getRequestDispatcher("memberModifyForm.jsp");
dispatcher.forward(req, resp);
}
}
}
-------------------------------------------------
//common.css, table.css -> CSS 전용 파일.
//common.css
@CHARSET "EUC-KR";
@font-face{font-family:나눔고딕;src:url(font/NanumGothic.eot);}
div, table, SELECT, INPUT, TEXTAREA {font-family:나눔고딕;font-size:12pt;}
a {
text-decoration: none;
color:gray;
}
a:hover {
text-decoration: underline;
color:red;
}
//table.css
@CHARSET "EUC-KR";
TABLE.style01{ width:100%; border-width:2px; border-color:#999999; border-collapse:collapse; padding: 0px 0px 0px 0px; margin: 0px 0px 0px 0px; table-layout:fixed; }
TR, TD, SELECT, INPUT, DIV, TEXTAREA{ color:#737373; }
TR, TD{ padding:5px 5px 5px 5px; }
TEXTAREA{
scrollbar-face-color: #EFEFEF;
scrollbar-shadow-color: #FFFFFF;
scrollbar-highlight-color: #FFFFFF;
scrollbar-3dlight-color: #DFDFDF;
scrollbar-darkshadow-color: #DFDFDF;
scrollbar-track-color: #ffffff; scrollbar-arrow-color: #000000;
}
TD.bDot{text-align:center; border-bottom-style:dotted; border-bottom-width:1px; border-bottom-color:#999999; }
TD.bTitle{ border-bottom-style:dotted; border-bottom-width:1px; border-bottom-color:#999999; }
TD.tName{background-color:#D2D2D2; text-align:center; font-weight:bold; color:#333333; }
.borderTop {border-top-style:solid; border-top-width:1px; border-top-color:#999999;}
.borderBottom {border-bottom-style:solid; border-bottom-width:1px; border-bottom-color:#999999;}
DIV.mContent{ overflow:hidden; word-break:break-all; width:100%; }
INPUT.cButton{ width:70px; }
-------------------------------------------------
//consultation.js -> 자바스크립트 전용 파일.
function consultInsertSubmit() {
//데이터 검사
//에러 메시지 출력
//데이터 전송
var obj = document.getElementById("consultInsertForm");
var name = document.getElementById("name");
var pw = document.getElementById("pw");
var title = document.getElementById("title");
var nameMsg = document.getElementById("nameMsg");
nameMsg.style.display = "none";
var pwMsg = document.getElementById("pwMsg");
pwMsg.style.display = "none";
var titleMsg = document.getElementById("titleMsg");
titleMsg.style.display = "none";
if (name.value == "" || name.value.length > 20) {
nameMsg.style.display = "inline";
return;
}
if (pw.value == "" || pw.value.length > 20) {
pwMsg.style.display = "inline";
return;
}
if (title.value == "" || title.value.length > 100) {
titleMsg.style.display = "inline";
return;
}
obj.submit();
}
function pwFormSubmit() {
//데이터 검사
//에러 메시지 출력
//데이터 전송
var obj = document.getElementById("pwForm");
var name = document.getElementById("name");
var pw = document.getElementById("pw");
var nameMsg = document.getElementById("nameMsg");
nameMsg.style.display = "none";
var pwMsg = document.getElementById("pwMsg");
pwMsg.style.display = "none";
if (name.value == "" || name.value.length > 20) {
nameMsg.style.display = "inline";
return;
}
if (pw.value == "" || pw.value.length > 20) {
pwMsg.style.display = "inline";
return;
}
obj.submit();
}
function consultModifySubmit(){
var obj = document.getElementById("consultModifyForm");
var title = document.getElementById("title");
var titleMsg = document.getElementById("titleMsg");
titleMsg.style.display="none";
if(title.value=="" || title.value.length>100){
titleMsg.style.display="inline";
return;
}
obj.submit();
}
function consultSearchSubmit() {
//데이터 검사
//에러 메시지 출력
//데이터 전송
var obj = document.getElementById("consultSearchForm");
var svalue = document.getElementById("svalue");
var searchMsg = document.getElementById("searchMsg");
searchMsg.style.display = "none";
if (svalue.value == "") {
searchMsg.style.display = "inline";
return;
}
obj.submit();
}
function loginFormSubmit() {
var obj = document.getElementById("loginForm");
var id = document.getElementById("id");
var pw = document.getElementById("pw");
var idMsg = document.getElementById("idMsg");
idMsg.style.display = "none";
var pwMsg = document.getElementById("pwMsg");
pwMsg.style.display = "none";
if (id.value == "" || id.value.length > 20) {
idMsg.style.display = "inline";
return;
}
if (pw.value == "" || pw.value.length > 20) {
pwMsg.style.display = "inline";
return;
}
obj.submit();
}
//댓글 펼치기, 감추기 호출 함수 추가
function commentDivPanel() {
var commentMsg = document.getElementById("commentMsg");
var commentDiv = document.getElementById("commentDiv");
if (commentMsg.innerHTML == "[댓글 펼치기]") {
commentMsg.innerHTML = "[댓글 감추기]";
commentDiv.style.display = "block";
} else {
commentMsg.innerHTML = "[댓글 펼치기]";
commentDiv.style.display = "none";
}
}
function commentInsertSubmit() {
var commentInsertForm = document.getElementById("commentInsertForm");
//데이터 검사 과정 추가
var title = document.getElementById("title");
var commentErrMsg = document.getElementById("commentErrMsg");
commentErrMsg.style.display="none";
if(title.value=="" || title.value.length>200){
commentErrMsg.style.display="inline";
return;
}
commentInsertForm.submit();
}
function consultMemberInsertSubmit() {
//데이터 검사
//에러 메시지 출력
//데이터 전송
var obj = document.getElementById("consultInsertForm");
var title = document.getElementById("title");
var titleMsg = document.getElementById("titleMsg");
titleMsg.style.display = "none";
if (title.value == "" || title.value.length > 100) {
titleMsg.style.display = "inline";
return;
}
obj.submit();
}
//---------------------------------
//회원 전용 삭제 함수 추가
function consultMemberDelete(sid) {
if (confirm("현재 자료를 삭제하시겠습니까?")) {
window.location.href="consultMemberDelete.con?sid="+sid;
}
}
//---------------------------------
//-------------------------------
//회원 입력 관련 함수 추가
//아이디 중복 검사 확인용 변수 추가
var idCheckClick = false;
var idCheckResult = false;
function idCheck() {
var id = document.getElementById("id");
var idMsg = document.getElementById("idMsg");
idMsg.innerHTML = "";
if (id.value == "" || id.value.length > 20) {
/*
idMsg.style.color = "red";
idMsg.style.fontSize = "small";
idMsg.innerHTML = "1~20자 이내의 아이디를 입력해야 합니다.";
*/
idMsg.innerHTML = "<span style=\"color:red; font-size:10pt;\">1~20자 이내의 아이디를 입력해야 합니다.</span>";
return;
}
//Ajax 요청
ajaxFunc(id.value);
idCheckClick = true;
}
function memberFormSubmit() {
//데이터 검사
var obj = document.getElementById("memberForm");
var id = document.getElementById("id");
var pw = document.getElementById("pw");
var name = document.getElementById("name");
var email = document.getElementById("email");
var tel = document.getElementById("tel");
var idMsg = document.getElementById("idMsg");
idMsg.innerHTML = "";
if (id.value == "" || id.value.length > 20) {
idMsg.innerHTML = "<span style=\"color:red; font-size:10pt;\">1~20자 이내의 아이디를 입력해야 합니다.</span>";
return;
}
var pwMsg = document.getElementById("pwMsg");
pwMsg.style.display = "none";
if (pw.value == "" || pw.value.length > 20) {
pwMsg.style.display = "inline";
return;
}
var nameMsg = document.getElementById("nameMsg");
nameMsg.style.display = "none";
if (name.value == "" || name.value.length > 20) {
nameMsg.style.display = "inline";
return;
}
var emailMsg = document.getElementById("emailMsg");
emailMsg.style.display = "none";
if (email.value == "" || email.value.length > 100) {
emailMsg.style.display = "inline";
return;
}
var telMsg = document.getElementById("telMsg");
telMsg.style.display = "none";
if (tel.value == "" || tel.value.length > 100) {
telMsg.style.display = "inline";
return;
}
var submitMsg = document.getElementById("submitMsg");
submitMsg.innerHTML = "";
//아이디 중복 검사 여부 확인
if (!idCheckClick) {
submitMsg.innerHTML = "<span style=\"color:red; font-size:10pt;\">아이디 중복 검사를 먼저 해야 합니다.</span>";
return;
} else {
if (!idCheckResult) {
submitMsg.innerHTML = "<span style=\"color:red; font-size:10pt;\">사용 불가능한 아이디이므로 다른 아이디를 사용해야 합니다.</span>";
return;
}
}
//데이터 전송
obj.submit();
}
//Ajax 관련 함수
var xmlReq;
function ajaxFunc(id) {
xmlReq = new XMLHttpRequest(); //IE7.0 이상
var url = "memberIDCheck.jsp";
var postString = "data="+id;
xmlReq.onreadystatechange = callBack;
xmlReq.open("POST", url, true);
xmlReq.setRequestHeader("Content-Type"
, "application/x-www-form-urlencoded; charset=euc-kr");
xmlReq.send(postString);
}
function callBack() {
if (xmlReq.readyState == 4) {
if (xmlReq.status == 200) {
printData();
}
}
}
function printData() {
var result = xmlReq.responseText;
var idMsg = document.getElementById("idMsg");
idMsg.innerHTML = "";
if (result.indexOf("OK") != -1) {
idMsg.innerHTML = "<span style=\"color:blue; font-size:10pt;\">사용 가능한 아이디입니다.</span>";
idCheckResult = true;
} else {
idMsg.innerHTML = "<span style=\"color:red; font-size:10pt;\">사용 불가능한 아이디입니다.</span>";
idCheckResult = false;
}
}
//--------------------------------
function memberPwFormSubmit() {
//데이터 검사
var obj = document.getElementById("memberPwForm");
var pw = document.getElementById("pw");
var newpw = document.getElementById("newpw");
var pwMsg = document.getElementById("pwMsg");
var newpwMsg = document.getElementById("newpwMsg");
pwMsg.style.display = "none";
newpwMsg.style.display = "none";
if (pw.value == "" || pw.value.length > 20) {
pwMsg.style.display = "inline";
return;
}
if (newpw.value == "" || newpw.value.length > 20) {
newpwMsg.style.display = "inline";
return;
}
//데이터 전송
obj.submit();
}
function memberModifyFormSubmit() {
//데이터 검사
var obj = document.getElementById("memberModifyForm");
var pw = document.getElementById("pw");
var name = document.getElementById("name");
var email = document.getElementById("email");
var tel = document.getElementById("tel");
var pwMsg = document.getElementById("pwMsg");
pwMsg.style.display = "none";
if (pw.value == "" || pw.value.length > 20) {
pwMsg.style.display = "inline";
return;
}
var nameMsg = document.getElementById("nameMsg");
nameMsg.style.display = "none";
if (name.value == "" || name.value.length > 20) {
nameMsg.style.display = "inline";
return;
}
var emailMsg = document.getElementById("emailMsg");
emailMsg.style.display = "none";
if (email.value == "" || email.value.length > 100) {
emailMsg.style.display = "inline";
return;
}
var telMsg = document.getElementById("telMsg");
telMsg.style.display = "none";
if (tel.value == "" || tel.value.length > 100) {
telMsg.style.display = "inline";
return;
}
//데이터 전송
obj.submit();
}
--------------------------------------------------
//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"%>
<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="memberInsertForm.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>
--------------------------------------------------
//consultList.jsp -> 글목록 페이지
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ 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.getCommentCount() > 0) {
str.append(String.format("<span style=\"color:red; font-size:10pt;\">[%d]</span>", dto.getCommentCount()));
}
//답변글 출력 부분
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>
<%-- 메인메뉴를 import 구문으로 대체 --%>
<c:import url="mainMenu.jsp"></c:import>
<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;">
<%-- 회원 로그인 여부에 따라서 다른 새글쓰기 메뉴 출력됨 --%>
<c:choose>
<c:when test="${empty sessionScope.id}"><a href="consultInsertForm.con">[새글쓰기]</a></c:when>
<c:otherwise><a href="consultMemberInsertForm.con">[새글쓰기]</a></c:otherwise>
</c:choose>
</td>
</tr>
</table>
</form>
</div>
</div>
</body>
</html>
--------------------------------------------------
//consultInsertForm.jsp -> 글 입력 페이지
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!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>
<%-- 메인메뉴를 import 구문으로 대체 --%>
<c:import url="mainMenu.jsp"></c:import>
<div>
<h3>[상담게시판_글쓰기]</h3>
<form action="consultInsert.con" method="post" id="consultInsertForm">
<table cellpadding="5" class="style01">
<tr>
<td class="tName" width="100">작성자*</td>
<td class="bTitle"><input type="text" id="name" name="name"><span id="nameMsg" style="color:red; display:none;">1~20자 이름 입력</span></td>
</tr>
<tr>
<td class="tName" width="100">패스워드*</td>
<td class="bTitle"><input type="password" id="pw" name="pw"><span id="pwMsg" style="color:red; display:none;">1~20자 패스워드 입력</span></td>
</tr>
<tr>
<td class="tName" width="100">제목*</td>
<td class="bTitle"><input type="text" style="width:600px;" id="title" name="title"><span id="titleMsg" style="color:red; display:none;">1~100자 제목 입력</span></td>
</tr>
<tr>
<td class="tName" width="100">내용</td>
<td class="bTitle"><textarea style="width:600px;height:200px;" id="content" name="content"></textarea></td>
</tr>
</table>
<table>
<tr>
<td>
<a href="javascript:consultInsertSubmit()">[글쓰기]</a>
<a href="javascript:consultInsertReset()">[새로작성]</a>
<a href="consultList.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="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<%@ page import="com.test.*" %>
<%@ page import="java.util.*" %>
<%
pageContext.setAttribute("newLineChar", "\n");
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();
int commentCount = dto.getCommentCount();
//---------------------------------
//회원 전용 수정, 삭제 부분 추가
//데이터베이스에서 회원 아이디 정보를 읽어오는 부분 추가
String id = dto.getId();
if (id == null) {
id = "비회원";
}
//회원 아이디 정보를 EL 표현에서 사용할 수 있도록 추가한 부분
request.setAttribute("id", id);
//---------------------------------
//----------------------------------
//출력 오류 처리 필요
//내용에 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", " ");
}
//----------------------------------
//-----------------------------------
//댓글 목록 출력 준비 추가
@SuppressWarnings("unchecked")
ArrayList<ConsultationDTO> commentLists
= (ArrayList<ConsultationDTO>)request.getAttribute("commentLists");
StringBuilder comments = new StringBuilder();
for (ConsultationDTO cdto : commentLists) {
comments.append("<tr>");
comments.append(String.format("<td>%s</td>", cdto.getName()));
comments.append(String.format("<td>%s</td>", cdto.getTitle()));
comments.append(String.format("<td>%s</td>", cdto.getWdate()));
//댓글에 저장된 아이디와 로그인한 아이디가 같은 경우
//삭제 메뉴 출력
if (session.getAttribute("id") != null
&& cdto.getId().equals((String)session.getAttribute("id"))) {
comments.append("<td><a href=\"\">[삭제]</a></td>");
} else {
comments.append("<td></td>");
}
comments.append("</tr>");
}
//-----------------------------------
%>
<!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>
<%-- 메인메뉴를 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%>(<%=id%>)</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;font-size:10pt;">
<%=commentCount%> 개의 댓글이 있습니다.
<a href="javascript:commentDivPanel()" id="commentMsg">[댓글 펼치기]</a>
</div>
<div style="margin-top:10px;font-size:10pt;display:none;" id="commentDiv">
<c:if test="${!empty sessionScope.id}">
<!-- 댓글 입력 부분 추가 -->
<form action="commentInsert.con" method="post" id="commentInsertForm">
<input type="hidden" name="sid" value="<%=sid%>">
글쓴이 '<%=(String)session.getAttribute("name")%>' 이름으로
<input type="text" style="width:500px;" id="title" name="title">
(200자 이내)
<a href="javascript:commentInsertSubmit()">[댓글쓰기]</a>
<span id="commentErrMsg" style="color:red; display:none;">1~200자 이내로 입력해야 합니다.</span>
</form>
</c:if>
<table cellpadding="5" class="style01 borderTop" style="font-size:10pt;">
<tr>
<td class="tName" width="120">글쓴이</td>
<td class="tName">댓글내용</td>
<td class="tName" width="120">글쓴날짜</td>
<td class="tName"></td>
</tr>
<!-- <tr>
<td>박길동</td>
<td>참고합니다.</td>
<td>2012-03-16</td>
<td><a href="">[삭제]</a></td>
</tr> -->
<%=comments%>
</table>
</div>
<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>
<%-- ------------------------------- --%>
<%-- 회원 전용 수정, 삭제 추가한 부분 --%>
<%-- 회원 로그인한 경우와 비회원인 경우를 구분해서 수정, 삭제 진행 --%>
<c:choose>
<c:when test="${empty sessionScope.id && id == '비회원'}">
<a href="consultModifyForm.con?sid=<%=sid%>">[글 수정]</a>
<a href="consultRemoveForm.con?sid=<%=sid%>">[글 삭제]</a>
</c:when>
<c:when test="${!empty sessionScope.id && sessionScope.id == id}">
<a href="consultMemberModifyForm.con?sid=<%=sid%>">[글 수정]</a>
<a href="javascript:consultMemberDelete(<%=sid%>)">[글 삭제]</a>
</c:when>
<c:otherwise>
</c:otherwise>
</c:choose>
<%-- ------------------------------- --%>
</div>
</div>
</div>
</body>
</html>
--------------------------------------------------
//consultPW.jsp -> 패스워드 검사 페이지
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%
String sid = request.getParameter("sid");
String error = "false";
Object result = request.getAttribute("error");
if (result != null) {
error = (String)result;
}
%>
<!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() {
if (<%=error%>) {
alert("작성자 또는 패스워드가 틀렸습니다.");
}
}
</script>
</head>
<body onload="msg()">
<div>
<%-- 메인메뉴를 import 구문으로 대체 --%>
<c:import url="mainMenu.jsp"></c:import>
<div>
<h3>[상담게시판_패스워드 확인]</h3>
해당 게시물의 수정, 삭제를 위해 작성자, 패스워드를 확인합니다.
<%-- action 속성을 생략하면 수정, 삭제 두 가지 용도로 모두 사용 가능 --%>
<form method="post" id="pwForm">
<%-- 수정, 삭제를 위해서 sid 값을 재전송해야 한다. --%>
<input type="hidden" name="sid" value="<%=sid%>">
<table cellpadding="5" style="style01">
<tr>
<td>작성자*</td><td><input type="text" id="name" name="name" ><span id="nameMsg" style="color:red; display:none;">1~20자 이름 입력</span></td>
</tr>
<tr>
<td>패스워드*</td><td><input type="password" id="pw" name="pw"><span id="pwMsg" style="color:red; display:none;">1~20자 패스워드 입력</span></td>
</tr>
</table>
<a href="javascript:pwFormSubmit()">[확인]</a>
<a href="">[취소]</a>
</form>
</div>
</div>
</body>
</html>
--------------------------------------------------
//consultModifyForm.jsp -> 글 수정 페이지
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@ 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 title = dto.getTitle();
String content = dto.getContent();
//------------------------------------
//수정 오류 처리 필요
//수정 폼 화면에서 제목 부분에 큰 따옴표(") 포함시
//제목 일부가 나타나지 않는 문제 발생
//-> 큰따옴표(")를 특수문자(")로 처리함.
title = title.replaceAll("\"", """);
//------------------------------------
%>
<!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>
<%-- 메인메뉴를 import 구문으로 대체 --%>
<c:import url="mainMenu.jsp"></c:import>
<div>
<h3>[상담게시판_글수정]</h3>
<form action="consultModify.con" method="post" id="consultModifyForm">
<%--수정을 위해서 sid 값 재전송 필요 --%>
<input type="hidden" name = "sid" value="<%=sid%>">
<table cellpadding="5" class="style01 borderTop borderBottom">
<!--
<tr>
<td class="tName" width="100">작성자*</td>
<td class="bTitle"><input type="text" id="uname" name="uname" value=""><span id="unameMsg"></span></td>
</tr>
<tr>
<td class="tName" width="100">패스워드*</td>
<td class="bTitle"><input type="password" id="pw" name="pw" value=""><span id="pwMsg"></span></td>
</tr>
-->
<tr>
<td class="tName" width="100">제목*</td>
<td class="bTitle"><input type="text" style="width:600px;" id="title" name="title" value="<%=title%>"><span id="titleMsg"></span></td>
</tr>
<tr>
<td class="tName" width="100">내용</td>
<td class="bTitle"><textarea style="width:600px;height:200px;" id="content" name="content"><%=content%></textarea></td>
</tr>
</table>
<table>
<tr>
<td>
<a href="javascript:consultModifySubmit()">[글수정]</a>
<a href="javascript:consultModifyReset()">[새로작성]</a>
<a href="">[취소]</a>
<a href="consultList.con">[목록보기]</a>
</td>
</tr>
</table>
</form>
</div>
</div>
</body>
</html>
--------------------------------------------------
//adminReplyForm.jsp -> 관리자 답변글 쓰기 전용 페이지
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@ 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", " ");
//----------------------------------
%>
<!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 adminReplySubmit() {
//작성자, 제목 검사 후 서브밋 처리
var adminReplyForm = document.getElementById("adminReplyForm");
var name = document.getElementById("name");
var title = document.getElementById("title");
var nameMsg = document.getElementById("nameMsg");
var titleMsg = document.getElementById("titleMsg");
if (name.value == "") {
nameMsg.innerHTML = "이름을 입력해야 합니다.";
return;
}
if (title.value == "") {
titleMsg.innerHTML = "제목을 입력해야 합니다.";
return;
}
adminReplyForm.submit();
}
</script>
</head>
<body>
<div>
<%-- 메인메뉴를 import 구문으로 대체 --%>
<c:import url="mainMenu.jsp"></c:import>
<div>
<h3>[*상담게시판_답변글쓰기]</h3>
<div style="margin-bottom:20px;">
<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%></td>
</tr>
</table>
</div>
<form action="adminReply.con" method="post" id="adminReplyForm">
<%-- 답변글 저장시 부모글 번호 재전송 필요 --%>
<input type="hidden" name="sid" value="<%=sid%>">
<table cellpadding="5" class="style01 borderTop borderBottom">
<tr>
<td class="tName" width="100">작성자*</td>
<td class="bTitle"><input type="text" id="name" name="name" value="관리자"><span id="nameMsg"></span></td>
</tr>
<tr>
<td class="tName" width="100">제목*</td>
<td class="bTitle"><input type="text" style="width:600px;" id="title" name="title"><span id="titleMsg"></span></td>
</tr>
<tr>
<td class="tName" width="100">내용</td>
<td class="bTitle"><textarea style="width:600px;height:200px;" id="content" name="content"></textarea></td>
</tr>
</table>
<table>
<tr>
<td>
<a href="javascript:adminReplySubmit()">[글쓰기]</a>
<a href="consultList.con">[목록보기]</a>
</td>
</tr>
</table>
</form>
</div>
</div>
</body>
</html>
--------------------------------------------------
//login.jsp -> 로그인 화면용 페이지
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%
String error = "false";
Object result = request.getAttribute("error");
if (result != null) {
error = (String)result;
}
%>
<!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() {
if (<%=error%>) {
alert("아이디 또는 패스워드가 틀렸습니다.");
}
}
</script>
</head>
<body onload="msg()">
<div>
<%-- 메인메뉴를 import 구문으로 대체 --%>
<c:import url="mainMenu.jsp"></c:import>
<div>
<h3>[로그인]</h3>
<form action="login.mem" method="post" id="loginForm">
<table cellpadding="5" style="style01">
<tr>
<td>아이디*</td><td><input type="text" id="id" name="id"><span id="idMsg" style="color:red; display:none;">1~20자 이내 아이디 입력해야 합니다.</span></td>
</tr>
<tr>
<td>패스워드*</td><td><input type="password" id="pw" name="pw"><span id="pwMsg" style="color:red; display:none;">1~20자 이내 패스워드 입력해야 합니다.</span></td>
</tr>
</table>
<a href="javascript:loginFormSubmit()">[확인]</a>
</form>
</div>
</div>
</body>
</html>
--------------------------------------------------
//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"%>
<%@ 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>
<%-- 관리자, 직원 전용 메뉴 출력 부분 --%>
<c:if test="${sessionScope.grade == '1' || sessionScope.grade == '2'}">
<a href="memberList.mem">[*회원명단]</a>
</c:if>
<a href="memberPWModifyForm.mem">[패스워드변경]</a>
<a href="memberModifyForm.mem">[회원정보수정]</a>
<a href="">[회원탈퇴]</a>
</div>
</div>
</body>
</html>
--------------------------------------------------
//consultMemberInsertForm.jsp -> 회원 전용 글쓰기 페이지
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!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>
<%-- 메인메뉴를 import 구문으로 대체 --%>
<c:import url="mainMenu.jsp"></c:import>
<div>
<h3>[상담게시판_글쓰기]</h3>
<form action="consultMemberInsert.con" method="post" id="consultInsertForm">
<table cellpadding="5" class="style01">
<tr>
<td class="tName" width="100">제목*</td>
<td class="bTitle"><input type="text" style="width:600px;" id="title" name="title"><span id="titleMsg" style="color:red; display:none;">1~100자 제목 입력</span></td>
</tr>
<tr>
<td class="tName" width="100">내용</td>
<td class="bTitle"><textarea style="width:600px;height:200px;" id="content" name="content"></textarea></td>
</tr>
</table>
<table>
<tr>
<td>
<a href="javascript:consultMemberInsertSubmit()">[글쓰기]</a>
<a href="javascript:consultInsertReset()">[새로작성]</a>
<a href="consultList.con">[목록보기]</a>
</td>
</tr>
</table>
</form>
</div>
</div>
</body>
</html>
--------------------------------------------------
//memberInsertForm.jsp -> 회원 가입 화면용 페이지
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!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="ajaxUtil.js"></script>
<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>
<form action="memberInsert.mem" method="post" id="memberForm">
* 등록된 전화로 통화가 가능한 경우에만 회원 가입이 완료됩니다.<br>
<table cellpadding="5" class="style01 borderTop borderBottom">
<tr>
<td class="tName" width="200px">*아이디<span style="font-size:9pt;">(20자 이내 영숫자)</span></td>
<td class="bTitle"><input type="text" id="id" name="id" style="ime-mode:disabled;"><a href="javascript:idCheck()">[아이디 중복확인]</a><span id="idMsg"></span></td>
</tr>
<tr>
<td class="tName" width="200px">*패스워드<span style="font-size:9pt;">(20자 이내)</span></td>
<td class="bTitle"><input type="password" id="pw" name="pw"><span id="pwMsg" style="color:red; font-size:10pt; display:none; ">1~20자 이내 패스워드를 입력해야 합니다.</span></td>
</tr>
<tr>
<td class="tName" width="200px">*이름<span style="font-size:9pt;">(20자 이내)</span></td>
<td class="bTitle"><input type="text" id="name" name="name"><span id="nameMsg" style="color:red; font-size:10pt; display:none; ">1~20자 이내 이름을 입력해야 합니다.</span></td>
</tr>
<tr>
<td class="tName" width="200px">*이메일<span style="font-size:9pt;">(100자 이내)</span></td>
<td class="bTitle"><input type="text" id="email" name="email" style="width:300px"><span id="emailMsg" style="color:red; font-size:10pt; display:none; ">1~100자 이내 이메일을 입력해야 합니다.</span></td>
</tr>
<tr>
<td class="tName" width="200px">*전화<span style="font-size:9pt;">(30자 이내)</span></td>
<td class="bTitle"><input type="text" id="tel" name="tel" style="width:300px"><span id="telMsg" style="color:red; font-size:10pt; display:none; ">1~30자 이내 전화를 입력해야 합니다.</span></td>
</tr>
</table>
<br>
<a href="javascript:memberFormSubmit()">[확인]</a>
<span id="submitMsg"></span>
</form>
</div>
</div>
</body>
</html>
--------------------------------------------------
//memberIDCheck.jsp -> Ajax를 이용한 아이디 중복 체크 페이지
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@ page import="com.test.*" %>
<%
String data
= request.getParameter("data");
String result = "OK";
MemberDAO dao = new MemberDAO();
try {
dao.connect();
MemberDTO dto = dao.searchId(data);
if (dto != null) {
result = "Cancel";
}
}catch(Exception e){
System.out.println(e.toString());
}finally{
dao.close();
}
out.write(result);
%>
--------------------------------------------------
//memberInsertOK.jsp -> 회원 가입 완료 메시지 페이지
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!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 style="width:500px;">
<h3>[회원가입]</h3>
<h2>회원 가입이 완료되었습니다.</h2>
<a href="login.mem">[로그인 페이지로 이동]</a>
</div>
</div>
</body>
</html>
--------------------------------------------------
//memberInsertCancel.jsp -> 회원 가입 실패 메시지 페이지
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!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 style="width:500px;">
<h3>[회원가입]</h3>
<h2>회원 가입이 실패했습니다. 다시 시도해주십시요.</h2>
<a href="memberInsertForm.mem">[회원가입 페이지로 이동]</a>
</div>
</div>
</body>
</html>
--------------------------------------------------
//memberList.jsp -> 회원 명단 출력 페이지 (관리자, 직원 전용)
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ page import="java.util.*" %>
<%@ page import="com.test.*" %>
<%
String[] array = {"관리자", "직원", "학생", "회원가입"};
//----------------------------
//등급별 출력시 선택한 등급 표시하기 위한 부분 추가
String grade = request.getParameter("grade");
if (grade == null) {
grade = "0";
}
//----------------------------
@SuppressWarnings("unchecked")
ArrayList<MemberDTO> arrayList
= (ArrayList<MemberDTO>)request.getAttribute("arrayList");
StringBuilder str = new StringBuilder();
for (MemberDTO dto : arrayList) {
str.append("<tr>");
str.append(String.format("<td class=\"bDot\">%s</td>", dto.getId()));
str.append(String.format("<td class=\"bDot\">%s</td>", dto.getName()));
str.append(String.format("<td class=\"bDot\">%s</td>", dto.getTel()));
str.append(String.format("<td class=\"bDot\">%s</td>", dto.getEmail()));
str.append(String.format("<td class=\"bDot\">%s</td>", array[dto.getGrade()-1]));
str.append(String.format("<td class=\"bDot\">%s</td>", dto.getWdate()));
//---------------------------
//회원 수정 메뉴 추가(관리자 전용)
str.append(String.format("<td class=\"bDot\">"));
if ((Integer)session.getAttribute("grade") == 1) {
str.append(String.format("<a href=\"adminUpdateForm.mem?id=%s\">[회원수정]</a>", dto.getId()));
}
str.append(String.format("</td>"));
//---------------------------
str.append("</tr>");
}
%>
<!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 memberAdminRemove(url, uid) {
if (confirm("아이디 : "+uid+"\n\n선택한 회원의 정보를 삭제하시겠습니까?")) {
window.location.href=url+"?uid="+uid;
}
}
function memberList(obj) {
window.location.href="memberList.mem?grade="+obj.value;
}
//----------------------------
//등급별 출력시 선택한 등급 표시하기 위한 부분 추가
function radioCheck() {
var radios = document.getElementsByName("radioGroup");
radios[<%=grade%>].checked = true;
}
//----------------------------
</script>
</head>
<body onload="radioCheck()">
<div>
<%-- 메인메뉴를 import 구문으로 대체 --%>
<c:import url="mainMenu.jsp"></c:import>
<div>
<h3>[*회원명단]</h3>
<div>
<form>
<input type="radio" name="radioGroup"
checked="checked"
onclick="memberList(this)" value="0">전체
<input type="radio" name="radioGroup"
onclick="memberList(this)" value="1">관리자
<input type="radio" name="radioGroup"
onclick="memberList(this)" value="2">직원
<input type="radio" name="radioGroup"
onclick="memberList(this)" value="3">학생
<input type="radio" name="radioGroup"
onclick="memberList(this)" value="4">회원가입
</form>
<br>
</div>
<table cellpadding="5" class="style01 borderTop">
<tr>
<td class="tName" width="100">아이디</td>
<td class="tName">이름</td>
<td class="tName" width="160">전화</td>
<td class="tName" width="160">이메일</td>
<td class="tName" width="80">등급</td>
<td class="tName" width="120">가입일</td>
<td class="tName" width="80"></td>
</tr>
<!-- <tr>
<td class="bDot">admin</td>
<td class="bDot">관리자</td>
<td class="bDot"></td>
<td class="bDot"></td>
<td class="bDot">관리자</td>
<td class="bDot">2012-03-15</td>
<td class="bDot" style="font-size:9pt;"><a href="">[등급변경]</a><br><a href="">[회원삭제]</a></td>
</tr> -->
<%=str%>
</table>
</div>
</div>
</body>
</html>
--------------------------------------------------
//adminUpdateForm.jsp -> 회원 수정 페이지 (관리자 전용)
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@ 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();
int gradeIndex = dto.getGrade();
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 adminUpdateFormSubmit() {
var adminUpdateForm = document.getElementById("adminUpdateForm");
adminUpdateForm.submit();
}
function radioCheck() {
var radios = document.getElementsByName("grade");
radios[<%=gradeIndex-1%>].checked = true;
}
</script>
</head>
<body onload="radioCheck()">
<div>
<%-- 메인메뉴를 import 구문으로 대체 --%>
<c:import url="mainMenu.jsp"></c:import>
<div>
<h3>[*회원명단_회원수정]</h3>
<form action="adminUpdate.mem" method="post" id="adminUpdateForm">
<input type="hidden" name="id" value="<%=id%>">
<table cellpadding="5" class="style01 borderTop borderBottom">
<tr>
<td class="tName" width="250px">아이디</td>
<td class="bTitle"><%=id%></td>
</tr>
<tr>
<td class="tName" width="250px">이름<span style="font-size:9pt;">(20자 이내)</span></td>
<td class="bTitle"><input type="text" id="name" name="name" value="<%=name%>"></td>
</tr>
<tr>
<td class="tName" width="250px">이메일<span style="font-size:9pt;">(100자 이내)</span></td>
<td class="bTitle"><input type="text" id="email" name="email" style="width:300px" value="<%=email%>"></td>
</tr>
<tr>
<td class="tName" width="250px">전화<span style="font-size:9pt;">(30자 이내)</span></td>
<td class="bTitle"><input type="text" id="tel" name="tel" style="width:300px" value="<%=tel%>"></td>
</tr>
<tr>
<td class="tName" width="250px">등급(<%=grade%>)</td>
<td class="bTitle">
<input type="radio" name="grade" value="1">관리자
<input type="radio" name="grade" value="2">직원
<input type="radio" name="grade" value="3">학생
<input type="radio" name="grade" value="4">회원가입
</td>
</tr>
</table>
<br><br>
<a href="javascript:adminUpdateFormSubmit()">[회원수정]</a>
<a href="memberList.mem">[회원명단]</a>
</form>
</div>
</div>
</body>
</html>
--------------------------------------------------
//memberPWModifyForm.jsp -> 패스워드 수정 페이지(사용자)
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%
String error = "false";
Object result = request.getAttribute("error");
if (result != null) {
error = (String)result;
}
%>
<!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() {
if (<%=error%>) {
alert("기존 패스워드가 틀렸습니다.");
}
}
</script>
</head>
<body onload="msg()">
<div>
<%-- 메인메뉴를 import 구문으로 대체 --%>
<c:import url="mainMenu.jsp"></c:import>
<div>
<h3>[회원정보_패스워드변경]</h3>
<form action="memberPWModify.mem" method="post" id="memberPwForm">
<table cellpadding="5" class="style01 borderTop borderBottom">
<tr>
<td class="tName" width="200px">*기존 패스워드<span style="font-size:9pt;">(20자 이내)</span></td>
<td class="bTitle"><input type="password" id="pw" name="pw"><span id="pwMsg" style="color:red; display:none;">1~20자 이내 패스워드 입력해야 합니다.</span></td>
</tr>
<tr>
<td class="tName" width="200px">*새로운 패스워드<span style="font-size:9pt;">(20자 이내)</span></td>
<td class="bTitle"><input type="password" id="newpw" name="newpw"><span id="newpwMsg" style="color:red; display:none;">1~20자 이내 패스워드 입력해야 합니다.</span></td>
</tr>
</table>
<br><br>
<a href="javascript:memberPwFormSubmit()">[패스워드변경]</a>
<a href="memberInfo.mem">[회원정보]</a>
</form>
</div>
</div>
</body>
</html>
--------------------------------------------------
//memberModifyForm.jsp -> 회원 수정 페이지 (사용자)
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@ 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 error = "false";
Object result = request.getAttribute("error");
if (result != null) {
error = (String)result;
}
%>
<!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() {
if (<%=error%>) {
alert("기존 패스워드가 틀렸습니다.");
}
}
</script>
</head>
<body onload="msg()">
<div>
<%-- 메인메뉴를 import 구문으로 대체 --%>
<c:import url="mainMenu.jsp"></c:import>
<div>
<h3>[회원정보_회원정보수정]</h3>
<form action="memberModify.mem" method="post" id="memberModifyForm">
<table cellpadding="5" class="style01 borderTop borderBottom">
<tr>
<td class="tName" width="200px">아이디</td>
<td class="bTitle"><%=id%></td>
</tr>
<tr>
<td class="tName" width="200px">*패스워드<span style="font-size:9pt;">(기존 패스워드 재입력)</span></td>
<td class="bTitle"><input type="password" id="pw" name="pw"><span id="pwMsg" style="color:red; font-size:10pt; display:none; ">1~20자 이내 패스워드를 입력해야 합니다.</span></td>
</tr>
<tr>
<td class="tName" width="200px">*이름<span style="font-size:9pt;">(20자 이내)</span></td>
<td class="bTitle"><input type="text" id="name" name="name" value="<%=name%>"><span id="nameMsg" style="color:red; font-size:10pt; display:none; ">1~20자 이내 이름을 입력해야 합니다.</span></td>
</tr>
<tr>
<td class="tName" width="200px">*이메일<span style="font-size:9pt;">(100자 이내)</span></td>
<td class="bTitle"><input type="text" id="email" name="email" style="width:300px" value="<%=email%>"><span id="emailMsg" style="color:red; font-size:10pt; display:none; ">1~100자 이내 이메일을 입력해야 합니다.</span></td>
</tr>
<tr>
<td class="tName" width="200px">*전화<span style="font-size:9pt;">(30자 이내)</span></td>
<td class="bTitle"><input type="text" id="tel" name="tel" style="width:300px" value="<%=tel%>"><span id="telMsg" style="color:red; font-size:10pt; display:none; ">1~30자 이내 전화를 입력해야 합니다.</span></td>
</tr>
</table>
<br>
<a href="javascript:memberModifyFormSubmit()">[확인]</a>
<a href="memberInfo.mem">[회원정보]</a>
</form>
</div>
</div>
</body>
</html>
--------------------------------------------------
//요청주소
http://localhost:8090/ConsultationServlet_20121207/consultList.con
--------------------------------------------------
상담 게시판 구현 완료.