Design pattern 옵저버

Preview:

Citation preview

Design PatternApply For Servlet / JSPservlet으로배우는디자인패턴

#2 Observer Pattern

Target Audience

디자인패턴공부할때는콘솔에출력만해봤는데웹은그냥하면복사해서하면되는거아닌가요?

GOF책을봐도적용이안되요.

회사에는 Ctrl + V 하고있어요.

Pre requisition

experience with using on java based application

knowledge of Web Programing

Observer 패턴이란?(1)

1대 100이란 퀴즈 프로는 게스트 1명과 방청객 100이 함께 퀴즈를 푸는 프로입니다.

게스트가 답을 선택하면(상태를 변경하면) 방청객 100명에게 선택한 답이 보여집니다. (통지됩니다.)

Observer 패턴이란 (2)

Subject

Subject구현 클래스

subjectState

<<Interface>>Observer

update():void

Observer구현클래스

update():void

register

unregister

notify

*1

Observer 패턴이란?(3)

서블릿에서는어떻게할까

사용자가 로그아웃할 때 내게 알려주었으면..

세션 타임아웃되서 나갈때도 내가 알았으면..

로직을 추가할 곳이 마땅치 않을 때는리스너를 써보자.

HttpSessionListener선언

@WebListener

public class SessionListener implements HttpSessionListener, HttpSessionAttributeListener {}

세션 상태에 대해이벤트 받자

세션 속성에 대해이벤트 받자

Session이추가되면

public void sessionCreated(HttpSessionEvent sessionEvent) {

sessionEvent.getSession().getId());

}

D70A9A78650752E4A87BCD40A6F9B487

unique한 id값은 종료시에 얻자.

Session을어떻게저장했었지?

session.setAttribute( Key , Value )

다시 Session이추가되면

public void attributeAdded (HttpSessionEvent sessionEvent) {

(String)sessionEvent.getSession().getAttribute(“KEY값”)}

세션종료도확인하자.

public void sessionDestroyed(HttpSessionEvent sessionEvent) {

logger.debug(“세션이종료됬음” +sessionEvent.getSession.getId() );

}

프로그램이시작되면..

Path 는 하나의 프로젝트Path 는 하나의 컨텍스트

프로그램이 시작될 때같은 프로젝트에 있는요소라면 뭔가 자연스럽게하고 싶다.

ServletContextListener선언

@WebListener

public class MyContextListener implements ServletContextListener {}

시작할때뭔가하자.

시작할때

@WebListener

public void contextInitialized(ServletContextEvent e){}

시작할때뭔가하자.2

@WebListener

public void contextInitialized(ServletContextEvent e){

ServletContext context = e.getServletContext();

context.setAttribute(“key”, value);

}

앞에서한거꺼내서쓰자.

@WebServlet(“/myServlet”)

public class MyServlet extends HttpServlet{

//생략 doGet(//생략){

getServletContext().getAttribute(“key”);

}

To Other Time

To Other Place

To other Us