본문 바로가기

카테고리 없음

JSP 5장

컨텍스트는 어느 서블릿에서나 접근 가능하다
request는 request가 끝나면 사용 불가
그래서 컨텍스트를 사용한다..좀더 넓게 사용 하기 위하여..
근데 컨텍스를 초기 할려면 DD 써야 하지만 String만 가능하다..
그래서 이걸 servletContext의 attribute로 넣을려면 객체로 만들어야 한다.
그래서 리스너를 사용 한번 해보자
순서
일단 getServletContext()로 가지고 와서 여기서 파라미터 값을 읽어 온다
그래서 이걸 읽은걸 이미 만들어준 클래스에 집어 넣어줘서 객체로 만들어주고
get~~()메소드로 가지고 오게 한다음 attribute로 넣는다.


컨텍스트 초기화 파라미터엔 String 밖에 저장 할 수 없다.
바꾸어 주는 일은 서브릿이 할 수 있지만 , 어떤 서블릿이 가장 먼저 호출될 지 모르는 상황에서 그렇게 하는 것은 좋지 않다.

어떤 어트리뷰트로 지정하여 쓸려고 할때....
(스코프)??
1,컨텍스트는 컴테이너에 있는 서블릿이 모두 접근이 가능하다.

2. 세션은 세션 어트리뷰트로 기록 하면 권한을 가진 것만 접근이 가능 하다. 

3. 해당 요청을 처리할때만 된다.


컨텍스트는 쓰레드에 안전하지 않다..
그래서 만약에 서블릿에 동기화를 시킨다면..여러가지 나쁜 사항이 있다

그래서 컨텍스트 속성 자체에 락을 걸면 된다.(결론)

센션도 세션객체 자체에다가 동기화를 걸어준다.

오직 Request 속성과 지역 변수만이 쓰레드에 안전 하다.
-서블릿 인스턴스 변수는 스레드에 안전하지 않다.
--서블릿에 인스턴스 변수를 쓰는것은 굉장히 위험하다.

-모든 스레드가 하나의 변수에 접근하게 하고 싶다면, 먼저 변수를 스레드에 안전하게 한 후에 이 값을 속성에 묶어 준다.
=변수는 인스턴스 변수가 아닌 서비스메소드의 지역변수로 선언
만약에 공유가 필요 하다면 컨텍스트, 세션, 리퀘서트중에서 가장 적당한 속성의 생존 범위를 결정하게 한후 묶어 준다.