SlideShare una empresa de Scribd logo
1 de 20
Descargar para leer sin conexión
Design Pattern
Apply For Servlet/JSP
servlet으로 배우는 디자인 패턴
#1 builder Pattern
Target Audience
 디자인패턴 공부할 때는 콘솔에 HelloWorld만 찍어봤는데
웹은 어떻게 하나요??
 세미나를 들어도 스터디를 해도 적용이 안되요.
 저녁에는 디자인패턴 책보고 회사에선 c+v 하고 있어요.
Pre require expreience
 experience with using on java based application
 knowledge of web
Servlet의 기본 메소드들
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 되요?
시대에..
Builder Pattern이란?
 생성관점
앞서 보았던 html생성하던 코드는 내용(전달받은 내용:입니다.)
을 찍기에는 꽤나 복잡하다. 그리고 printWriter가 순차적으로
실행되어야 한다.
이렇게 객체 생성 시에 복잡하고 얽혀있는 관계들을 단순하게
분리해 낸 것을 builder pattern이라고 한다.
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
각 클래스의 역할
 Builder는 실제로 문서의 요소들을 만드는 역할을 한다.
 Director는 builder를 선택해서 최종적인 문서를 완성한다.
기존 코드 분석
 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>" );
 }
Builder 클래스 작성
 html 생성
 Header 생성
 body 생성
 body안에 내용삽입
Html builder 클래스 작성
XmlBuilder 클래스 작성
Director 클래스 작성
 Director 클래스는 builder
클래스에서
정의한 메소드들을 이용해서 실
제 문서를 만드는 역할을 한다.
builder들은 공통된 메소드들을
가지고 있어서 실제로 builder
가 어떤 타입의 문서를 만드는
지는 director가 알 필요가 없다.
servlet에서 사용하기 때문에
여기서는 편의상 close메소드를
이용해서 문자열을 반환하기로
했다.
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();
}
}
Director 클래스 리펙토링2
 builder는 추상클래스라 직접적인 인스턴스 생성이 안됨
안되는데 왜 생성자에서 전달받고 있나. factory한테 넘기자
private Builder builder;
BuilderFactory factory;
public Director() {
factory = new BuilderFactory();
}
이제 director는 builder타입 인자 안 받고 그냥 딱 생성하는
걸로
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;
}
기존 서블릿
파라메터에서 타입을 받아
서 처리하자.
기존 서블릿 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"));
실행결과
html
xml
끝
 https://www.facebook.com/thecodinglive

Más contenido relacionado

La actualidad más candente

테스트가 뭐예요?
테스트가 뭐예요?테스트가 뭐예요?
테스트가 뭐예요?Kyoung Up Jung
 
[D2CAMPUS]JavaScript 다시 시작하기
[D2CAMPUS]JavaScript 다시 시작하기[D2CAMPUS]JavaScript 다시 시작하기
[D2CAMPUS]JavaScript 다시 시작하기NAVER D2
 
ReactJS | 서버와 클라이어트에서 동시에 사용하는
ReactJS | 서버와 클라이어트에서 동시에 사용하는ReactJS | 서버와 클라이어트에서 동시에 사용하는
ReactJS | 서버와 클라이어트에서 동시에 사용하는Taegon Kim
 
디자인 패턴 적용
디자인 패턴 적용디자인 패턴 적용
디자인 패턴 적용Sean Choi
 
Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까? Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까? Kim Hunmin
 
[하코사세미나] 한 시간 만에 배우는 Jquery
[하코사세미나] 한 시간 만에 배우는 Jquery[하코사세미나] 한 시간 만에 배우는 Jquery
[하코사세미나] 한 시간 만에 배우는 Jquery정석 양
 
간단한 블로그를 만들며 Django 이해하기
간단한 블로그를 만들며 Django 이해하기간단한 블로그를 만들며 Django 이해하기
간단한 블로그를 만들며 Django 이해하기Kyoung Up Jung
 
Servlet&jsp 1장
Servlet&jsp 1장Servlet&jsp 1장
Servlet&jsp 1장JeongBong Kim
 
QnA Blog Using Django - 회원가임/로그인폼, Post, 글보기
QnA Blog Using Django - 회원가임/로그인폼, Post, 글보기QnA Blog Using Django - 회원가임/로그인폼, Post, 글보기
QnA Blog Using Django - 회원가임/로그인폼, Post, 글보기Kwangyoun Jung
 
Why javaScript?
Why javaScript?Why javaScript?
Why javaScript?Kim Hunmin
 
막하는 스터디 네 번째 만남 AngularJs (20151108)
막하는 스터디 네 번째 만남 AngularJs (20151108)막하는 스터디 네 번째 만남 AngularJs (20151108)
막하는 스터디 네 번째 만남 AngularJs (20151108)연웅 조
 
휴봇-슬랙 OSX 설치
휴봇-슬랙 OSX 설치휴봇-슬랙 OSX 설치
휴봇-슬랙 OSX 설치Juneyoung Oh
 
안드로이드스터디 1
안드로이드스터디 1안드로이드스터디 1
안드로이드스터디 1jangpd007
 
React를 이용하여 멀티플랫폼에서 개발하기
React를 이용하여 멀티플랫폼에서 개발하기React를 이용하여 멀티플랫폼에서 개발하기
React를 이용하여 멀티플랫폼에서 개발하기WebFrameworks
 
막하는스터디 두번째만남 Express(20151025)
막하는스터디 두번째만남 Express(20151025)막하는스터디 두번째만남 Express(20151025)
막하는스터디 두번째만남 Express(20151025)연웅 조
 
JavaSript Template Engine
JavaSript Template EngineJavaSript Template Engine
JavaSript Template EngineOhgyun Ahn
 
진짜기초 Node.js
진짜기초 Node.js진짜기초 Node.js
진짜기초 Node.jsWoo Jin Kim
 
Angular2 가기전 Type script소개
 Angular2 가기전 Type script소개 Angular2 가기전 Type script소개
Angular2 가기전 Type script소개Dong Jun Kwon
 

La actualidad más candente (20)

테스트가 뭐예요?
테스트가 뭐예요?테스트가 뭐예요?
테스트가 뭐예요?
 
[D2CAMPUS]JavaScript 다시 시작하기
[D2CAMPUS]JavaScript 다시 시작하기[D2CAMPUS]JavaScript 다시 시작하기
[D2CAMPUS]JavaScript 다시 시작하기
 
ReactJS | 서버와 클라이어트에서 동시에 사용하는
ReactJS | 서버와 클라이어트에서 동시에 사용하는ReactJS | 서버와 클라이어트에서 동시에 사용하는
ReactJS | 서버와 클라이어트에서 동시에 사용하는
 
디자인 패턴 적용
디자인 패턴 적용디자인 패턴 적용
디자인 패턴 적용
 
Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까? Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까?
 
[하코사세미나] 한 시간 만에 배우는 Jquery
[하코사세미나] 한 시간 만에 배우는 Jquery[하코사세미나] 한 시간 만에 배우는 Jquery
[하코사세미나] 한 시간 만에 배우는 Jquery
 
간단한 블로그를 만들며 Django 이해하기
간단한 블로그를 만들며 Django 이해하기간단한 블로그를 만들며 Django 이해하기
간단한 블로그를 만들며 Django 이해하기
 
Servlet&jsp 1장
Servlet&jsp 1장Servlet&jsp 1장
Servlet&jsp 1장
 
QnA Blog Using Django - 회원가임/로그인폼, Post, 글보기
QnA Blog Using Django - 회원가임/로그인폼, Post, 글보기QnA Blog Using Django - 회원가임/로그인폼, Post, 글보기
QnA Blog Using Django - 회원가임/로그인폼, Post, 글보기
 
Django View Part 1
Django View Part 1Django View Part 1
Django View Part 1
 
Why javaScript?
Why javaScript?Why javaScript?
Why javaScript?
 
Javascript 101
Javascript 101Javascript 101
Javascript 101
 
막하는 스터디 네 번째 만남 AngularJs (20151108)
막하는 스터디 네 번째 만남 AngularJs (20151108)막하는 스터디 네 번째 만남 AngularJs (20151108)
막하는 스터디 네 번째 만남 AngularJs (20151108)
 
휴봇-슬랙 OSX 설치
휴봇-슬랙 OSX 설치휴봇-슬랙 OSX 설치
휴봇-슬랙 OSX 설치
 
안드로이드스터디 1
안드로이드스터디 1안드로이드스터디 1
안드로이드스터디 1
 
React를 이용하여 멀티플랫폼에서 개발하기
React를 이용하여 멀티플랫폼에서 개발하기React를 이용하여 멀티플랫폼에서 개발하기
React를 이용하여 멀티플랫폼에서 개발하기
 
막하는스터디 두번째만남 Express(20151025)
막하는스터디 두번째만남 Express(20151025)막하는스터디 두번째만남 Express(20151025)
막하는스터디 두번째만남 Express(20151025)
 
JavaSript Template Engine
JavaSript Template EngineJavaSript Template Engine
JavaSript Template Engine
 
진짜기초 Node.js
진짜기초 Node.js진짜기초 Node.js
진짜기초 Node.js
 
Angular2 가기전 Type script소개
 Angular2 가기전 Type script소개 Angular2 가기전 Type script소개
Angular2 가기전 Type script소개
 

Destacado

Servlet Architecture
Servlet ArchitectureServlet Architecture
Servlet ArchitectureJU Chae
 
실용주의 디자인패턴 2 인터페이스로 프로그래밍하기
실용주의 디자인패턴   2 인터페이스로 프로그래밍하기실용주의 디자인패턴   2 인터페이스로 프로그래밍하기
실용주의 디자인패턴 2 인터페이스로 프로그래밍하기Cosmos Shin
 
동영상입문
동영상입문동영상입문
동영상입문Sukjin Yun
 
HolubOnPatterns/chapter2_2
HolubOnPatterns/chapter2_2HolubOnPatterns/chapter2_2
HolubOnPatterns/chapter2_2SeungHyun Hwang
 
Builder, prototype, singleton pattern
Builder, prototype, singleton patternBuilder, prototype, singleton pattern
Builder, prototype, singleton patternYoonJong Choi
 
IoC and DI Pattern
IoC and DI PatternIoC and DI Pattern
IoC and DI PatternSangwon Ko
 
프레임워크와 어플리케이션 동시에 구축하기
프레임워크와 어플리케이션 동시에 구축하기프레임워크와 어플리케이션 동시에 구축하기
프레임워크와 어플리케이션 동시에 구축하기Sangwon Ko
 
스프링 트러블슈팅
스프링 트러블슈팅스프링 트러블슈팅
스프링 트러블슈팅Keesun Baik
 
Design patterns 스터디 -strategy패턴
Design patterns 스터디 -strategy패턴Design patterns 스터디 -strategy패턴
Design patterns 스터디 -strategy패턴Hyunho-Cho
 
자바 서버 애플리케이션 아키텍처 안티 패턴
자바 서버 애플리케이션 아키텍처 안티 패턴자바 서버 애플리케이션 아키텍처 안티 패턴
자바 서버 애플리케이션 아키텍처 안티 패턴Sungchul Park
 
예제로 보는 Pattern 연상법
예제로 보는 Pattern 연상법예제로 보는 Pattern 연상법
예제로 보는 Pattern 연상법hyun soomyung
 
Jsp convert to Servlet
Jsp convert to ServletJsp convert to Servlet
Jsp convert to ServletJU Chae
 
아라한사의 스프링 시큐리티 정리
아라한사의 스프링 시큐리티 정리아라한사의 스프링 시큐리티 정리
아라한사의 스프링 시큐리티 정리라한사 아
 
DDD 구현기초 (거의 Final 버전)
DDD 구현기초 (거의 Final 버전)DDD 구현기초 (거의 Final 버전)
DDD 구현기초 (거의 Final 버전)beom kyun choi
 
spring data jpa 간단한 튜토리얼
spring data jpa 간단한 튜토리얼spring data jpa 간단한 튜토리얼
spring data jpa 간단한 튜토리얼라한사 아
 
Spring framework 3.2 > 4.0 — themes and trends
Spring framework 3.2 > 4.0 — themes and trendsSpring framework 3.2 > 4.0 — themes and trends
Spring framework 3.2 > 4.0 — themes and trendsArawn Park
 

Destacado (19)

Servlet Architecture
Servlet ArchitectureServlet Architecture
Servlet Architecture
 
실용주의 디자인패턴 2 인터페이스로 프로그래밍하기
실용주의 디자인패턴   2 인터페이스로 프로그래밍하기실용주의 디자인패턴   2 인터페이스로 프로그래밍하기
실용주의 디자인패턴 2 인터페이스로 프로그래밍하기
 
Design patterns
Design patternsDesign patterns
Design patterns
 
동영상입문
동영상입문동영상입문
동영상입문
 
HolubOnPatterns/chapter2_2
HolubOnPatterns/chapter2_2HolubOnPatterns/chapter2_2
HolubOnPatterns/chapter2_2
 
Builder, prototype, singleton pattern
Builder, prototype, singleton patternBuilder, prototype, singleton pattern
Builder, prototype, singleton pattern
 
IoC and DI Pattern
IoC and DI PatternIoC and DI Pattern
IoC and DI Pattern
 
프레임워크와 어플리케이션 동시에 구축하기
프레임워크와 어플리케이션 동시에 구축하기프레임워크와 어플리케이션 동시에 구축하기
프레임워크와 어플리케이션 동시에 구축하기
 
B Fn As
B Fn AsB Fn As
B Fn As
 
Heartbeat
HeartbeatHeartbeat
Heartbeat
 
스프링 트러블슈팅
스프링 트러블슈팅스프링 트러블슈팅
스프링 트러블슈팅
 
Design patterns 스터디 -strategy패턴
Design patterns 스터디 -strategy패턴Design patterns 스터디 -strategy패턴
Design patterns 스터디 -strategy패턴
 
자바 서버 애플리케이션 아키텍처 안티 패턴
자바 서버 애플리케이션 아키텍처 안티 패턴자바 서버 애플리케이션 아키텍처 안티 패턴
자바 서버 애플리케이션 아키텍처 안티 패턴
 
예제로 보는 Pattern 연상법
예제로 보는 Pattern 연상법예제로 보는 Pattern 연상법
예제로 보는 Pattern 연상법
 
Jsp convert to Servlet
Jsp convert to ServletJsp convert to Servlet
Jsp convert to Servlet
 
아라한사의 스프링 시큐리티 정리
아라한사의 스프링 시큐리티 정리아라한사의 스프링 시큐리티 정리
아라한사의 스프링 시큐리티 정리
 
DDD 구현기초 (거의 Final 버전)
DDD 구현기초 (거의 Final 버전)DDD 구현기초 (거의 Final 버전)
DDD 구현기초 (거의 Final 버전)
 
spring data jpa 간단한 튜토리얼
spring data jpa 간단한 튜토리얼spring data jpa 간단한 튜토리얼
spring data jpa 간단한 튜토리얼
 
Spring framework 3.2 > 4.0 — themes and trends
Spring framework 3.2 > 4.0 — themes and trendsSpring framework 3.2 > 4.0 — themes and trends
Spring framework 3.2 > 4.0 — themes and trends
 

Similar a Servlet design pattern

Okjsp 13주년 발표자료: 생존 프로그래밍 Test
Okjsp 13주년 발표자료: 생존 프로그래밍 TestOkjsp 13주년 발표자료: 생존 프로그래밍 Test
Okjsp 13주년 발표자료: 생존 프로그래밍 Testbeom kyun choi
 
파이썬 플라스크 이해하기
파이썬 플라스크 이해하기 파이썬 플라스크 이해하기
파이썬 플라스크 이해하기 Yong Joon Moon
 
Node.js and react
Node.js and reactNode.js and react
Node.js and reactHyungKuIm
 
Secrets of the JavaScript Ninja - Chapter 12. DOM modification
Secrets of the JavaScript Ninja - Chapter 12. DOM modificationSecrets of the JavaScript Ninja - Chapter 12. DOM modification
Secrets of the JavaScript Ninja - Chapter 12. DOM modificationHyuncheol Jeon
 
Cappuccino fundamental
Cappuccino fundamentalCappuccino fundamental
Cappuccino fundamentalJeongHun Byeon
 
Isomorphicspring Isomorphic - spring web seminar 2015
Isomorphicspring Isomorphic - spring web seminar 2015Isomorphicspring Isomorphic - spring web seminar 2015
Isomorphicspring Isomorphic - spring web seminar 2015sung yong jung
 
Rails style-guide-2
Rails style-guide-2Rails style-guide-2
Rails style-guide-2Yunho Jo
 
Spring test mvc 발표자료
Spring test mvc 발표자료Spring test mvc 발표자료
Spring test mvc 발표자료수홍 이
 
Node js[stg]onimusha 20140822
Node js[stg]onimusha 20140822Node js[stg]onimusha 20140822
Node js[stg]onimusha 20140822병헌 정
 
신입 웹 개발자 포트폴리오 / 댓글 게시판
신입 웹 개발자 포트폴리오 / 댓글 게시판신입 웹 개발자 포트폴리오 / 댓글 게시판
신입 웹 개발자 포트폴리오 / 댓글 게시판hyeonjae Cheon
 
Design pattern 옵저버
Design pattern 옵저버Design pattern 옵저버
Design pattern 옵저버Sukjin Yun
 
chatbot-seminar-1806
chatbot-seminar-1806chatbot-seminar-1806
chatbot-seminar-1806juneyoungdev
 
Html5 앱과 웹사이트를 보다 빠르게 하는 50가지
Html5 앱과 웹사이트를 보다 빠르게 하는 50가지Html5 앱과 웹사이트를 보다 빠르게 하는 50가지
Html5 앱과 웹사이트를 보다 빠르게 하는 50가지yongwoo Jeon
 

Similar a Servlet design pattern (20)

Okjsp 13주년 발표자료: 생존 프로그래밍 Test
Okjsp 13주년 발표자료: 생존 프로그래밍 TestOkjsp 13주년 발표자료: 생존 프로그래밍 Test
Okjsp 13주년 발표자료: 생존 프로그래밍 Test
 
파이썬 플라스크 이해하기
파이썬 플라스크 이해하기 파이썬 플라스크 이해하기
파이썬 플라스크 이해하기
 
Node.js and react
Node.js and reactNode.js and react
Node.js and react
 
Nest js 101
Nest js 101Nest js 101
Nest js 101
 
Secrets of the JavaScript Ninja - Chapter 12. DOM modification
Secrets of the JavaScript Ninja - Chapter 12. DOM modificationSecrets of the JavaScript Ninja - Chapter 12. DOM modification
Secrets of the JavaScript Ninja - Chapter 12. DOM modification
 
4-3. jquery
4-3. jquery4-3. jquery
4-3. jquery
 
[Codelab 2017] ReactJS 기초
[Codelab 2017] ReactJS 기초[Codelab 2017] ReactJS 기초
[Codelab 2017] ReactJS 기초
 
Cappuccino fundamental
Cappuccino fundamentalCappuccino fundamental
Cappuccino fundamental
 
ch04
ch04ch04
ch04
 
Xe hack
Xe hackXe hack
Xe hack
 
Isomorphicspring Isomorphic - spring web seminar 2015
Isomorphicspring Isomorphic - spring web seminar 2015Isomorphicspring Isomorphic - spring web seminar 2015
Isomorphicspring Isomorphic - spring web seminar 2015
 
Rails style-guide-2
Rails style-guide-2Rails style-guide-2
Rails style-guide-2
 
Spring test mvc 발표자료
Spring test mvc 발표자료Spring test mvc 발표자료
Spring test mvc 발표자료
 
Node js[stg]onimusha 20140822
Node js[stg]onimusha 20140822Node js[stg]onimusha 20140822
Node js[stg]onimusha 20140822
 
신입 웹 개발자 포트폴리오 / 댓글 게시판
신입 웹 개발자 포트폴리오 / 댓글 게시판신입 웹 개발자 포트폴리오 / 댓글 게시판
신입 웹 개발자 포트폴리오 / 댓글 게시판
 
Design pattern 옵저버
Design pattern 옵저버Design pattern 옵저버
Design pattern 옵저버
 
3-2. selector api
3-2. selector api3-2. selector api
3-2. selector api
 
What's new in IE11
What's new in IE11What's new in IE11
What's new in IE11
 
chatbot-seminar-1806
chatbot-seminar-1806chatbot-seminar-1806
chatbot-seminar-1806
 
Html5 앱과 웹사이트를 보다 빠르게 하는 50가지
Html5 앱과 웹사이트를 보다 빠르게 하는 50가지Html5 앱과 웹사이트를 보다 빠르게 하는 50가지
Html5 앱과 웹사이트를 보다 빠르게 하는 50가지
 

Más de Sukjin Yun

Enterprise Java web Deployment Strategy
Enterprise Java web Deployment StrategyEnterprise Java web Deployment Strategy
Enterprise Java web Deployment StrategySukjin Yun
 
Geb quick start
Geb quick startGeb quick start
Geb quick startSukjin Yun
 
BDD with Spock
BDD with SpockBDD with Spock
BDD with SpockSukjin Yun
 
Scala quick start
Scala quick startScala quick start
Scala quick startSukjin Yun
 
Spring java config
Spring java configSpring java config
Spring java configSukjin Yun
 
docker_quick_start
docker_quick_startdocker_quick_start
docker_quick_startSukjin Yun
 
Rabbitmq install한글
Rabbitmq install한글Rabbitmq install한글
Rabbitmq install한글Sukjin Yun
 
Weblogic install
Weblogic installWeblogic install
Weblogic installSukjin Yun
 
무료로 워드프레스시작하기
무료로 워드프레스시작하기무료로 워드프레스시작하기
무료로 워드프레스시작하기Sukjin Yun
 
Ldap serise v1
Ldap serise v1Ldap serise v1
Ldap serise v1Sukjin Yun
 
Android studio
Android studioAndroid studio
Android studioSukjin Yun
 
20130709 gradle
20130709 gradle20130709 gradle
20130709 gradleSukjin Yun
 

Más de Sukjin Yun (20)

Enterprise Java web Deployment Strategy
Enterprise Java web Deployment StrategyEnterprise Java web Deployment Strategy
Enterprise Java web Deployment Strategy
 
Geb quick start
Geb quick startGeb quick start
Geb quick start
 
BDD with Spock
BDD with SpockBDD with Spock
BDD with Spock
 
Scala quick start
Scala quick startScala quick start
Scala quick start
 
Spring java config
Spring java configSpring java config
Spring java config
 
docker_quick_start
docker_quick_startdocker_quick_start
docker_quick_start
 
Rabbitmq install한글
Rabbitmq install한글Rabbitmq install한글
Rabbitmq install한글
 
Servlet3
Servlet3Servlet3
Servlet3
 
Weblogic install
Weblogic installWeblogic install
Weblogic install
 
무료로 워드프레스시작하기
무료로 워드프레스시작하기무료로 워드프레스시작하기
무료로 워드프레스시작하기
 
Start groovy
Start groovyStart groovy
Start groovy
 
Pygame
PygamePygame
Pygame
 
Annotation
AnnotationAnnotation
Annotation
 
마리아Db
마리아Db마리아Db
마리아Db
 
Intellij java
Intellij javaIntellij java
Intellij java
 
Ldap serise v1
Ldap serise v1Ldap serise v1
Ldap serise v1
 
Android studio
Android studioAndroid studio
Android studio
 
20130709 gradle
20130709 gradle20130709 gradle
20130709 gradle
 
Launch4j
Launch4jLaunch4j
Launch4j
 
Java sign
Java signJava sign
Java sign
 

Servlet design pattern

  • 1. Design Pattern Apply For Servlet/JSP servlet으로 배우는 디자인 패턴 #1 builder Pattern
  • 2. Target Audience  디자인패턴 공부할 때는 콘솔에 HelloWorld만 찍어봤는데 웹은 어떻게 하나요??  세미나를 들어도 스터디를 해도 적용이 안되요.  저녁에는 디자인패턴 책보고 회사에선 c+v 하고 있어요.
  • 3. Pre require expreience  experience with using on java based application  knowledge of web
  • 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. Builder Pattern이란?  생성관점 앞서 보았던 html생성하던 코드는 내용(전달받은 내용:입니다.) 을 찍기에는 꽤나 복잡하다. 그리고 printWriter가 순차적으로 실행되어야 한다. 이렇게 객체 생성 시에 복잡하고 얽혀있는 관계들을 단순하게 분리해 낸 것을 builder pattern이라고 한다.
  • 8. 각 클래스의 역할  Builder는 실제로 문서의 요소들을 만드는 역할을 한다.  Director는 builder를 선택해서 최종적인 문서를 완성한다.
  • 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. Builder 클래스 작성  html 생성  Header 생성  body 생성  body안에 내용삽입
  • 13. Director 클래스 작성  Director 클래스는 builder 클래스에서 정의한 메소드들을 이용해서 실 제 문서를 만드는 역할을 한다. builder들은 공통된 메소드들을 가지고 있어서 실제로 builder 가 어떤 타입의 문서를 만드는 지는 director가 알 필요가 없다. servlet에서 사용하기 때문에 여기서는 편의상 close메소드를 이용해서 문자열을 반환하기로 했다.
  • 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. Director 클래스 리펙토링2  builder는 추상클래스라 직접적인 인스턴스 생성이 안됨 안되는데 왜 생성자에서 전달받고 있나. factory한테 넘기자 private Builder builder; BuilderFactory factory; public Director() { factory = new BuilderFactory(); } 이제 director는 builder타입 인자 안 받고 그냥 딱 생성하는 걸로
  • 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; }
  • 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"));