2. 간단 웹서버를 통한 흐름파악
Sun.net.httpserver 를 통해서 요청에 대한
처리를 알아보자 .
1.웹서버 객체 생성 ( 이때 포트 점유 )
2.컨텍스트 생성
3.핸들러 생성
4.핸들러에서 응답이 정상일 경우
Body data 반환
5. 핸들러에서 응답이 오류일 경우
오류코드 반환
8. Init 메소드
• Init 메소드는 말 그대로 한번만 호출된
다 .
• Annotation 을 이용한 Hello 예제를 실
행하면 최초 실행 시 한번만 호출되고
doGet 메소드는 웹 페이지를 호출할 때
마다 호출된다 .
9.
10. 초기 파라미터 전달
• @ 을 이용한 context 생성과 init 메소
드를 알았다면 이제 생성 시에 파라미터
를 전달해보자 .
• initParams 를 사용하면 된다 .
Initparam @webInitParam(key, value)
받을 때는
servletConfig.getInitParameter(“key”);
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]
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 로 변경하여야 한다 .
28. 서블릿 비동기 설정
• @WebServlet(name="AsyncServlet",
urlPatterns="/async",
asyncSupported=true)
• AsyncContext 인터페이스
• 비동기 요청을 처리하기 위한 Context 로
서 , AsyncContext 인터페이스를 이용해서
request 에 대한 timeout 을 지정하거나 처
리를 완료했을 때 complete 메소드를 호출
할 수 있다 .