proxy모듈을 통한 Apache, Tomcat 연동 - Windows
개발/Server2008. 12. 26. 23:13
Windows에서 proxy 모듈을 통한 Apache와 Tomcat 연동에 대해서 적어본다.
기본적으로 Apache와 Tomcat 이 설치가 되어 있다는 과정하에 설명하도록 하겠다.
Apache 버전은 2.2, Tomcat버전은 5.5 설치파일이 아닌 압축 버전으로 설치를 하였다.
톰캣부분은 따로 설정한 부분이 없다.
다만 아파치만 설정을 하면 되는데 httpd.conf 파일을 열어서 수정을 해준다.
httpd.conf
109 LoadModule proxy_module modules/mod_proxy.so
110 LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
.
.
116 LoadModule rewrite_module modules/mod_rewrite.so
110 LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
.
.
116 LoadModule rewrite_module modules/mod_rewrite.so
해당 되는 라인에 #주석으로 처리되어 있는 부분의 주석을 없애 준다.
httpd.conf
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} .(htm|html|xhtml|jpg|gif|png|swf|js)
RewriteRule (.*) - [L]
RewriteRule (.*) ajp://localhost:8009$1 [P]
</IfModule>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} .(htm|html|xhtml|jpg|gif|png|swf|js)
RewriteRule (.*) - [L]
RewriteRule (.*) ajp://localhost:8009$1 [P]
</IfModule>
httpd.conf 제일 하단부분에 다음과 같은 부분을 추가해준다.
정적인 파일은 아파치 해당 폴더에 D:\WAS\Apache2.2\htdocs (각자 설치에 따라 다름)
동적인 파일은 톰캣 ROOT 폴더에 D:\WAS\tomcat-5.5\webapps\ROOT (각자 설치에 따라 다름)
옮긴 후에 테스트를 해본다.
http://localhost:80/index.html
http://localhost:8080/index.jsp
참고 사이트 : Proxy AJP + mod_rewrite를 이용하여 Apache 2.2 + Tomcat 완벽 연동하기
정적인 파일은 아파치 해당 폴더에 D:\WAS\Apache2.2\htdocs (각자 설치에 따라 다름)
동적인 파일은 톰캣 ROOT 폴더에 D:\WAS\tomcat-5.5\webapps\ROOT (각자 설치에 따라 다름)
옮긴 후에 테스트를 해본다.
http://localhost:80/index.html
http://localhost:8080/index.jsp
참고 사이트 : Proxy AJP + mod_rewrite를 이용하여 Apache 2.2 + Tomcat 완벽 연동하기
'개발 > Server' 카테고리의 다른 글
Apache 2.2 + Tomcat 6 + mod_jk를 이용한 연동 ② - windows (0) | 2009.11.11 |
---|---|
[tomcat] 웹사이트 특정 IP만 접속 가능 하게하기 (0) | 2009.02.17 |
[tomcat] DataSource 설정 (0) | 2009.02.17 |
mod_jk를 이용해서 Apache, Tomcat 연동 - Windows (3) | 2008.12.27 |
Tomcat Context 추가 (0) | 2008.12.26 |
[eclipse] 자주쓰는 이클립스 단축키
개발/IDE2008. 12. 24. 23:38
Edit
Content Assist : CTRL + SPACE
- 코드 작성을 도와준다. 자동완성을 지원함
Navigate
Open Type Hierarchy : F4
- 현재 클래스의 상속관계를 보여주는 창이 열린다.
Quick Hierarchy : CTRL + T
- 간단하게 현재 클래스의 상속 관계를 보여준다.
Quick Outline : CTRL + O
- 현재 클래스의 메서드, 맴버변수등을 보여준다.
Open Resource : Ctrl+Shift+R
- 찾고자 하는 파일을 검색하여 보여준다.
Refactor
Refactor Quick Menu : ALT + SHIFT + T
- 리펙토링 메뉴 바로가기
Rename : ALT + SHIFT + R
- 변수명, 클래스명 등 이름 변경
Source
Add Block Comment : CTRL + SHIFT + /
- 선택된 영역에 대해 주석 처리
Remove Block Comment : CTRL + SHIFT + \
- 주석처리 된 영역 주석 해제
Add Javadoc Comment : ALT + SHIFT + J
- Javadoc타입의 주석 붙임
Format : CTRL + SHIFT + F
- 탬플릿에 지정된 대로 코드 포맷 변경
Indent Line : CTRL + I
- 제대로 된 위치의 들여쓰기
Organize Imports : CTRL + SHIFT + O
- 필요없는 import 제거
Source Quick Menu : ALT + SHIFT + S
- 빠른 소스메뉴
Toggle Comment : CTRL + / or CTRL + SHIFT + C
- 한줄에 대한 주석 처리
Text Editing
Delete Line : CTRL + D
- 줄 삭제
Duplicate Lines : CTRL + ALT + UP or DOWN
- 줄 복사
Insert Line Above Current Line : CTRL + SHIFT + ENTER
- 현재 줄에 새로 추가
Insert Line Below Current Line : SHIFT + ENTER
- 다음 줄에 새로 추가
Next Word : CTRL + RIGHT
- 다음 문자로 이동
Previous Word : CTRL + LEFT
- 이전 문자로 이동
Window
Maximize Active View or Editor : CTRL + M
- 선택된 뷰 최대화
Switch to Editor : CTRL + SHIFT + E
- 열려있는 에디터간 이동
Content Assist : CTRL + SPACE
- 코드 작성을 도와준다. 자동완성을 지원함
Navigate
Open Type Hierarchy : F4
- 현재 클래스의 상속관계를 보여주는 창이 열린다.
Quick Hierarchy : CTRL + T
- 간단하게 현재 클래스의 상속 관계를 보여준다.
Quick Outline : CTRL + O
- 현재 클래스의 메서드, 맴버변수등을 보여준다.
Open Resource : Ctrl+Shift+R
- 찾고자 하는 파일을 검색하여 보여준다.
Refactor
Refactor Quick Menu : ALT + SHIFT + T
- 리펙토링 메뉴 바로가기
Rename : ALT + SHIFT + R
- 변수명, 클래스명 등 이름 변경
Source
Add Block Comment : CTRL + SHIFT + /
- 선택된 영역에 대해 주석 처리
Remove Block Comment : CTRL + SHIFT + \
- 주석처리 된 영역 주석 해제
Add Javadoc Comment : ALT + SHIFT + J
- Javadoc타입의 주석 붙임
Format : CTRL + SHIFT + F
- 탬플릿에 지정된 대로 코드 포맷 변경
Indent Line : CTRL + I
- 제대로 된 위치의 들여쓰기
Organize Imports : CTRL + SHIFT + O
- 필요없는 import 제거
Source Quick Menu : ALT + SHIFT + S
- 빠른 소스메뉴
Toggle Comment : CTRL + / or CTRL + SHIFT + C
- 한줄에 대한 주석 처리
Text Editing
Delete Line : CTRL + D
- 줄 삭제
Duplicate Lines : CTRL + ALT + UP or DOWN
- 줄 복사
Insert Line Above Current Line : CTRL + SHIFT + ENTER
- 현재 줄에 새로 추가
Insert Line Below Current Line : SHIFT + ENTER
- 다음 줄에 새로 추가
Next Word : CTRL + RIGHT
- 다음 문자로 이동
Previous Word : CTRL + LEFT
- 이전 문자로 이동
Window
Maximize Active View or Editor : CTRL + M
- 선택된 뷰 최대화
Switch to Editor : CTRL + SHIFT + E
- 열려있는 에디터간 이동
'개발 > IDE' 카테고리의 다른 글
eclipse copy & Paste 느린 현상 (0) | 2015.04.02 |
---|---|
eclipse.ini 설정 (0) | 2014.04.22 |
eclipse workspace 바로가기 링크 만들기 (0) | 2010.11.17 |
Eclipse 유용한 PLUG-IN (0) | 2009.10.24 |
Eclipse plug-in (0) | 2008.12.06 |
Eclipse plug-in
개발/IDE2008. 12. 6. 13:15
1. Subversion : http://subclipse.tigris.org/update_1.2.x
2. Maven2 : http://m2eclipse.codehaus.org/update-dev/
3. Log4E : http://log4e.jayefem.de/update
4. Spring IDE : http://springide.org/updatesite/
5. DBViewer(DB쿼리툴) : http://www.ne.jp/asahi/zigen/home/plugin/dbviewer/
6. EclEmma(코드 커버리지 툴) : http://update.eclemma.org/
7. Implementor : http://eclipse-tools.sourceforge.net/updates/
#tip
weblogig plug-in
http://download.oracle.com/otn_software/oepe/ganymede
http://download.oracle.com/otn_software/oepe/galileo
2. Maven2 : http://m2eclipse.codehaus.org/update-dev/
3. Log4E : http://log4e.jayefem.de/update
4. Spring IDE : http://springide.org/updatesite/
5. DBViewer(DB쿼리툴) : http://www.ne.jp/asahi/zigen/home/plugin/dbviewer/
6. EclEmma(코드 커버리지 툴) : http://update.eclemma.org/
7. Implementor : http://eclipse-tools.sourceforge.net/updates/
#tip
weblogig plug-in
http://download.oracle.com/otn_software/oepe/ganymede
http://download.oracle.com/otn_software/oepe/galileo
'개발 > IDE' 카테고리의 다른 글
eclipse copy & Paste 느린 현상 (0) | 2015.04.02 |
---|---|
eclipse.ini 설정 (0) | 2014.04.22 |
eclipse workspace 바로가기 링크 만들기 (0) | 2010.11.17 |
Eclipse 유용한 PLUG-IN (0) | 2009.10.24 |
[eclipse] 자주쓰는 이클립스 단축키 (0) | 2008.12.24 |
[tip] 영문 alert 메세지
개발/Javascript2008. 9. 25. 10:07
비밀번호가 틀렸습니다. 다시입력해주세요. => Invalid password. Please try again.
아이디가 틀렸습니다. 다시입력해주세요. => Invalid ID. Please try again.
제목을 입력하세요. Enter your subject(title).
제목을 입력하세요. Enter your contents(message).
이름을 입력해주세요. => Enter your name.
아이디를 입력하세요. Enter your ID.
패스워드를 입력하세요. Enter your password.
아이디가 존재하지 않습니다. 관리자에게 문의해 주세요. ID does not exist. Please contact the administrator.
접근 권한이 없습니다. IT실 담당자에게 문의하세요. Not permitted to log in/connect. Please contact the IT administrator.
접근권한이 없습니다. 관리자에게 문의해 주세요. Not permitted to log in/connect. Please contact the administrator.
파일을 삭제하시겠습니까? Delete? 파일이 정상적으로 삭제 되었습니다. Deleted successfully. (Files deleted successfully.)
등록 되었습니다. Registered/Saved successfully.
수정 되었습니다. Updated successfully.
삭제 되었습니다. Deleted successfully.
삭제할 데이터가 없습니다. Nothing to delete.
등록된 게시물이 없습니다. (게시물 = comment ?) No comment to delete.
검색할 성명을 입력하세요. Enter name to search for.
수신처를 지정해 주새요! Select contact method.
부서 이하를 선택해 주세요. Select department from the list.
검색된 사용자가 없습니다. Username does not exist.
메세지를 받을 사람을 입력해 주십시오. Enter recipient's name.
아이디가 틀렸습니다. 다시입력해주세요. => Invalid ID. Please try again.
제목을 입력하세요. Enter your subject(title).
제목을 입력하세요. Enter your contents(message).
이름을 입력해주세요. => Enter your name.
아이디를 입력하세요. Enter your ID.
패스워드를 입력하세요. Enter your password.
아이디가 존재하지 않습니다. 관리자에게 문의해 주세요. ID does not exist. Please contact the administrator.
접근 권한이 없습니다. IT실 담당자에게 문의하세요. Not permitted to log in/connect. Please contact the IT administrator.
접근권한이 없습니다. 관리자에게 문의해 주세요. Not permitted to log in/connect. Please contact the administrator.
파일을 삭제하시겠습니까? Delete? 파일이 정상적으로 삭제 되었습니다. Deleted successfully. (Files deleted successfully.)
등록 되었습니다. Registered/Saved successfully.
수정 되었습니다. Updated successfully.
삭제 되었습니다. Deleted successfully.
삭제할 데이터가 없습니다. Nothing to delete.
등록된 게시물이 없습니다. (게시물 = comment ?) No comment to delete.
검색할 성명을 입력하세요. Enter name to search for.
수신처를 지정해 주새요! Select contact method.
부서 이하를 선택해 주세요. Select department from the list.
검색된 사용자가 없습니다. Username does not exist.
메세지를 받을 사람을 입력해 주십시오. Enter recipient's name.
'개발 > Javascript' 카테고리의 다른 글
[HTML] 제어 문자 (0) | 2009.01.16 |
---|---|
[HTML 팁] HTML 소스 정렬 사이트 (0) | 2008.12.27 |
javascript 디버거 툴 (0) | 2008.08.18 |
클립보드 복사 (0) | 2008.08.18 |
[javascript] dday 구하는 스크립트 (0) | 2008.02.04 |
javascript 디버거 툴
개발/Javascript2008. 8. 18. 02:28
'개발 > Javascript' 카테고리의 다른 글
[HTML 팁] HTML 소스 정렬 사이트 (0) | 2008.12.27 |
---|---|
[tip] 영문 alert 메세지 (0) | 2008.09.25 |
클립보드 복사 (0) | 2008.08.18 |
[javascript] dday 구하는 스크립트 (0) | 2008.02.04 |
[javascript] 쿠키 설정, 추출, 삭제 예제 (0) | 2008.01.21 |
클립보드 복사
개발/Javascript2008. 8. 18. 02:04
익스플로어에서만 가능한 클립보드 복사하기다.
<script language="javascript">
function setClipBoard(content){
content += content + " [diem 블로그]";
window.clipboardData.setData('Text', content);
alert('내용이 복사되었습니다.');
}
</script>
<a href="javascript:setClipBoard('http://hmjkor.tistory.com/')">복사하기</a>
<script language="javascript">
function setClipBoard(content){
content += content + " [diem 블로그]";
window.clipboardData.setData('Text', content);
alert('내용이 복사되었습니다.');
}
</script>
<a href="javascript:setClipBoard('http://hmjkor.tistory.com/')">복사하기</a>
'개발 > Javascript' 카테고리의 다른 글
[HTML 팁] HTML 소스 정렬 사이트 (0) | 2008.12.27 |
---|---|
[tip] 영문 alert 메세지 (0) | 2008.09.25 |
javascript 디버거 툴 (0) | 2008.08.18 |
[javascript] dday 구하는 스크립트 (0) | 2008.02.04 |
[javascript] 쿠키 설정, 추출, 삭제 예제 (0) | 2008.01.21 |
[ORACLE] 테이블 관련 정보 쿼리
개발/Database2008. 7. 26. 14:03
테이블 관련 정보를 알아볼수 있는 쿼리를 정리했다.
나름 유용하게 사용할수 있을꺼 같다.
나름 유용하게 사용할수 있을꺼 같다.
# 해당 테이블스페이스에 관련된 모든 테이블을 가져온다.
SELECT * FROM TABS
# 해당 테이블스페이스에 관련된 모든 시퀀스를 가져온다.
SELECT * FROM SEQ
# 해당 테이블스페이스에 관련된 모든 뷰의 정보를 가져온다.
SELECT * FROM USER_VIEWS
# 해당 테이블에 컬럼리스트를 가져온다.
SELECT *
FROM USER_TAB_COLUMNS
WHERE TABLE_NAME = 테이블명
ORDER BY COLUMN_ID ASC
# 해당 테이블스페이스에 관련된 모든 트리거를 가져온단.
SELECT * FROM USER_TRIGGERS
# 해당 테이블에 관련된 제약 정보들을 가져온다.
SELECT C.TABLE_NAME A1,
SUBSTR(A.COLUMN_NAME,1,15) A2,
DECODE(B.CONSTRAINT_TYPE, 'P','PRIMARY KEY',
'U','UNIQUE KEY',
'C','CHECK OR NOT NULL',
'R','FOREIGN KEY') A3,
A.CONSTRAINT_NAME A4
FROM USER_CONS_COLUMNS A, USER_CONSTRAINTS B, USER_INDEXES C
WHERE A.TABLE_NAME = B.TABLE_NAME
AND A.TABLE_NAME = C.TABLE_NAME
AND A.CONSTRAINT_NAME = B.CONSTRAINT_NAME
AND A.TABLE_NAME =UPPER('테이블명')
ORDER BY 1,2;
SELECT * FROM TABS
# 해당 테이블스페이스에 관련된 모든 시퀀스를 가져온다.
SELECT * FROM SEQ
# 해당 테이블스페이스에 관련된 모든 뷰의 정보를 가져온다.
SELECT * FROM USER_VIEWS
# 해당 테이블에 컬럼리스트를 가져온다.
SELECT *
FROM USER_TAB_COLUMNS
WHERE TABLE_NAME = 테이블명
ORDER BY COLUMN_ID ASC
# 해당 테이블스페이스에 관련된 모든 트리거를 가져온단.
SELECT * FROM USER_TRIGGERS
# 해당 테이블에 관련된 제약 정보들을 가져온다.
SELECT C.TABLE_NAME A1,
SUBSTR(A.COLUMN_NAME,1,15) A2,
DECODE(B.CONSTRAINT_TYPE, 'P','PRIMARY KEY',
'U','UNIQUE KEY',
'C','CHECK OR NOT NULL',
'R','FOREIGN KEY') A3,
A.CONSTRAINT_NAME A4
FROM USER_CONS_COLUMNS A, USER_CONSTRAINTS B, USER_INDEXES C
WHERE A.TABLE_NAME = B.TABLE_NAME
AND A.TABLE_NAME = C.TABLE_NAME
AND A.CONSTRAINT_NAME = B.CONSTRAINT_NAME
AND A.TABLE_NAME =UPPER('테이블명')
ORDER BY 1,2;
'개발 > Database' 카테고리의 다른 글
oracle 시작과 종료 (0) | 2009.05.07 |
---|---|
Toad 단축키 (0) | 2009.04.18 |
[oracle] decode 함수 (1) | 2009.01.16 |
[MS-SQL] SELECT INTO (0) | 2008.05.20 |
[oracle] 오라클 중복제거 하면서 전체 값 가져오기 (0) | 2008.03.27 |
[MD5] APS , JAVASCRIPT MD5 암호화 함수
개발/보안2008. 7. 25. 15:59
MD5 관련 함수
'개발 > 보안' 카테고리의 다른 글
[크롬]이 페이지가 인증되지 않은 소스에서 스크립트를 로드하려고 시도하고 있습니다 (0) | 2016.03.29 |
---|---|
XSS 공격 패턴 (0) | 2009.04.19 |
[MS-SQL] SELECT INTO
개발/Database2008. 5. 20. 17:45
3주 동안 고인물로 지내다가 다시 새로운 물을 가득 넣기로 마음 굳게 먹었다.
요즘 별다르게 배운게 없고 공부한게 없었는데 이게 다 모 사이트 운영때문이다.. 결국은 핑계다 ㅡ,.-^
운영업무를 하다보면 고객의 요청에 의해서 각종 데이터들을 산출해야 한다.
회원정보라던지 매출액등 월말, 분기별로 아주 바쁘게 데이터를 뽑아서 엑셀로 이쁘게 포장해서
고객에게 주면 참 좋아 하신다..^^;
그런데 이런 데이터들을 산출하다 보면 SELECT 된 값들을 다른 테이블에 그 데이터만을 담아서 사용하고 싶은 경우가 있다. 그 중에 또 다른 값을 가져오거나 그 값들로 인해서 또 다른 테이블과 조인을 한다던가 해야 하는 일 말이다. 이런 테이블을 만들지 않으면 쿼리도 늘어나고 속도도 느려지니 헷갈리고 속도도 느려진다.
그래서 이 때 사용할수 있는게 SELECT INTO 이다.
SELECT INTO는 현재 있는 테이블에 있는 내용 전체나 일부를 가져와서 새로운 테이블로 만들 때 사용한다.
기존에 있던 테이블에는 INSERT 시킬수가 없다. 기존 테이블에 INSERT를 시킬려면 SELECT INSERT를 사용하면 된다.
사용법
위에 사용법으로 테이블을 만들게 되면 영구적으로 테이블이 생기게 된다.
물론 DROP 명령으로 지워주면 되긴 하지만 잠시만 쓰고 지울 것이라면 굳이 영구 테이블을 만들지 않고 임시테이블을 만들어 사용하면 된다.
임시 테이블은 전역임시 테이블, 세션 임시 테이블 두개로 나뉜다.
사용법
이렇게 생성 된 테이블은 해당 데이터베이스에 생성되는 것이 아니라 tempdb에 만들어 지며 logout 할 때 자동으로 삭제가 된다.
실무에서는 많이 사용하는지는 모르지만 개인적으로는 정말 많이 사용한다.
참고::
오라클에서는 사용법이 다르다.
요즘 별다르게 배운게 없고 공부한게 없었는데 이게 다 모 사이트 운영때문이다.. 결국은 핑계다 ㅡ,.-^
운영업무를 하다보면 고객의 요청에 의해서 각종 데이터들을 산출해야 한다.
회원정보라던지 매출액등 월말, 분기별로 아주 바쁘게 데이터를 뽑아서 엑셀로 이쁘게 포장해서
고객에게 주면 참 좋아 하신다..^^;
그런데 이런 데이터들을 산출하다 보면 SELECT 된 값들을 다른 테이블에 그 데이터만을 담아서 사용하고 싶은 경우가 있다. 그 중에 또 다른 값을 가져오거나 그 값들로 인해서 또 다른 테이블과 조인을 한다던가 해야 하는 일 말이다. 이런 테이블을 만들지 않으면 쿼리도 늘어나고 속도도 느려지니 헷갈리고 속도도 느려진다.
그래서 이 때 사용할수 있는게 SELECT INTO 이다.
SELECT INTO는 현재 있는 테이블에 있는 내용 전체나 일부를 가져와서 새로운 테이블로 만들 때 사용한다.
기존에 있던 테이블에는 INSERT 시킬수가 없다. 기존 테이블에 INSERT를 시킬려면 SELECT INSERT를 사용하면 된다.
사용법
SELECT * FROM tableName
SELECT * INTO temp_tableName(새로만들 테이블) FROM tableName
SELECT * INTO temp_tableName(새로만들 테이블) FROM tableName
위에 사용법으로 테이블을 만들게 되면 영구적으로 테이블이 생기게 된다.
물론 DROP 명령으로 지워주면 되긴 하지만 잠시만 쓰고 지울 것이라면 굳이 영구 테이블을 만들지 않고 임시테이블을 만들어 사용하면 된다.
임시 테이블은 전역임시 테이블, 세션 임시 테이블 두개로 나뉜다.
만드는방법 | 사용할 수 있는 범위 | 삭제되는 시기 | |
일반 테이블 | CREATE TABLE | 다른 세션에서도 | DROP TABLE |
세션 임시 테이블 | #tablename | 해당 세션에서만 | 세션이 끊어질 때 |
전역 임시 테이블 | ##tablename | 다른 세션에서도 | 세션이 끊어질 때 |
tempdb의 일반 테이블 | CREATE TABLE | 다른 세션에서도 | SQL 서버가 시작 될 때 |
사용법
SELECT * INTO #tablename FROM table
SELECT * INTO ##tablename FROM table
SELECT * FROM #tablename
SELECT * FROM ##tablename
SELECT * INTO ##tablename FROM table
SELECT * FROM #tablename
SELECT * FROM ##tablename
이렇게 생성 된 테이블은 해당 데이터베이스에 생성되는 것이 아니라 tempdb에 만들어 지며 logout 할 때 자동으로 삭제가 된다.
실무에서는 많이 사용하는지는 모르지만 개인적으로는 정말 많이 사용한다.
참고::
오라클에서는 사용법이 다르다.
CREATE TABLE tableName_temp
AS SELECT * FROM tableName
AS SELECT * FROM tableName
'개발 > Database' 카테고리의 다른 글
oracle 시작과 종료 (0) | 2009.05.07 |
---|---|
Toad 단축키 (0) | 2009.04.18 |
[oracle] decode 함수 (1) | 2009.01.16 |
[ORACLE] 테이블 관련 정보 쿼리 (0) | 2008.07.26 |
[oracle] 오라클 중복제거 하면서 전체 값 가져오기 (0) | 2008.03.27 |
Cookie를 효율적으로 관리하고 사용하자
개발/Java2008. 4. 15. 11:41
쿠키는 웹 어플리케이션에서 클라이언트의 정보를 임시로 저장하기 위해 많이 사용된다. 또한, 클라이언트의 상태를 유지할 때 사용되는 세션을 구현하기 위해 쿠키를 사용하기도 한다. 쿠키를 사용함으로써 좀더 쉽고 간결한 방법으로 웹 어플리케이션을 구현할 수 있게 되는 경우가 많은데 이를 좀더 편하게 관리하기 위해서는 쿠기를 사용할 수 있는 보조 클래스를 만들어서 사용하게 되면 편리하다.
CookieBox.java
/*
* @(#)CookieBox.java
* Copyright (c) 2000~ NowOnPlay.com inc., All rights reserved.
* Total E-Business Group, http://www.nowonplay.com
*
* 최초작성일자 : April 15, 2008 (hmjkor@nowonplay.com)
* 수정이력 :
*/
package kevin.common.utils;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.Cookie;
import java.util.HashMap;
import java.util.Map;
import java.net.URLEncoder;
import java.net.URLDecoder;
import java.io.IOException;
/**
* 쿠기를 보다 관리하기 쉽도록 만든 클래스로서
* http://javacan.madvirus.net/에 있는 내용을 토대로 작성되었다.
* @author diem
*
*/
public class CookieBox {
/* 쿠기를 담기위한 맵 */
private Map cookieMap = new HashMap();
/**
* 생성자
* request로 받은 쿠키값을 Key, value 값으로 매핑한다.
* @param request
*/
public CookieBox(HttpServletRequest request) {
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (int i = 0 ; i < cookies.length ; i++) {
cookieMap.put(cookies[i].getName(), cookies[i]);
}
}
}
/**
* 쿠키를 저장한다.
* @param name 이름
* @param value 값
* @return
* @throws IOException
*/
public static Cookie createCookie(String name, String value)
throws IOException {
return new Cookie(name, URLEncoder.encode(value, "euc-kr"));
}
/**
* 쿠키를 저장한다.
* @param name 이름
* @param value 값
* @param path 경로
* @param maxAge 유효시간
* @return
* @throws IOException
*/
public static Cookie createCookie(
String name, String value, String path, int maxAge)
throws IOException {
Cookie cookie = new Cookie(name,
URLEncoder.encode(value, "euc-kr"));
cookie.setPath(path);
cookie.setMaxAge(maxAge);
return cookie;
}
/**
* 쿠키를 저장한다.
* @param name 이름
* @param value 값
* @param domain 도메인
* @param path 경로
* @param maxAge 유효시간
* @return
* @throws IOException
*/
public static Cookie createCookie(
String name, String value,
String domain, String path, int maxAge)
throws IOException {
Cookie cookie = new Cookie(name,
URLEncoder.encode(value, "euc-kr"));
cookie.setDomain(domain);
cookie.setPath(path);
cookie.setMaxAge(maxAge);
return cookie;
}
/**
* 해당되는 쿠키를 가져온다.
* @param name
* @return 쿠키값
*/
public Cookie getCookie(String name) {
return (Cookie)cookieMap.get(name);
}
/**
* 요청한 쿠키 이름의 값을 가져온다.
* 가져온 값이 없을 경우 null을 리턴한다.
* @param name 쿠키 이름
* @return
* @throws IOException
*/
public String getValue(String name) throws IOException {
Cookie cookie = (Cookie)cookieMap.get(name);
if (cookie == null) return null;
return URLDecoder.decode(cookie.getValue(), "euc-kr");
}
/**
* 요청한 쿠기값이 있는지의 여부를 가져온다.
* @param name 요청할 쿠키값
* @return
*/
public boolean exists(String name) {
return cookieMap.get(name) != null;
}
}
* @(#)CookieBox.java
* Copyright (c) 2000~ NowOnPlay.com inc., All rights reserved.
* Total E-Business Group, http://www.nowonplay.com
*
* 최초작성일자 : April 15, 2008 (hmjkor@nowonplay.com)
* 수정이력 :
*/
package kevin.common.utils;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.Cookie;
import java.util.HashMap;
import java.util.Map;
import java.net.URLEncoder;
import java.net.URLDecoder;
import java.io.IOException;
/**
* 쿠기를 보다 관리하기 쉽도록 만든 클래스로서
* http://javacan.madvirus.net/에 있는 내용을 토대로 작성되었다.
* @author diem
*
*/
public class CookieBox {
/* 쿠기를 담기위한 맵 */
private Map cookieMap = new HashMap();
/**
* 생성자
* request로 받은 쿠키값을 Key, value 값으로 매핑한다.
* @param request
*/
public CookieBox(HttpServletRequest request) {
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (int i = 0 ; i < cookies.length ; i++) {
cookieMap.put(cookies[i].getName(), cookies[i]);
}
}
}
/**
* 쿠키를 저장한다.
* @param name 이름
* @param value 값
* @return
* @throws IOException
*/
public static Cookie createCookie(String name, String value)
throws IOException {
return new Cookie(name, URLEncoder.encode(value, "euc-kr"));
}
/**
* 쿠키를 저장한다.
* @param name 이름
* @param value 값
* @param path 경로
* @param maxAge 유효시간
* @return
* @throws IOException
*/
public static Cookie createCookie(
String name, String value, String path, int maxAge)
throws IOException {
Cookie cookie = new Cookie(name,
URLEncoder.encode(value, "euc-kr"));
cookie.setPath(path);
cookie.setMaxAge(maxAge);
return cookie;
}
/**
* 쿠키를 저장한다.
* @param name 이름
* @param value 값
* @param domain 도메인
* @param path 경로
* @param maxAge 유효시간
* @return
* @throws IOException
*/
public static Cookie createCookie(
String name, String value,
String domain, String path, int maxAge)
throws IOException {
Cookie cookie = new Cookie(name,
URLEncoder.encode(value, "euc-kr"));
cookie.setDomain(domain);
cookie.setPath(path);
cookie.setMaxAge(maxAge);
return cookie;
}
/**
* 해당되는 쿠키를 가져온다.
* @param name
* @return 쿠키값
*/
public Cookie getCookie(String name) {
return (Cookie)cookieMap.get(name);
}
/**
* 요청한 쿠키 이름의 값을 가져온다.
* 가져온 값이 없을 경우 null을 리턴한다.
* @param name 쿠키 이름
* @return
* @throws IOException
*/
public String getValue(String name) throws IOException {
Cookie cookie = (Cookie)cookieMap.get(name);
if (cookie == null) return null;
return URLDecoder.decode(cookie.getValue(), "euc-kr");
}
/**
* 요청한 쿠기값이 있는지의 여부를 가져온다.
* @param name 요청할 쿠키값
* @return
*/
public boolean exists(String name) {
return cookieMap.get(name) != null;
}
}
소스를 간단하게 설명을 하면 쿠기를 담는 맵을 생성 한 후 그 맵에 Key, Value 값으로 담아두고 Key에 해당하는 쿠기를 가져오는 클래스이다.
이를 사용하기 위해서는 다음과 같이 사용하면 된다.
// CookieBox 클래스의 생성자는 request로부터 쿠키 정보를 추출
CookieBox cookieBox = new CookieBox(request);
// 쿠키가 존재하지 않으면 null 리턴
Cookie idCookie = cookieBox.getCookie("id");
// 지정한 이름의 쿠키가 존재하는지의 여부
if (cookieBox.exists("name")) { ... }
//지정한 이름의 쿠키가 존재하지 않으면 값으로 null 리턴
String value = cookieBox.getValue("key");
CookieBox cookieBox = new CookieBox(request);
// 쿠키가 존재하지 않으면 null 리턴
Cookie idCookie = cookieBox.getCookie("id");
// 지정한 이름의 쿠키가 존재하는지의 여부
if (cookieBox.exists("name")) { ... }
//지정한 이름의 쿠키가 존재하지 않으면 값으로 null 리턴
String value = cookieBox.getValue("key");
이글은 최범균님의 홈페이지에서 참고한것 입니다.
'개발 > Java' 카테고리의 다른 글
ckeditor 이미지 업로드시 반환 리턴값 보내기 (1) | 2009.10.26 |
---|---|
ibatis 로그 남기기 (0) | 2009.10.08 |
Spring 2.5 annotation (0) | 2009.10.08 |
[java] String 배열을 List에 넣기 (0) | 2009.01.19 |
[jsp browser] jsp파일 소스 보는 프로그램 (1) | 2008.03.10 |