SlideShare ist ein Scribd-Unternehmen logo
1 von 33
서블릿 3.0
With gradle
darkandark90@gmail.com
간단 웹서버를 통한 흐름파악
Sun.net.httpserver 를 통해서 요청에 대한
처리를 알아보자 .
1.웹서버 객체 생성 ( 이때 포트 점유 )
2.컨텍스트 생성
3.핸들러 생성
4.핸들러에서 응답이 정상일 경우
Body data 반환
5. 핸들러에서 응답이 오류일 경우
오류코드 반환
Simple web server
https://gist.github.com/sjyun/cab188a22a755
914ce90#file-simpleserver
// 서버객체 및 핸들러 생성
server.createContext("/home", new
WebserverHandler());
// 응답에 대한 처리
sendResponseHeaders
설정
Build.gradle 전체내용 ->
https://gist.github.com/sjyun/62217adf6891abaca6af
Servlet3.0 의존관계 설정
dependencies{
providedCompile
'javax.servlet:javax.servlet-
api:3.1.0'
}
참조하는 저장소 설정
repositories {
jcenter()
mavenCentral()
}
직접적으로 관련있는 설정은 2 가지이다 .
url 설정
3.0
@WebServlet(“ 컨텍
스트명” )
Web.xml 이 없어도
된다 .
2.5
Context 설정
• @WebServlet(name="HelloServlet",
urlPatterns ={"/hello"} )
귀찮다면
@WebServlet("/hello")
https://gist.github.com/sjyun/f5510ac
f1d7952920f63#file-helloservlet
Init 메소드
• Init 메소드는 말 그대로 한번만 호출된
다 .
• Annotation 을 이용한 Hello 예제를 실
행하면 최초 실행 시 한번만 호출되고
doGet 메소드는 웹 페이지를 호출할 때
마다 호출된다 .
초기 파라미터 전달
• @ 을 이용한 context 생성과 init 메소
드를 알았다면 이제 생성 시에 파라미터
를 전달해보자 .
• initParams 를 사용하면 된다 .
Initparam @webInitParam(key, value)
받을 때는
servletConfig.getInitParameter(“key”);
• https://gist.github.com/sjyun/9a13c8
bb7223d5d3b368#file-initparamservlet
• Context 생성때 @ 사용한 것과 마찬가
지로
초기화파라메터를 전달하고자 할 때
<init-param> 대신 사용할 수 있고 init
메소드에서 servletConfig 를 인자로 해
서
값을 전달 받을 수 있다 .
본문내용 출력
• https://gist.github.com/sjyun/0dd739
aed6134179821a#file-helloservlet2
자바는 IO 에 대해서 스트림을 사용하기 때문에
getOutputStream 을 이용해서 브라우저로 전송하거나
Writer 객체를 얻어서 출력할 수 있다 . 여기에서는
Writer 객체로 출력해보자 .
Writer 객체를 얻기 전에 각 서버 상황에 맞춰서
캐릭터셋을 맞춰준다 .
response.setCharacterEncoding("utf-8");
서블릿 흐름요약
• 서블릿이 메모리에 로드되어 있는지 확인한다 .
• 최초 로딩이라면 메모리에 로딩하고 init() 메소드를 호출한다 .
• 서비스메소드를 호출한다 .
• 결과값을 클라이언트에게 리턴한다 .
• 같은 요청일 경우에는 doGet,doPost 만 수행한다 .
LifeCycle 예제
• https://gist.github.com/sjyun/fd1132
18a5b038f20b9e#file-servletlifecycle
Service 메소드는 doGet
과 doPost 중 호출할 메소
드를 결정하고 destory 메소
드는
컨테이너가 종료되었을 때
호출된다 . 즉 브라우저가
닫혀도 호출되지 않지만
컨테이너인 톰캣이 종료되면
호출된다 .
폼데이터 처리
https://gist.github.com/sj
yun/45142420083dc8514013#f
ile-form-html
요청에 대한 응답처리
Form action 값과 서블릿 @ 의
urlPattern 일치여부 확인
Request.getParameter(“ 필드명” ) //name
속성
HTTP 요청방식 요약
• HTTP 데이터 전송방식에 대한 차이
• Get
• 데이터를 쿼리스트링형식으로 전송
•
• Post
• Application/x-www-form-urlencoded:
• 데이터를 스트림형태로 인코딩하여 전달할 때
사용되는 전송방식
•  
• Multipart/form-data: 파일업로드시 사용되는
전송방식
Multipart 데이터처리
• Upload 요청 jsp 생성
• https://gist.github.com/sjyun/61ff5b947a3455e15ffc#file-
gistfile1-java
Css 사용이유는 텍스트필드와 파일전송용 필드를 UI 적으로
구분하기 위해서이다 .
Upload 경로는 실제로 로컬에 해당 경로를 만들거나
가상디렉토리 설정을 통해서 매핑하면 된다 .
Form 설정에 enctype=”multipart/form-data”
Input type=“file”
MultipatConfig 속성 요약
Annotaion 명 설명
@fileSizeThre
shold
fileUpload 시에 메모리에 저장되는 임시파
일 사이즈 크기를 정의합니다 . [ 자료형 :int]
@location 파일이 업로드되었을 때 저장할 디렉토리를
지정합니다 . [ 자료형 : String ]
@maxFileSize 업로드할 파일의 최대사이즈 크기를 지정합
니다 . [ 자료형 :long ]
@maxReques
tSize
request 시에 최대 사이즈를 지정합니다 .
자료형 [long]
Annotation 이 부담된다면 ..
• <multipart-config>
• <location>/tmp</location>
• <max-file-size>20848820</max-file-
size>
• <max-request-size>418018841</max-
request-size>
• <file-size-
threshold>1048576</file-size-
threshold>
• </multipart-config>
업로드 응답처리 서블릿
• https://gist.github.com/sjyun/a4461f3959df82ae713f#file-
uploadservlet-java
• request.getPart 메소드를 이용해서 참조
• request.getPart 메소드를 이용해서 Part 객체를 생성
• getInputStream 메소드를 이용해서 파일의 내용을 저장
• 파일의 이름은 Part 객체에서 getHeader 메소드를 사용하면
header 정보를 이용해서 얻을 수 있다 .
파일선택 후 업로드
• Part Header = {0}form-data;
name="file"; filename=“test.jpg"
• part contentType = image/jpeg
• new File oklogo.jpg c:/upload 에 생
성되었습니다 .
비동기
톰캣 커넥터 유형
  Java Blocking
Connector
BIO
Java Non Blocking
Connecton
NIO
APR/native
Connector
APR
Classname Http11Protocol Http11NioProtocol Http11AprProtocol
Tomcat version 3.x onwards 6.x onwards 5.5.x onwards
Support polling No Yes Yes
Pooling size N/A MaxConnections MaxConnections
Read Http Request Blocking Non Blocking Blocking
Read Http Body Blocking Sim Blocking Blocking
Write Http response Blocking sim Blocking Blocking
Wait for next Request Blocking Non Blocking Non Blocking
SSL Support Java SSL Java SSL Open SSL
SSL Handshake Blocking Non blocking Blocking
Max Connections Max Connections Max Connections maxConnections
comet
• HTTP 프로토콜의 특성상 (stateless) 상태를
지속적으로 유지할 수 없고 연결과 종료를 반복
하는 데 comet 이란 이렇게 클라이언트가 보낸
요청에 대해서 서버가 바로 응답과 연결 종료를
반복해서 처리하지 않고 클라이언트가 보낸 요
청에 대해서 서버가 대기하고 있다가 해당 요청
에 대한 이벤트가 발생하면 응답을 하고 처리하
는 방식입니다 . 기존에 HTTP1.1 프로토콜로 설
정된 서블릿 컨테이너는 요청에 대해서 대기하
지 않고 쓰레드를 생성해서 처리하기 때문에 비
동기방식으로 처리하기 위해서는 프로토콜 설정
을 NIO 로 변경하여야 한다 .
Server.xml 비동기 설정
• <connector connectiontimeout="20000"
port="8080" protocol="HTTP/1.1"
redirectport="8443"/>
• -->
• <!— 변경한 내용
• <Connector URIEncoding="UTF-8"
connectionTimeout="20000" port="8080"
•
protocol="org.apache.coyote.http11.Http11N
ioProtocol" redirectPort="8443"
useComet="true"/>
• ….. 중략
서블릿 비동기 설정
• @WebServlet(name="AsyncServlet",
urlPatterns="/async",
asyncSupported=true)
• AsyncContext 인터페이스
• 비동기 요청을 처리하기 위한 Context 로
서 , AsyncContext 인터페이스를 이용해서
request 에 대한 timeout 을 지정하거나 처
리를 완료했을 때 complete 메소드를 호출
할 수 있다 .
HttpServletRequest 의
startAsync 메소드
• AsyncContext 를 이용해서 초기화된
Request, response 를 인자로 받아서 비
동기요청에 대한 준비를 시작한다 .
비동기서블릿 작성
https://gist.github.com/sjyun/b329e07ce490ee484d97#file-asyncservlet
기존에 사용했던 WebServlet Annotation 외에 asyncSupported 라는 속성을 추가했
다 . 이 속성을 true 로 하면 servlet3.0 을 지원하는 서블릿컨테이너에서 작성한
서블릿 코드는 비동기처리가 가능해진다 .
요청을 대기해야 함으로 서블릿을 먼저 실행시키자 .
Client 페이지 작성
• https://gist.github.com/sjyun/847f60
89141df4703e96#file-async-client
클라이언트 실행
비동기 테스트를 위해서 ..
2 개를 띄우자 .
현재내용 하단에 내용이 출력될것이다 .
• 끝

Weitere ähnliche Inhalte

Was ist angesagt?

WebSocket 기반 쌍방향 메시징
WebSocket 기반 쌍방향 메시징WebSocket 기반 쌍방향 메시징
WebSocket 기반 쌍방향 메시징
trustinlee
 

Was ist angesagt? (20)

SpringMVC 전체 흐름 알아보기
SpringMVC 전체 흐름 알아보기SpringMVC 전체 흐름 알아보기
SpringMVC 전체 흐름 알아보기
 
세미나 Spring mybatis
세미나 Spring mybatis세미나 Spring mybatis
세미나 Spring mybatis
 
07.실행환경 교육교재(표준프레임워크 세부 적용기준)
07.실행환경 교육교재(표준프레임워크 세부 적용기준)07.실행환경 교육교재(표준프레임워크 세부 적용기준)
07.실행환경 교육교재(표준프레임워크 세부 적용기준)
 
04.[참고]개발환경 실습교재
04.[참고]개발환경 실습교재04.[참고]개발환경 실습교재
04.[참고]개발환경 실습교재
 
[제14회 JCO 컨퍼런스] 개발자를 위한 서버이중화 by JAVACAFE
[제14회 JCO 컨퍼런스] 개발자를 위한 서버이중화 by JAVACAFE  [제14회 JCO 컨퍼런스] 개발자를 위한 서버이중화 by JAVACAFE
[제14회 JCO 컨퍼런스] 개발자를 위한 서버이중화 by JAVACAFE
 
Spring 3.1에서 ehcache 활용 전략
Spring 3.1에서 ehcache 활용 전략Spring 3.1에서 ehcache 활용 전략
Spring 3.1에서 ehcache 활용 전략
 
Apache http component
Apache http componentApache http component
Apache http component
 
Presentation1
Presentation1Presentation1
Presentation1
 
자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)
자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)
자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)
 
WebSocket 기반 쌍방향 메시징
WebSocket 기반 쌍방향 메시징WebSocket 기반 쌍방향 메시징
WebSocket 기반 쌍방향 메시징
 
막하는 스터디 첫 번째 만남 Node.js
막하는 스터디 첫 번째 만남 Node.js막하는 스터디 첫 번째 만남 Node.js
막하는 스터디 첫 번째 만남 Node.js
 
자바 웹 개발 시작하기 (2주차 : 인터넷과 웹 어플리케이션의 이해)
자바 웹 개발 시작하기 (2주차 : 인터넷과 웹 어플리케이션의 이해)자바 웹 개발 시작하기 (2주차 : 인터넷과 웹 어플리케이션의 이해)
자바 웹 개발 시작하기 (2주차 : 인터넷과 웹 어플리케이션의 이해)
 
HOONS닷넷 오픈소스 프로젝트 Part1.
HOONS닷넷 오픈소스 프로젝트 Part1.HOONS닷넷 오픈소스 프로젝트 Part1.
HOONS닷넷 오픈소스 프로젝트 Part1.
 
Rb vs wp 로드타임 성능비교
Rb vs wp 로드타임 성능비교Rb vs wp 로드타임 성능비교
Rb vs wp 로드타임 성능비교
 
막하는스터디 두번째만남 Express(20151025)
막하는스터디 두번째만남 Express(20151025)막하는스터디 두번째만남 Express(20151025)
막하는스터디 두번째만남 Express(20151025)
 
Express 프레임워크
Express 프레임워크Express 프레임워크
Express 프레임워크
 
스프링군살없이세팅하기(The way to setting the Spring framework for web.)
스프링군살없이세팅하기(The way to setting the Spring framework for web.)스프링군살없이세팅하기(The way to setting the Spring framework for web.)
스프링군살없이세팅하기(The way to setting the Spring framework for web.)
 
03.모바일 실습교재(모바일 공통컴포넌트 실습)
03.모바일 실습교재(모바일 공통컴포넌트 실습)03.모바일 실습교재(모바일 공통컴포넌트 실습)
03.모바일 실습교재(모바일 공통컴포넌트 실습)
 
Web Socket
Web SocketWeb Socket
Web Socket
 
What is the meteor?
What is the meteor?What is the meteor?
What is the meteor?
 

Andere mochten auch

F3 네이버오픈api만드는매쉬업
F3 네이버오픈api만드는매쉬업F3 네이버오픈api만드는매쉬업
F3 네이버오픈api만드는매쉬업
NAVER D2
 
시맨틱한 HTML5 마크업 구조 설계, 어떻게 할까?
시맨틱한 HTML5 마크업 구조 설계, 어떻게 할까?시맨틱한 HTML5 마크업 구조 설계, 어떻게 할까?
시맨틱한 HTML5 마크업 구조 설계, 어떻게 할까?
Toby Yun
 
[2014널리세미나] 시맨틱한 HTML5 마크업 구조 설계, 어떻게 할까?
[2014널리세미나] 시맨틱한 HTML5 마크업 구조 설계, 어떻게 할까?[2014널리세미나] 시맨틱한 HTML5 마크업 구조 설계, 어떻게 할까?
[2014널리세미나] 시맨틱한 HTML5 마크업 구조 설계, 어떻게 할까?
Nts Nuli
 
네이버 오픈세미나 백엔드_아키텍쳐
네이버 오픈세미나 백엔드_아키텍쳐네이버 오픈세미나 백엔드_아키텍쳐
네이버 오픈세미나 백엔드_아키텍쳐
NAVER D2
 

Andere mochten auch (20)

HeadFisrt Servlet&JSP Chapter 2
HeadFisrt Servlet&JSP Chapter 2HeadFisrt Servlet&JSP Chapter 2
HeadFisrt Servlet&JSP Chapter 2
 
Hellotutorial
HellotutorialHellotutorial
Hellotutorial
 
Playnode 2016 조승연
Playnode 2016 조승연Playnode 2016 조승연
Playnode 2016 조승연
 
1주차 자기개발 항목(jsp 컴파일)
1주차 자기개발  항목(jsp 컴파일)1주차 자기개발  항목(jsp 컴파일)
1주차 자기개발 항목(jsp 컴파일)
 
크리테오 설명서
크리테오 설명서크리테오 설명서
크리테오 설명서
 
로그인은 어떻게 동작하나?
로그인은 어떻게 동작하나?로그인은 어떻게 동작하나?
로그인은 어떻게 동작하나?
 
프론트엔드 개발자를 위한 크롬 렌더링 성능 인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능 인자 이해하기프론트엔드 개발자를 위한 크롬 렌더링 성능 인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능 인자 이해하기
 
F3 네이버오픈api만드는매쉬업
F3 네이버오픈api만드는매쉬업F3 네이버오픈api만드는매쉬업
F3 네이버오픈api만드는매쉬업
 
HeadFisrt Servlet&JSP Chapter 1
HeadFisrt Servlet&JSP Chapter 1HeadFisrt Servlet&JSP Chapter 1
HeadFisrt Servlet&JSP Chapter 1
 
웹을 지탱하는 기술
웹을 지탱하는 기술웹을 지탱하는 기술
웹을 지탱하는 기술
 
Ndc14 분산 서버 구축의 ABC
Ndc14 분산 서버 구축의 ABCNdc14 분산 서버 구축의 ABC
Ndc14 분산 서버 구축의 ABC
 
시맨틱한 HTML5 마크업 구조 설계, 어떻게 할까?
시맨틱한 HTML5 마크업 구조 설계, 어떻게 할까?시맨틱한 HTML5 마크업 구조 설계, 어떻게 할까?
시맨틱한 HTML5 마크업 구조 설계, 어떻게 할까?
 
개발자들 오리엔테이션
개발자들 오리엔테이션개발자들 오리엔테이션
개발자들 오리엔테이션
 
[2014널리세미나] 시맨틱한 HTML5 마크업 구조 설계, 어떻게 할까?
[2014널리세미나] 시맨틱한 HTML5 마크업 구조 설계, 어떻게 할까?[2014널리세미나] 시맨틱한 HTML5 마크업 구조 설계, 어떻게 할까?
[2014널리세미나] 시맨틱한 HTML5 마크업 구조 설계, 어떻게 할까?
 
Jsp/Servlet
Jsp/ServletJsp/Servlet
Jsp/Servlet
 
톰캣 #01-소개
톰캣 #01-소개톰캣 #01-소개
톰캣 #01-소개
 
JSP 빠르게 시작하기
JSP 빠르게 시작하기JSP 빠르게 시작하기
JSP 빠르게 시작하기
 
[D2 CAMPUS]웹 개발자의 스펙 : HTTP
[D2 CAMPUS]웹 개발자의 스펙 : HTTP[D2 CAMPUS]웹 개발자의 스펙 : HTTP
[D2 CAMPUS]웹 개발자의 스펙 : HTTP
 
더 빠른 웹을 위해: HTTP/2
더 빠른 웹을 위해: HTTP/2더 빠른 웹을 위해: HTTP/2
더 빠른 웹을 위해: HTTP/2
 
네이버 오픈세미나 백엔드_아키텍쳐
네이버 오픈세미나 백엔드_아키텍쳐네이버 오픈세미나 백엔드_아키텍쳐
네이버 오픈세미나 백엔드_아키텍쳐
 

Ähnlich wie Servlet3

[오픈소스컨설팅]Tomcat6&7 How To
[오픈소스컨설팅]Tomcat6&7 How To[오픈소스컨설팅]Tomcat6&7 How To
[오픈소스컨설팅]Tomcat6&7 How To
Ji-Woong Choi
 
Servlet&jsp 1장
Servlet&jsp 1장Servlet&jsp 1장
Servlet&jsp 1장
JeongBong Kim
 
[Hello world 오픈세미나]open api client개발
[Hello world 오픈세미나]open api client개발[Hello world 오픈세미나]open api client개발
[Hello world 오픈세미나]open api client개발
NAVER D2
 

Ähnlich wie Servlet3 (20)

[오픈소스컨설팅]Tomcat6&7 How To
[오픈소스컨설팅]Tomcat6&7 How To[오픈소스컨설팅]Tomcat6&7 How To
[오픈소스컨설팅]Tomcat6&7 How To
 
DGMIT 제3회 R&D 컨퍼런스 r&d1 team : HTTP 프로토콜 개요
DGMIT 제3회 R&D 컨퍼런스 r&d1 team : HTTP 프로토콜 개요DGMIT 제3회 R&D 컨퍼런스 r&d1 team : HTTP 프로토콜 개요
DGMIT 제3회 R&D 컨퍼런스 r&d1 team : HTTP 프로토콜 개요
 
Node.js 첫걸음
Node.js 첫걸음Node.js 첫걸음
Node.js 첫걸음
 
3장
3장3장
3장
 
200.마이크로서비스에 적합한 오픈소스 WAS는 무엇?
200.마이크로서비스에 적합한 오픈소스 WAS는 무엇?200.마이크로서비스에 적합한 오픈소스 WAS는 무엇?
200.마이크로서비스에 적합한 오픈소스 WAS는 무엇?
 
웹소켓 (WebSocket)
웹소켓 (WebSocket)웹소켓 (WebSocket)
웹소켓 (WebSocket)
 
JSP 프로그래밍 #03 서블릿
JSP 프로그래밍 #03 서블릿JSP 프로그래밍 #03 서블릿
JSP 프로그래밍 #03 서블릿
 
L4교육자료
L4교육자료L4교육자료
L4교육자료
 
파이썬 웹 프로그래밍 2탄
파이썬 웹 프로그래밍 2탄 파이썬 웹 프로그래밍 2탄
파이썬 웹 프로그래밍 2탄
 
4-2. ajax
4-2. ajax4-2. ajax
4-2. ajax
 
Mcollective orchestration tool 소개
Mcollective orchestration tool 소개Mcollective orchestration tool 소개
Mcollective orchestration tool 소개
 
JSP 프로그래밍 #01 웹 프로그래밍
JSP 프로그래밍 #01 웹 프로그래밍JSP 프로그래밍 #01 웹 프로그래밍
JSP 프로그래밍 #01 웹 프로그래밍
 
Servlet&jsp 1장
Servlet&jsp 1장Servlet&jsp 1장
Servlet&jsp 1장
 
[Hello world 오픈세미나]open api client개발
[Hello world 오픈세미나]open api client개발[Hello world 오픈세미나]open api client개발
[Hello world 오픈세미나]open api client개발
 
#22.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
#22.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...#22.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
#22.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
 
ChainHero web application hyperledger fabric analysis v 1.0
ChainHero web application hyperledger fabric analysis v 1.0ChainHero web application hyperledger fabric analysis v 1.0
ChainHero web application hyperledger fabric analysis v 1.0
 
HTTP 완벽가이드 - ch5. web server
HTTP 완벽가이드 - ch5. web serverHTTP 완벽가이드 - ch5. web server
HTTP 완벽가이드 - ch5. web server
 
Http 헤더
Http 헤더Http 헤더
Http 헤더
 
톰캣 운영 노하우
톰캣 운영 노하우톰캣 운영 노하우
톰캣 운영 노하우
 
Spring boot actuator
Spring boot   actuatorSpring boot   actuator
Spring boot actuator
 

Mehr von 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
 
Design pattern 옵저버
Design pattern 옵저버Design pattern 옵저버
Design pattern 옵저버
 
docker_quick_start
docker_quick_startdocker_quick_start
docker_quick_start
 
Rabbitmq install한글
Rabbitmq install한글Rabbitmq install한글
Rabbitmq install한글
 
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
 
Servlet design pattern
Servlet design patternServlet design pattern
Servlet design pattern
 

Kürzlich hochgeladen

Kürzlich hochgeladen (8)

JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
 
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
 
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
 
JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례
 
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
 
데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법
 
JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!
 
공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화
 

Servlet3

  • 2. 간단 웹서버를 통한 흐름파악 Sun.net.httpserver 를 통해서 요청에 대한 처리를 알아보자 . 1.웹서버 객체 생성 ( 이때 포트 점유 ) 2.컨텍스트 생성 3.핸들러 생성 4.핸들러에서 응답이 정상일 경우 Body data 반환 5. 핸들러에서 응답이 오류일 경우 오류코드 반환
  • 3. Simple web server https://gist.github.com/sjyun/cab188a22a755 914ce90#file-simpleserver // 서버객체 및 핸들러 생성 server.createContext("/home", new WebserverHandler()); // 응답에 대한 처리 sendResponseHeaders
  • 4. 설정 Build.gradle 전체내용 -> https://gist.github.com/sjyun/62217adf6891abaca6af Servlet3.0 의존관계 설정 dependencies{ providedCompile 'javax.servlet:javax.servlet- api:3.1.0' } 참조하는 저장소 설정 repositories { jcenter() mavenCentral() } 직접적으로 관련있는 설정은 2 가지이다 .
  • 5. url 설정 3.0 @WebServlet(“ 컨텍 스트명” ) Web.xml 이 없어도 된다 . 2.5
  • 6. Context 설정 • @WebServlet(name="HelloServlet", urlPatterns ={"/hello"} ) 귀찮다면 @WebServlet("/hello") https://gist.github.com/sjyun/f5510ac f1d7952920f63#file-helloservlet
  • 7.
  • 8. Init 메소드 • Init 메소드는 말 그대로 한번만 호출된 다 . • Annotation 을 이용한 Hello 예제를 실 행하면 최초 실행 시 한번만 호출되고 doGet 메소드는 웹 페이지를 호출할 때 마다 호출된다 .
  • 9.
  • 10. 초기 파라미터 전달 • @ 을 이용한 context 생성과 init 메소 드를 알았다면 이제 생성 시에 파라미터 를 전달해보자 . • initParams 를 사용하면 된다 . Initparam @webInitParam(key, value) 받을 때는 servletConfig.getInitParameter(“key”);
  • 12. • Context 생성때 @ 사용한 것과 마찬가 지로 초기화파라메터를 전달하고자 할 때 <init-param> 대신 사용할 수 있고 init 메소드에서 servletConfig 를 인자로 해 서 값을 전달 받을 수 있다 .
  • 13. 본문내용 출력 • https://gist.github.com/sjyun/0dd739 aed6134179821a#file-helloservlet2 자바는 IO 에 대해서 스트림을 사용하기 때문에 getOutputStream 을 이용해서 브라우저로 전송하거나 Writer 객체를 얻어서 출력할 수 있다 . 여기에서는 Writer 객체로 출력해보자 . Writer 객체를 얻기 전에 각 서버 상황에 맞춰서 캐릭터셋을 맞춰준다 . response.setCharacterEncoding("utf-8");
  • 14. 서블릿 흐름요약 • 서블릿이 메모리에 로드되어 있는지 확인한다 . • 최초 로딩이라면 메모리에 로딩하고 init() 메소드를 호출한다 . • 서비스메소드를 호출한다 . • 결과값을 클라이언트에게 리턴한다 . • 같은 요청일 경우에는 doGet,doPost 만 수행한다 .
  • 15. LifeCycle 예제 • https://gist.github.com/sjyun/fd1132 18a5b038f20b9e#file-servletlifecycle Service 메소드는 doGet 과 doPost 중 호출할 메소 드를 결정하고 destory 메소 드는 컨테이너가 종료되었을 때 호출된다 . 즉 브라우저가 닫혀도 호출되지 않지만 컨테이너인 톰캣이 종료되면 호출된다 .
  • 17. 요청에 대한 응답처리 Form action 값과 서블릿 @ 의 urlPattern 일치여부 확인 Request.getParameter(“ 필드명” ) //name 속성
  • 18. HTTP 요청방식 요약 • HTTP 데이터 전송방식에 대한 차이 • Get • 데이터를 쿼리스트링형식으로 전송 • • Post • Application/x-www-form-urlencoded: • 데이터를 스트림형태로 인코딩하여 전달할 때 사용되는 전송방식 •   • Multipart/form-data: 파일업로드시 사용되는 전송방식
  • 20. • Upload 요청 jsp 생성 • https://gist.github.com/sjyun/61ff5b947a3455e15ffc#file- gistfile1-java Css 사용이유는 텍스트필드와 파일전송용 필드를 UI 적으로 구분하기 위해서이다 . Upload 경로는 실제로 로컬에 해당 경로를 만들거나 가상디렉토리 설정을 통해서 매핑하면 된다 . Form 설정에 enctype=”multipart/form-data” Input type=“file”
  • 21. MultipatConfig 속성 요약 Annotaion 명 설명 @fileSizeThre shold fileUpload 시에 메모리에 저장되는 임시파 일 사이즈 크기를 정의합니다 . [ 자료형 :int] @location 파일이 업로드되었을 때 저장할 디렉토리를 지정합니다 . [ 자료형 : String ] @maxFileSize 업로드할 파일의 최대사이즈 크기를 지정합 니다 . [ 자료형 :long ] @maxReques tSize request 시에 최대 사이즈를 지정합니다 . 자료형 [long]
  • 22. Annotation 이 부담된다면 .. • <multipart-config> • <location>/tmp</location> • <max-file-size>20848820</max-file- size> • <max-request-size>418018841</max- request-size> • <file-size- threshold>1048576</file-size- threshold> • </multipart-config>
  • 23. 업로드 응답처리 서블릿 • https://gist.github.com/sjyun/a4461f3959df82ae713f#file- uploadservlet-java • request.getPart 메소드를 이용해서 참조 • request.getPart 메소드를 이용해서 Part 객체를 생성 • getInputStream 메소드를 이용해서 파일의 내용을 저장 • 파일의 이름은 Part 객체에서 getHeader 메소드를 사용하면 header 정보를 이용해서 얻을 수 있다 .
  • 24. 파일선택 후 업로드 • Part Header = {0}form-data; name="file"; filename=“test.jpg" • part contentType = image/jpeg • new File oklogo.jpg c:/upload 에 생 성되었습니다 .
  • 25. 비동기 톰캣 커넥터 유형   Java Blocking Connector BIO Java Non Blocking Connecton NIO APR/native Connector APR Classname Http11Protocol Http11NioProtocol Http11AprProtocol Tomcat version 3.x onwards 6.x onwards 5.5.x onwards Support polling No Yes Yes Pooling size N/A MaxConnections MaxConnections Read Http Request Blocking Non Blocking Blocking Read Http Body Blocking Sim Blocking Blocking Write Http response Blocking sim Blocking Blocking Wait for next Request Blocking Non Blocking Non Blocking SSL Support Java SSL Java SSL Open SSL SSL Handshake Blocking Non blocking Blocking Max Connections Max Connections Max Connections maxConnections
  • 26. comet • HTTP 프로토콜의 특성상 (stateless) 상태를 지속적으로 유지할 수 없고 연결과 종료를 반복 하는 데 comet 이란 이렇게 클라이언트가 보낸 요청에 대해서 서버가 바로 응답과 연결 종료를 반복해서 처리하지 않고 클라이언트가 보낸 요 청에 대해서 서버가 대기하고 있다가 해당 요청 에 대한 이벤트가 발생하면 응답을 하고 처리하 는 방식입니다 . 기존에 HTTP1.1 프로토콜로 설 정된 서블릿 컨테이너는 요청에 대해서 대기하 지 않고 쓰레드를 생성해서 처리하기 때문에 비 동기방식으로 처리하기 위해서는 프로토콜 설정 을 NIO 로 변경하여야 한다 .
  • 27. Server.xml 비동기 설정 • <connector connectiontimeout="20000" port="8080" protocol="HTTP/1.1" redirectport="8443"/> • --> • <!— 변경한 내용 • <Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8080" • protocol="org.apache.coyote.http11.Http11N ioProtocol" redirectPort="8443" useComet="true"/> • ….. 중략
  • 28. 서블릿 비동기 설정 • @WebServlet(name="AsyncServlet", urlPatterns="/async", asyncSupported=true) • AsyncContext 인터페이스 • 비동기 요청을 처리하기 위한 Context 로 서 , AsyncContext 인터페이스를 이용해서 request 에 대한 timeout 을 지정하거나 처 리를 완료했을 때 complete 메소드를 호출 할 수 있다 .
  • 29. HttpServletRequest 의 startAsync 메소드 • AsyncContext 를 이용해서 초기화된 Request, response 를 인자로 받아서 비 동기요청에 대한 준비를 시작한다 .
  • 30. 비동기서블릿 작성 https://gist.github.com/sjyun/b329e07ce490ee484d97#file-asyncservlet 기존에 사용했던 WebServlet Annotation 외에 asyncSupported 라는 속성을 추가했 다 . 이 속성을 true 로 하면 servlet3.0 을 지원하는 서블릿컨테이너에서 작성한 서블릿 코드는 비동기처리가 가능해진다 . 요청을 대기해야 함으로 서블릿을 먼저 실행시키자 .
  • 31. Client 페이지 작성 • https://gist.github.com/sjyun/847f60 89141df4703e96#file-async-client
  • 32. 클라이언트 실행 비동기 테스트를 위해서 .. 2 개를 띄우자 . 현재내용 하단에 내용이 출력될것이다 .