18
Design Pattern Apply For Servlet / JSP servlet으로 배우는 디자인 패턴 #2 Observer Pattern

Design pattern 옵저버

Embed Size (px)

Citation preview

Page 1: Design pattern 옵저버

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

#2 Observer Pattern

Page 2: Design pattern 옵저버

Target Audience

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

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

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

Page 3: Design pattern 옵저버

Pre requisition

experience with using on java based application

knowledge of Web Programing

Page 4: Design pattern 옵저버

Observer 패턴이란?(1)

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

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

Page 5: Design pattern 옵저버

Observer 패턴이란 (2)

Subject

Subject구현 클래스

subjectState

<<Interface>>Observer

update():void

Observer구현클래스

update():void

register

unregister

notify

*1

Page 6: Design pattern 옵저버

Observer 패턴이란?(3)

Page 7: Design pattern 옵저버

서블릿에서는어떻게할까

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

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

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

Page 8: Design pattern 옵저버

HttpSessionListener선언

@WebListener

public class SessionListener implements HttpSessionListener, HttpSessionAttributeListener {}

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

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

Page 9: Design pattern 옵저버

Session이추가되면

public void sessionCreated(HttpSessionEvent sessionEvent) {

sessionEvent.getSession().getId());

}

D70A9A78650752E4A87BCD40A6F9B487

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

Page 10: Design pattern 옵저버

Session을어떻게저장했었지?

session.setAttribute( Key , Value )

Page 11: Design pattern 옵저버

다시 Session이추가되면

public void attributeAdded (HttpSessionEvent sessionEvent) {

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

Page 12: Design pattern 옵저버

세션종료도확인하자.

public void sessionDestroyed(HttpSessionEvent sessionEvent) {

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

}

Page 13: Design pattern 옵저버

프로그램이시작되면..

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

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

Page 14: Design pattern 옵저버

ServletContextListener선언

@WebListener

public class MyContextListener implements ServletContextListener {}

Page 15: Design pattern 옵저버

시작할때뭔가하자.

시작할때

@WebListener

public void contextInitialized(ServletContextEvent e){}

Page 16: Design pattern 옵저버

시작할때뭔가하자.2

@WebListener

public void contextInitialized(ServletContextEvent e){

ServletContext context = e.getServletContext();

context.setAttribute(“key”, value);

}

Page 17: Design pattern 옵저버

앞에서한거꺼내서쓰자.

@WebServlet(“/myServlet”)

public class MyServlet extends HttpServlet{

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

getServletContext().getAttribute(“key”);

}

Page 18: Design pattern 옵저버

To Other Time

To Other Place

To other Us