* Attribute(속성)


- Attribute란
   - Web Application 구성 컴포넌트들(Servlet, JSP, Listener)이 공유하는 객체
- Scope
   - Attribute들을 공유하기 위한 공유 장소의 영역.(저장 장소)
   - 공유 범위에 따라 3가지 영역이 있다. 
     1. request scope : HttpServletRequest 이용
         - 요청 ~ 응답까지 공유
     2. session scope : HttpSession 이용
         - 한명의 클라이언트(웹브라우저)가 로그인 ~ 로그아웃
     3. application scope : ServletContext이용
         - Application 시작 ~ 종료까지 공유

* 접근범위 :  1->2->3 번순으로 접근 범위가 넓다.

- 관련 메소드 
- Attribute는 key - value 쌍으로 관리된다.
   * serAttribute(String key, Object value) : 공유영역에 Attribute 저장
   * getAttribute(String key) : Object value : 저장된 Attibute 조회
   * getAttributeNames() : Enumeration : Attribute들에 연결된 name들 조회

* Attribute 개요

 

 

* client 10
   request 50 번이라 하면

request scope의 저장장소는 500개 생기고,
session scope의 저장장소는 10개 생기고,
application scope의 저장장소는 1개 생긴다.


request는 호출할때 마다 저장 장소가 생겼다가 사용이 끝나면 자동으로 사라진다.
session scope는 한 클라이언트당 1개의 저장장소를 따로 갖는다(각 클라이언트마다 각각의 저장장소를 통해 데이터를 관리, 다른 클라이언트에서 접근 불가).
application은 동시에 1개의 저장장소에 접근할 수 있다.

Posted by 조은성
,
class
package : servlet.listener
name : DriverLoadingListener

 - Project Explorer에서 마우스 오른쪽

 

 - xml (xml에 자동 listener 생성)

- 자동 드라이버리스너 생성

Posted by 조은성
,

* public void contextInitialized(ServletContextEvent sce){}와public void contextDestroyed(ServletContextEvent sce){} 실행시점 알아보기
(톰켓을 실행시키면 Web Container가 어플리케이션 실행 시점이라는 것을 알려서 contextInitialized()가 실행되고, 톰켓 서버를 내리면 Web Container가 어플리케이션 종료 시점이라는 것을 알려서 contextDestroyed()가 실행 된다.

class
package : servlet.listener
name : MyServletContextListener

- xml

 

Posted by 조은성
,

* ServletConfig - 서블릿당 하나만 생긴다(초기파라미터 설정(특정 서블릿 조회)(문자열이 변경되었을 때 소스코드 변경없이 프로그램을 변경할 수 있게 하는 것)
- 구문 :
<init-param>
<param-name>
<param-value>
Init()를 이용해서 관리

초기파라미터 불러오는 메소드 : getInitParameter();//값이 없으면 null을 리턴

* ServletContext(application과 관계) - application에 있는 모든 서블릿에 접근 가능.(초기 파라미터를 xml에 설정해 두고 불러올 수 있음) 

초기파라미터 불러오는 메소드 : getInitParameter();//값이 없으면 null을 리턴

WebContainer가 ServletConfig와 ServletContext를 관리 

Posted by 조은성
,

* Event 모델
- Event : 컴포넌트에 가해진 동작, 변화.
- Event Listener
 1. 컴포넌트에서 Event가 발생하는 것을 감시하는 Container.
 2. 발생한 Event를 처리하는 동작을 가진 객체(Listener class)
- Event Handler : 발생한 Event를 처리하는 동작(메소드)
- Event Source : Event가 발생한 컴포넌트

ex) 버튼을 클릭하면 안녕이라고 출력한다.
   Event Source : 버튼
   Event : 클릭
   Event Handler : 안녕 을 출력하는 동작

* 어플리케이션이 서비스가 시작하는 시점과 종료되는 시점에 무슨 작업을 하고 싶을때 Event 모델(Event Class)을 사용한다.

 

* 이벤트가 일어나면 자동으로 감지하게 해준다. (ex : 도둑이 들거나 불이 나는 것. 언제 발생할지 모름. 불이 나는 건물이 이벤트 소스, 처리하는 것(경찰관, 소방관)이 이벤트 핸들러(처리작업), 도둑을 잡으려면 경찰서가 있어야 하는데 이를 (이벤트 리스너 클래스라 칭한다.), 불이나면 불이 났다고 알리는 것을 이벤트 리스너라 한다.  

* WebContainer가 이벤트가 발생하면 이벤트가 일어났다고 알려주는 역할을 한다.

* Event 객체 : 어떤 클래스에 어떤 이벤트가 발생할 것 같다 하면 모두다 class로 정의 되어 있다.(container가 알아서 만들어 준다)

 


* Event Source에서 Event가 발생하면 Event객체를 만들고 Event Handler(Evnet Handler는 메소드다)를 불러준다.
* 이벤트는 웹컨테이너가 만들어 주고 알아서 불러준다. (실행환경(Web Container)이 부르는 것은 우리가 만들지 않고 불러서 사용만한다.)

 

 

 

* ServletConextEvent가 발생하면 ServletContextListener에서 처리

Posted by 조은성
,

* servlet class
package : servlet.initparam
name : ContextParamServlet
url-pattern : /context_param

* ContextParamServlet 자동 생성

 

* 소스 구현

- xml구현

 

- ContextParamServlet구현

 

- 실행화면

 

* xml의 변수만 이순신 aaa 000-000-0000으로 바꿔주면

 

수정되는 것을 볼 수 있다.

* 기존 GreetingServlet에 ContextParamServlet의 선언부와 실행하는 것을 넣어주면 어디서든 xml에서 넣은 값을 가져다가 사용할 수 있다. (이것이 이전장에서 말한 servlet내의 xml에 ContextParam객체에 다 접근가능 하다는 것을 보여준다.)

- 소스

 

- 실행결과

 

 

Posted by 조은성
,

* javax.servlet.ServletContext(어플리케이션에 대한 업무를 처리할 정보를 가지고 있다.)


   - Web Application이 자체 또는 일하는데 필요한 정보를 가지고 있는 객체
      - Web Component는 Web Application과 관련된 정보를 조회하거나 업무를 처리할 때 ServletContext type객체를 이용
      - Web Application이 시작 할때 Web Container에 의해 생성 된다.
      - Servlet의 getServletContext()를 통해 조회
         - ServletContext ctx = getServletContext();
      - Web Application 당 하나가 생성됨

* ServletContext를 이용한 초기 파라미터 처리


1. web.xml 에 초기 파라미터 설정
<web-app>
   <context-param>
      <param-name>초기파라미터 이름</param-name>
      <param-value>초기파라미터 값</param-value>
   </context-param>
   - 초기 파라미터가 여러개인 경우<context-param>반복
2. 코드상에서 조회
   ServletContext객체.getInitParameter(String paramName) : String paramValue

 

Posted by 조은성
,

* 영어요청과 한글 요청 처리

 

 

 

 

Posted by 조은성
,

* Servlet자동 생성하기(GreetingServlet실습)

 

 

 

 

 

 

 

 

 

 

* 여기서 만약 init()를 기본적으로 제공하는 것을 사용하려면 다음과 같이 상위 객체를 초기화 해서 사용해라.

 public void init(ServletConfig config) throws ServletException {
 super.init(config);

}

 

 

 

 

Posted by 조은성
,

* 초기 파라미터 : 초기에 사용할 값들을 web.xml에 넣어두고 쓰겠다.(초기값변경시 web.xml만 변경하면 됨)
(프로그램에서 사용해야할 문자열을 web.xml에 넣어두고 web.xml에서 불러다가 쓰겠다.(소스코드 변경없이 변경되는 것을 관리)

- 서버단 컴포넌트(Servlet, JSP, Listener등) 이 사용하는 문자열 중 나중에 변경 될 수 있는 문자열을 web.xml에 등록해 놓고 컴포넌트에서는 호출하여 
- 나중에 변경시 설정에서만 바꾸면 컴포넌트의 수정없이 변경이 가능
- 초기 파라미터 2가지
   * 특정 서블릿, JSP만 사용할 수 있는 초기 파라미터
      - ServletConfig이용
   * Application 내 모든 servlet이 사용할 수 있는 초기 파라미터
      - ServletContext이용

* javax.servlet.ServletConfig(서블릿 객체에 대한 설정정보를 가지고 있음)
   - Servlet 객체가 말하는데 필요한 정도를 가지고 있는 객체
   - Web Container가 생성하여 Servlet의 init() 호출시 주입(주입 : 메소드에서 받아서 쓸 수 있게해주는 것)
   - Servlet객체당 하나씩 생성

- 초기 파라미터 init()

 

 

* ServletConfig를 이용한 초기파라미터 처리

1. web.xml에 초기파라미터 설정
   <servlet>
      <servlet-name>서블릿 객체 이름</servlet-name>
      <servlet-class>서블릿 클래스 이름</servlet-class>
      <init-param>
            <param-name>초기파라미터 이름</param-name><!-- 변경시 이름은 바뀌지 않고 값을 바꾸면 된다. -->
            <param-value>초기 파라미터 값</param-value>
      </init-param>
   </servlet>
 - 초기 파라미터가 여러개인 경우<init-param>을 반복

2. ServletConfig객체. 
           getInitParameter(String paramName) : String paramValue

 

- xml

 

- CounterServlet

* getInitParameter()가 객체 생성하지 않고 바로 사용 가능한 이유.

 

Posted by 조은성
,