Design pattern 옵저버
-
Upload
sukjin-yun -
Category
Documents
-
view
152 -
download
2
Transcript of Design pattern 옵저버
![Page 1: Design pattern 옵저버](https://reader034.fdocument.pub/reader034/viewer/2022051414/55a3551d1a28ab24248b4629/html5/thumbnails/1.jpg)
Design PatternApply For Servlet / JSPservlet으로배우는디자인패턴
#2 Observer Pattern
![Page 2: Design pattern 옵저버](https://reader034.fdocument.pub/reader034/viewer/2022051414/55a3551d1a28ab24248b4629/html5/thumbnails/2.jpg)
Target Audience
디자인패턴공부할때는콘솔에출력만해봤는데웹은그냥하면복사해서하면되는거아닌가요?
GOF책을봐도적용이안되요.
회사에는 Ctrl + V 하고있어요.
![Page 3: Design pattern 옵저버](https://reader034.fdocument.pub/reader034/viewer/2022051414/55a3551d1a28ab24248b4629/html5/thumbnails/3.jpg)
Pre requisition
experience with using on java based application
knowledge of Web Programing
![Page 4: Design pattern 옵저버](https://reader034.fdocument.pub/reader034/viewer/2022051414/55a3551d1a28ab24248b4629/html5/thumbnails/4.jpg)
Observer 패턴이란?(1)
1대 100이란 퀴즈 프로는 게스트 1명과 방청객 100이 함께 퀴즈를 푸는 프로입니다.
게스트가 답을 선택하면(상태를 변경하면) 방청객 100명에게 선택한 답이 보여집니다. (통지됩니다.)
![Page 5: Design pattern 옵저버](https://reader034.fdocument.pub/reader034/viewer/2022051414/55a3551d1a28ab24248b4629/html5/thumbnails/5.jpg)
Observer 패턴이란 (2)
Subject
Subject구현 클래스
subjectState
<<Interface>>Observer
update():void
Observer구현클래스
update():void
register
unregister
notify
*1
![Page 6: Design pattern 옵저버](https://reader034.fdocument.pub/reader034/viewer/2022051414/55a3551d1a28ab24248b4629/html5/thumbnails/6.jpg)
Observer 패턴이란?(3)
![Page 7: Design pattern 옵저버](https://reader034.fdocument.pub/reader034/viewer/2022051414/55a3551d1a28ab24248b4629/html5/thumbnails/7.jpg)
서블릿에서는어떻게할까
사용자가 로그아웃할 때 내게 알려주었으면..
세션 타임아웃되서 나갈때도 내가 알았으면..
로직을 추가할 곳이 마땅치 않을 때는리스너를 써보자.
![Page 8: Design pattern 옵저버](https://reader034.fdocument.pub/reader034/viewer/2022051414/55a3551d1a28ab24248b4629/html5/thumbnails/8.jpg)
HttpSessionListener선언
@WebListener
public class SessionListener implements HttpSessionListener, HttpSessionAttributeListener {}
세션 상태에 대해이벤트 받자
세션 속성에 대해이벤트 받자
![Page 9: Design pattern 옵저버](https://reader034.fdocument.pub/reader034/viewer/2022051414/55a3551d1a28ab24248b4629/html5/thumbnails/9.jpg)
Session이추가되면
public void sessionCreated(HttpSessionEvent sessionEvent) {
sessionEvent.getSession().getId());
}
D70A9A78650752E4A87BCD40A6F9B487
unique한 id값은 종료시에 얻자.
![Page 10: Design pattern 옵저버](https://reader034.fdocument.pub/reader034/viewer/2022051414/55a3551d1a28ab24248b4629/html5/thumbnails/10.jpg)
Session을어떻게저장했었지?
session.setAttribute( Key , Value )
![Page 11: Design pattern 옵저버](https://reader034.fdocument.pub/reader034/viewer/2022051414/55a3551d1a28ab24248b4629/html5/thumbnails/11.jpg)
다시 Session이추가되면
public void attributeAdded (HttpSessionEvent sessionEvent) {
(String)sessionEvent.getSession().getAttribute(“KEY값”)}
![Page 12: Design pattern 옵저버](https://reader034.fdocument.pub/reader034/viewer/2022051414/55a3551d1a28ab24248b4629/html5/thumbnails/12.jpg)
세션종료도확인하자.
public void sessionDestroyed(HttpSessionEvent sessionEvent) {
logger.debug(“세션이종료됬음” +sessionEvent.getSession.getId() );
}
![Page 13: Design pattern 옵저버](https://reader034.fdocument.pub/reader034/viewer/2022051414/55a3551d1a28ab24248b4629/html5/thumbnails/13.jpg)
프로그램이시작되면..
Path 는 하나의 프로젝트Path 는 하나의 컨텍스트
프로그램이 시작될 때같은 프로젝트에 있는요소라면 뭔가 자연스럽게하고 싶다.
![Page 14: Design pattern 옵저버](https://reader034.fdocument.pub/reader034/viewer/2022051414/55a3551d1a28ab24248b4629/html5/thumbnails/14.jpg)
ServletContextListener선언
@WebListener
public class MyContextListener implements ServletContextListener {}
![Page 15: Design pattern 옵저버](https://reader034.fdocument.pub/reader034/viewer/2022051414/55a3551d1a28ab24248b4629/html5/thumbnails/15.jpg)
시작할때뭔가하자.
시작할때
@WebListener
public void contextInitialized(ServletContextEvent e){}
![Page 16: Design pattern 옵저버](https://reader034.fdocument.pub/reader034/viewer/2022051414/55a3551d1a28ab24248b4629/html5/thumbnails/16.jpg)
시작할때뭔가하자.2
@WebListener
public void contextInitialized(ServletContextEvent e){
ServletContext context = e.getServletContext();
context.setAttribute(“key”, value);
}
![Page 17: Design pattern 옵저버](https://reader034.fdocument.pub/reader034/viewer/2022051414/55a3551d1a28ab24248b4629/html5/thumbnails/17.jpg)
앞에서한거꺼내서쓰자.
@WebServlet(“/myServlet”)
public class MyServlet extends HttpServlet{
//생략 doGet(//생략){
getServletContext().getAttribute(“key”);
}
![Page 18: Design pattern 옵저버](https://reader034.fdocument.pub/reader034/viewer/2022051414/55a3551d1a28ab24248b4629/html5/thumbnails/18.jpg)
To Other Time
To Other Place
To other Us