ServletContext를 이용한 회원검색 서비스
위와 같은 사진처럼 ID, 이름, 나이, 성별을 입력하고 전송을 누르면 회원정보들이 출력되는 서비스를 만들 것이다.
<html>
request_member_form.html
<Listener>
SaveRequestMemberListener.java
ShowAllReqMemberServlet.java
SaveReqMemberServlet.java
<MemberDTO>
MemberDTO.java
ServletContext를 이용한 회원검색 서비스
위와 같은 사진처럼 ID, 이름, 나이, 성별을 입력하고 전송을 누르면 회원정보들이 출력되는 서비스를 만들 것이다.
<html>
request_member_form.html
<Listener>
SaveRequestMemberListener.java
ShowAllReqMemberServlet.java
SaveReqMemberServlet.java
<MemberDTO>
MemberDTO.java
Session 관리
-Http프로토콜은 stateless한 특징을 가진다.
-stateless -상태유지를 못한다 -> 클라이언트의 데이터를 유지하지 못함
-Session
○하나의 클라이언트가 프로그램을 시작해서 종료할때까지
○하나의 세션동안 여려번의 요청과 응답이 반복 될 수 있다.
○하나의 세션동안 클라이언트의 데이터는 유지되어야 한다.
-Session 관리 개념
○HTTP 프로토콜의 특징은 클라이언트의 상태를 유지 못하므로 CGI에서 지원
○방식
-Cookie를 이용
-Session을 이용
-URLRewriting을 이용
-Cookie를 이용한 Session관리
○쿠키
- 서버가 브라우저(client)로 전송하는 text 데이터
- 쿠키는 클라이언트의 정보를 유지하기 위한 데이터로 Web Browser에 저장된다.
->클라이언트 단에 저장
- key-value 형태로 관리된다.
- 저장 데이터의 종류는 문자열만 가능
-Web Browser는 쿠키를 사이트 별로 관리한다.
-웹브라우저가 종료되면 쿠키는 죽어버린다.
○장점
-서버에 부하를 줄일 수 있다.
○단점
-관리 할 수 있는 데이터의 종류, 크기에 제약이 있다.
-보안상 문제가 있다.
○구문
-쿠키 생성
-javax.servlet.http.Cookie 사용 - 하나의 쿠키 값을 가지는 객체
-HttpServletResponse.addCookie(Cookie c) : 쿠키를 client로 전송
ex)Cookie c = new Cookie("name","value");
response.addCookie(c);
-쿠키값 조회
-HttpServletRequest.getCookies() : Cookie[]
ex)Cookie[] c = request.getCookies();
- Cookie 클래스 주요 메소드
-getName() : String - name 값 조회
-getValue() : String -value 값 조회
-setMaxAge(int 초(sec)) - 쿠키가 웹 브라우저에 저장될 시간 설정
- 초: 양수 = 지정될 시간
: 음수 = web browser가 살아있는 동안까지만
: 0초 = 삭제
- 한글 encode처리
<Cookie 예제>
개요
- SetCookie로 현재 시간을 알아내서 cookie에 저장한다.
- GetCookie로 SetCookie에서 넘겨준 값을 출력한다.
Servlet
folder : servlet.cookie
GetCookieServlet.java
SetCookieServlet1.java
url : /getServlet
/setServlet
HTML
folder : cookie
cookie.html
[GetCookieServlet.java]
[SetCookieServlet1.java]
[cookie.html]
결과화면
1. SetCookie를 실행한다.
2. GetCookie요청을 누르면 getCookie가 실행되어 set에서 넘겨준 값을 출력한다.
SetCookieServlet을 통해 쿠키 정보를 전송하고 GetCookieServlet을 조회하면 전송된 쿠키가 출력된다. 하지만 GetCookieServlet을 통해 서버를 재 시작하면 request.getCookie()를 통해 조회한 값이 없어진다. 즉, 웹브라우저가 살아 있는 동안만 쿠키 정보를 조회할 수 있다.
○ Multi-thread상황에서 Data 동기화(Synchronized)
- 데이터를 공유하는 상황에서 한 클라이언트가 데이터 사용중인 다른 클라이언트가 이 데이터를 수정했을때 데이터의 무결성이 깨져 버린다.
○ Multi thread 상황에서 Data동기화 문제의 소지(synchronized)
- Local 변수 (X)
- Instance 변수 (O) : 동시에 변경을 시도 할때
- Static 변수 (O)
- Attribute
◎ request scope (X)
◎ session scope 이론적으로는 가능(O), 실제로는 불가능(X)
◎ application scope (O)
○ Data 동기화 처리 개념
- 사용중인 데이터에 Lock을 건다.
구문
synchronized(this){
데이터 사용
} //데이터 사용 끝(Lock 해제)
◆ synchronized 사용전
- 동시에 두 클라이언트가 접속을 시도하면 5초후 둘다 같은 숫자를 부여 받는다.
◆ synchronized 사용후
- 동시에 두 클라이언트가 접속을 시도하면 조금이라도 먼저 시도한 클라이언트가 5초 후 앞 번호를 가져간다. (다른 숫자 부여)
그리고 2번쨰 클라이언트는 총 10초의 sleep time을 갖는다.(앞 클라이언트의 작업이 끝날 동안 Lock이 걸리기 때문)