finerss's world!

ServletConfig

서블릿에 이렇게 하드코딩하는것보다

printWriter out = response.getWriter();
out.println(abc@daum.com);

이메일주소를 배포서술자안에 넣은후 서블릿이 DD에서 이메일 주소를 읽어오게하는 방법이
나중에 web.xml 만 수정하면되니까 서블릿을 손 끝하나 대지않아도 원하는것을 할수있다.

DD(web.xml) 파일에서

 <servlet>
<servlet-name>xxx</servlet-name>
<servlet-class>xxx</servlet-class>

<init-param>
                <param-name>adminEmail</param-name>
                <param-value>abc@daum.com</param-value>
          </init-param>


</servlet>
//servlet 항목안에 설정해준다


서블릿 코드에서

out.println(getServletConfig().getInitParameter("adminEmail");
//모든 서블릿에는 상속받은 getServletConfig()가 있다.



서블릿에는 상속받은 getServletConfig() 메소드가 있다.

컨테이너가 서블릿을 만들떄, DD를 읽어 이름/값의 쌍으로 ServletConfig를 생성한다.
컨테이너는 이 초기화 파라미터를 두번 다시 읽지 않는다. 이름/값 쌍이 ServletConfig 안에 기록이 되면,
서블릿이 다시 배포 되지 않는 한 DD를 수정한다고 바뀌지 않는다.


ServletConfig는 말 그대로 서블릿 설정이다. DD에 있는 서블릿 초기화 파라미터 정보를  웹 애플리케이션의
다른 컴포넌트와 공유하려면, 몇 가지 작업을 해야한다.

 //doPost() 메소드안
String color = request.getPrameter("color"); //Request 객체에서 클라이언트가 선택한 색정보를 읽어온다

BeerExpert be = newBeerExpert();
List rusult = be.getBrands(color); // 그런다음 모델을 인스턴스와하고 뷰에필요한 정보 설정

request.setAttribute("styles", result);
// Request 객체의 속성의 결과를 설정하고, Request 객체를 JSP가 처리하도록 넘김(forward)

Request 객체는 속성을 설정하는 메소드를 제공하는데(setAttribute()) 여기서 값은 어떤 객체든지 가능하다

ServletContext

컨텍스트(Context) 초기화 파라미터의 작동방식은 서블릿 초기화 파라미터와 동일하다.
그러나 컨텍스트(Context) 초기화 파라미터는 특정 하나의 서블릿만 사용하는 것이 아니라
모든 웹 애플리케이션에서 이용할 수 있다는 차이가 있다.
웹 애플리케이션에 있는 모든 JSP 서블릿에서 별다른 코딩없이도 컨텍스트 초기화 파라미터 정보에 접근할수 있으며, 그렇다고 모든 서블릿의 DD를 수정하지 않아도 된다. 또한 그 값을 수정하는 경우도 DD만 수정하면 다른곳도 자동으로 반영되니 편하다.

DD(web.xml) 파일에서

<servlet>
           <servlet-name>xxx</servlet-name>
           <servlet-class>xxx</servlet-class>
</servlet>
//<servlet> 항목 안에 있던 <init-param>을 모두 들어내고
<Context-param>
                <param-name>adminEmail</param-name>
                <param-value>abc@daum.com</param-value>
          </init-param>

//<Context-param>은 전체 애플리케이션을 위한 항목이다. 따라서 <servlet>항목안에 들어가지 않는다
<web-app> 항목에 포함시시키되 <servlet>항목안에 두지 않는다



서블릿 코드에서

out.println(getServletContext().getInitParameter("adminEmail"));
//모든 서블릿에는 상속받은 getServletContext() 메소드가 있다.




ServletConfig는 서블릿 당 하나

ServletContext는 웹 애플리케이션 당 하나

웹 애플리케이션은 오직 하나의 ServletContext으로 전체 웹 애플리케이션에서 정보를 공유한다. 하지만 웹 애플리케이션 안에 있는 서블릿은 자민만의 ServletConfig를 가진다!

또한 둘은 초기화 시켜주는 목적이다. 초기화 파라미터를 배포시 정해진 상수라고 생각하고
실행 시에 이 값을 읽을 수는 있지만, 수정할수는 없다. getInitParameter 있지만 setInitParameter() 는 없다!!!!



'공부 > Sevlets&JSP' 카테고리의 다른 글

Attribute(속성)  (0) 2011.06.28
ServletContextListener  (0) 2011.06.27
Request, Response  (0) 2011.06.27
서블릿 생명주기와 API  (0) 2011.06.24
MVC 패턴  (0) 2011.06.24