Servlet design pattern

777 views

Published on

builder pattern

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
777
On SlideShare
0
From Embeds
0
Number of Embeds
115
Actions
Shares
0
Downloads
7
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Servlet design pattern

  1. 1. Design Pattern Apply For Servlet/JSP servlet으로 배우는 디자인 패턴 #1 builder Pattern
  2. 2. Target Audience  디자인패턴 공부할 때는 콘솔에 HelloWorld만 찍어봤는데 웹은 어떻게 하나요??  세미나를 들어도 스터디를 해도 적용이 안되요.  저녁에는 디자인패턴 책보고 회사에선 c+v 하고 있어요.
  3. 3. Pre require expreience  experience with using on java based application  knowledge of web
  4. 4. Servlet의 기본 메소드들
  5. 5. doGet, doPost  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  System.out.println("doPost 메소드 호출");  response.setCharacterEncoding("UTF-8");  request.setCharacterEncoding("UTF-8");  PrintWriter writer = response.getWriter();  //contenTtype을 정의한다.  response.setContentType("text/html");   String name = request.getParameter("nameTxt");  String email = request.getParameter("emailTxt");  writer.println("<html>");  writer.println("<head><title>hello servlet3 </title> </head>");  writer.println("<body>");  writer.println( "전달받은 이름은 " + name + "이고" + "<br/>" + "email주소는" + email +"입니다." );  writer.println("</body>" );  writer.println( "<html>" );  } xml을 달라고하면? excel을 달라고하면? 이게 라이브러리 문제인가? 왜 이 서블릿은 post요청이 왔을 때 늘 html로 보여줘야 하나? printWriter를 반복해서 양식(HTML)을 만들고 있다. 와이파이 되요? rest webservice 되요? 시대에..
  6. 6. Builder Pattern이란?  생성관점 앞서 보았던 html생성하던 코드는 내용(전달받은 내용:입니다.) 을 찍기에는 꽤나 복잡하다. 그리고 printWriter가 순차적으로 실행되어야 한다. 이렇게 객체 생성 시에 복잡하고 얽혀있는 관계들을 단순하게 분리해 낸 것을 builder pattern이라고 한다.
  7. 7. Builder Pattern Diagram +BuildPart() +GetProduct() ConcreteBuilder +BuildPart() +GetProduct() AbstractBuilder +Build() Director Client Product Requests build Uses Creates Uses 1 1 1 * 1 1 1 1
  8. 8. 각 클래스의 역할  Builder는 실제로 문서의 요소들을 만드는 역할을 한다.  Director는 builder를 선택해서 최종적인 문서를 완성한다.
  9. 9. 기존 코드 분석  html 생성  Header 생성  body 생성  body안에 내용삽입  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  System.out.println("doPost 메소드 호출");  response.setCharacterEncoding("UTF-8");  request.setCharacterEncoding("UTF-8");  PrintWriter writer = response.getWriter();  //contenTtype을 정의한다.  response.setContentType("text/html");   String name = request.getParameter("nameTxt");  String email = request.getParameter("emailTxt");  writer.println("<html>");  writer.println("<head><title>hello servlet3 </title> </head>");  writer.println("<body>");  writer.println( "전달받은 이름은 " + name + "이고" + "<br/>" + "email주소는" + email +"입니다." );  writer.println("</body>" );  writer.println( "<html>" );  }
  10. 10. Builder 클래스 작성  html 생성  Header 생성  body 생성  body안에 내용삽입
  11. 11. Html builder 클래스 작성
  12. 12. XmlBuilder 클래스 작성
  13. 13. Director 클래스 작성  Director 클래스는 builder 클래스에서 정의한 메소드들을 이용해서 실 제 문서를 만드는 역할을 한다. builder들은 공통된 메소드들을 가지고 있어서 실제로 builder 가 어떤 타입의 문서를 만드는 지는 director가 알 필요가 없다. servlet에서 사용하기 때문에 여기서는 편의상 close메소드를 이용해서 문자열을 반환하기로 했다.
  14. 14. Director 클래스 리펙토링1  문서를 생성하는 construct안에 요소를 생성하는 메소드의 파라 메터 하드코딩 제거 public String construct(String type, String header, String data){ builder = factory.createBuilder(type); builder.makeRoot( type ); builder.makeHeader( header ); builder.makeBody( data ); return builder.close(); } }
  15. 15. Director 클래스 리펙토링2  builder는 추상클래스라 직접적인 인스턴스 생성이 안됨 안되는데 왜 생성자에서 전달받고 있나. factory한테 넘기자 private Builder builder; BuilderFactory factory; public Director() { factory = new BuilderFactory(); } 이제 director는 builder타입 인자 안 받고 그냥 딱 생성하는 걸로
  16. 16. factory클래스 추가 나의 type별 builder 생성을 서블릿에게 알리지 말라. public Builder createBuilder(String type){ Builder builder = null; if( type.equals("html") ) { builder = new HTMLBuilder(); } else if( type.equals("xml") ) { builder = new XMLBuilder(); } return builder; }
  17. 17. 기존 서블릿 파라메터에서 타입을 받아 서 처리하자.
  18. 18. 기존 서블릿 if문과의 이별  쫌 이제 우리 그만 좀 헤어지자. PrintWriter out = resp.getWriter(); String type = req.getParameter("docType") == null ? "html" : req.getParameter("docType"); Director director = new Director(); out.println(director.construct(type, "builder pattern servlet", “content 1234"));
  19. 19. 실행결과 html xml
  20. 20. 끝  https://www.facebook.com/thecodinglive

×