JSTL LENGTH 적용

자료 2013. 1. 17. 15:46

// Action이나 서블릿에서 리스트를 저장한 경우

List list = new ArrayList();
...
request.setAttribute("list", list);

// JSTL 태그 라이브러리 선언

<%@ taglib uri="http://java.sun.com/jsp/jstl/functions"  prefix="fn"%>

// JSTL에서 리스트내 엘리먼트의 개수를 확인한다.

${fn:length(list)}


WRITTEN BY
빨강꼬마

,

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

Spring MVC Annotation 기반 파일 업로드, 다운로드 



1. 아래 jar 파일 구성

commons-dbcp-1.4.jar

commons-fileupload-1.2.1.jar

commons-io-1.3.2.jar

commons-logging-1.1.1.jar

commons-pool-1.5.4.jar

ibatis-2.3.4.726.jar

jstl.jar

log4j-1.2.15.jar

ojdbc14.jar

spring.jar

spring-webmvc.jar

standard.jar



2. 기존의 SpringMVC 환경 설정 파일 복사


3. 아래 프로그램 작성


//FileSend.jsp

<%@ page language="java" contentType="text/html; charset=EUC-KR"

    pageEncoding="EUC-KR"%>

<!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>Insert title here</title>

</head>

<body>

<div>


<h1>파일 업로드 테스트(SpringMVC Annotation)</h1>

<form action="upload.file" method="post"

enctype="multipart/form-data">

<input type="hidden" name="mode" value="uploadOk">

파일첨부:<input type="file" name="upload"><br>

파일설명:<input type="text" name="content"><br>

<input type="submit" value="전송">

</form>

</div>

</body>

</html>




//FileReceive.jsp

<%@ page language="java" contentType="text/html; charset=EUC-KR"

    pageEncoding="EUC-KR"%>

<!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>Insert title here</title>

</head>

<body>

<div>

<h1>파일 다운로드 테스트(SpringMVC Annotation)</h1>

파일첨부:<a href="download.file?saveFileName=${saveFileName}&originalFileName=${originalFileName}">${originalFileName}</a><br>

파일설명:${content}<br>

파일종류:${contentType}<br>

</div>

</body>

</html>




//FileCommand.java

package com.test;


import org.springframework.web.multipart.MultipartFile;


public class FileCommand {

private String mode;

private String content, saveFileName, originalFileName;

private long fileSize;

private MultipartFile upload;

public String getMode() {

return mode;

}

public void setMode(String mode) {

this.mode = mode;

}

public String getContent() {

return content;

}

public void setContent(String content) {

this.content = content;

}

public String getSaveFileName() {

return saveFileName;

}

public void setSaveFileName(String saveFileName) {

this.saveFileName = saveFileName;

}

public String getOriginalFileName() {

return originalFileName;

}

public void setOriginalFileName(String originalFileName) {

this.originalFileName = originalFileName;

}

public long getFileSize() {

return fileSize;

}

public void setFileSize(long fileSize) {

this.fileSize = fileSize;

}

public MultipartFile getUpload() {

return upload;

}

public void setUpload(MultipartFile upload) {

this.upload = upload;

}


}






//FileController.java

package com.test;


import java.io.InputStream;


import javax.annotation.Resource;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;


import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;


import com.spring.common.FileManager;



@Controller("file.fileController")

public class FileController {


@Resource(name="fileManager")

private FileManager fileManager;

@RequestMapping(value="/upload.file", method={RequestMethod.GET, RequestMethod.POST})

public String upload(FileCommand command, HttpServletResponse response, HttpServletRequest request) 

throws Exception {

if (command == null 

|| command.getMode() == null

|| command.getMode().equals("")) {

return "/FileSend.jsp";

}

FileCommand dto = command;

request.setAttribute("content", "업로드된 파일이 없습니다.");

if (!dto.getUpload().isEmpty()) {


HttpSession session = request.getSession();

String root = session.getServletContext().getRealPath("/");

String path = root + "pds\\saveFile";

System.out.println("path:"+path);

dto.setFileSize(dto.getUpload().getSize());

dto.setOriginalFileName(dto.getUpload().getOriginalFilename());

InputStream is = dto.getUpload().getInputStream();

String newFileName = fileManager.doFileUpload(is

, dto.getOriginalFileName()

, path);

dto.setSaveFileName(newFileName);

request.setAttribute("saveFileName", dto.getSaveFileName());

request.setAttribute("originalFileName", dto.getOriginalFileName());

request.setAttribute("content", dto.getContent());


request.setAttribute("fileSize", dto.getFileSize());

request.setAttribute("contentType",dto.getUpload().getContentType());

//데이터베이스에 업로드된 파일 정보 저장 프로세스 추가

}

return "/FileReceive.jsp";

}


@RequestMapping(value="/download.file", method={RequestMethod.GET, RequestMethod.POST})

public String download(FileCommand command, HttpServletResponse response, HttpServletRequest request) {

HttpSession session = request.getSession();

String root = session.getServletContext().getRealPath("/");

String path = root + "pds\\saveFile";

FileCommand dto = command;

boolean flag = fileManager.doFileDownload(dto.getSaveFileName()

, dto.getOriginalFileName()

, path

, response);

if (flag) {

//다운로드 횟수 증가 프로세스 추가

}

return "";

}


}




//브라우저에서 아래 주소로 연결

http://localhost:8090/SpringMVC_FildUpload/upload.file

-> 처음에는 FileSend.jsp 페이지가 나온다.

-> 업로드하고자 하는 파일을 선택하고 전송 버튼을 클릭한다.

-> 업로드가 되면 FileReceive.jsp 페이지로 변하게 되고, 업로드된 파일의 정보가 출력된다.

-> 업로드된 파일을 클릭하면 다운로드 가능하다.

-> 웹서버에서 업로드된 파일은 아래 위치에 보관된다.

이클립스워크스페이스\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\SpringMVC_FildUpload\pds\saveFile




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









'자료' 카테고리의 다른 글

JSTL LENGTH 적용  (0) 2013.01.17
SpringMVC_Annotation_iBatis 연동 환경 설정(JAR 파일 포함)  (0) 2012.12.28
Spring, iBatis  (0) 2012.12.28
Struts2 , iBatis 기본 환경설정  (0) 2012.12.28
상담게시판 완료 소스  (0) 2012.12.18

WRITTEN BY
빨강꼬마

,


Spring MVC.hwp



SpringMVC_Annotation_iBatis 연동 환경 설정(JAR 파일 포함).rar  !!!! 트랜잭션 테스팅 완료 파일(iBatis 트랜잭션 처리 되는 환경 설정)


아이바티스 프레임 워크.hwp


'자료' 카테고리의 다른 글

JSTL LENGTH 적용  (0) 2013.01.17
SpringMVC에서 파일업로드, 다운로드  (0) 2013.01.16
Spring, iBatis  (0) 2012.12.28
Struts2 , iBatis 기본 환경설정  (0) 2012.12.28
상담게시판 완료 소스  (0) 2012.12.18

WRITTEN BY
빨강꼬마

,

Spring, iBatis

자료 2012. 12. 28. 16:02


Spring MVC.hwp


SpringMVC_iBatis 환경 설정(JAR 파일 포함).rar


아이바티스 프레임 워크.hwp



- 압축파일을 해제한 후 이클립스 내에서 다이나믹 웹 프로젝트 생성하고, src 폴더와 webcontent 폴더를 덮어씌우면

기본적인 Spring과 iBatis 설정은 끝


web.xml 에서
->    
<filter>

        <filter-name>CharacterEncoding</filter-name>

        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>

        <init-param>

            <param-name>encoding</param-name>

            <param-value>utf-8</param-value>

        </init-param>

    </filter>

  -> utf-8 을 euc-kr 



->
    <servlet-mapping>

        <servlet-name>dispatcher</servlet-name>

        <url-pattern>*.action</url-pattern>

    </servlet-mapping>

-> 확장자 사용자 정의 확장자로 원하는 걸로 변경해서 사용.



WRITTEN BY
빨강꼬마

,


iBATIS 2.x와 스트럿츠_2 환경 설정(JAR 파일 포함).rar


iBATIS 2.x와 스트럿츠_2 환경 설정.txt


스트럿츠 2.hwp


아이바티스 프레임 워크.hwp



* 실행순서

- struts.properties에서 인코딩 및 url 확장자 설정을 해둠.

- 사용자가 브라우저에 send01.action 입력

- struts.xml 에서 환경설정에 의해 myStruts.xml 를 실행

- myStruts.xml에서 주소창에 입력된 send01.action과 매칭되는 action 엘리먼트를 찾은다음

- result 엘리먼트의 목적 주소인 send01.jsp로 이동함.

- send01.jsp에서 회원가입버튼을 눌렀을때 폼의 action 속성의 목적 주소로 이동

- myStruts.xml에서 주소창에 입력된 send01.jsp의 폼 액션 주소인 receive01.action과 매칭되는 action 엘리먼트를 찾은다음

- class 속성의 액션처리용 java 파일(ActionSupport 상속) 내 오버라이딩한 execute() 를 실행한 후 리턴값이 SUCCESS 일 경우

- result 엘리먼트의 목적 주소인 receive01.jsp로 이동함.

- receive01.jsp 실행(EL표현 사용)


struts.properties -> 사용자 주소 입력 -> struts.xml -> myStruts.xml -> send01.jsp -> myStruts.xml -> TestAction.java -> receive01.jsp


'자료' 카테고리의 다른 글

JSTL LENGTH 적용  (0) 2013.01.17
SpringMVC에서 파일업로드, 다운로드  (0) 2013.01.16
SpringMVC_Annotation_iBatis 연동 환경 설정(JAR 파일 포함)  (0) 2012.12.28
Spring, iBatis  (0) 2012.12.28
상담게시판 완료 소스  (0) 2012.12.18

WRITTEN BY
빨강꼬마

,

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&&currentPageSetup>0){

sb.append("<a href=\"" +list_url + "pageNum=1\">[1]</a>&nbsp;");

sb.append("[<a href=\"" + list_url + "pageNum=" + n + "\">prev</a>]&nbsp;");

}

//바로가기 페이지

page=currentPageSetup+1;

while(page<=total_page&&page<=(currentPageSetup+numPerBlock)){

if(page==current_page){

sb.append("[<font color=\"Fuchsia\">"+page+"</font>]&nbsp;");

}else{

sb.append("<a href=\""+list_url+"pageNum="+page+"\">["+page+"]</a>&nbsp;");

}

page++;

}

//[Next], 마지막 페이지

n=current_page+numPerBlock;

if(total_page-currentPageSetup > numPerBlock){

sb.append("[<a href=\""+list_url+"pageNum="+n+"\">Next</a>]&nbsp;");

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

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

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

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

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

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

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

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


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

//답변글 출력 준비 추가

ConsultationDTO rdto 

= (ConsultationDTO)request.getAttribute("rdto");

String rname = "";

String rtitle = "";

String rwdate = "";

String rcontent = "";

if (rdto != null) {

rname = rdto.getName();

rtitle = rdto.getTitle();

rwdate = rdto.getWdate();

rcontent = rdto.getContent();

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

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

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

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

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

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

}


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

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

//댓글 목록 출력 준비 추가

@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();

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

//수정 오류 처리 필요

//수정 폼 화면에서 제목 부분에 큰 따옴표(") 포함시

//제목 일부가 나타나지 않는 문제 발생

//-> 큰따옴표(")를 특수문자(&quot;)로 처리함.

title = title.replaceAll("\"", "&quot;");

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


%>    

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

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

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

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

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

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

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

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


%>    

<!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


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

상담 게시판 구현 완료.




'자료' 카테고리의 다른 글

JSTL LENGTH 적용  (0) 2013.01.17
SpringMVC에서 파일업로드, 다운로드  (0) 2013.01.16
SpringMVC_Annotation_iBatis 연동 환경 설정(JAR 파일 포함)  (0) 2012.12.28
Spring, iBatis  (0) 2012.12.28
Struts2 , iBatis 기본 환경설정  (0) 2012.12.28

WRITTEN BY
빨강꼬마

,