SlideShare a Scribd company logo
3 ███████████
3
이 명 진, 최 영 관
Powered by http://www.jabook.org
2nd
Edition
소설같은
JSP
3장 서블릿
3.1 서블릿의 동작 원리
3.1.1 웹 서버의 역할
▣ 일반적인 HTTP 요청 시
◈ 클라이언트의 요청이 전달되면 해당 HTML 문서가 웹 서버에 존재하는지
검사한 후 직접 서비스가 이루어진다.
▣ 서블릿 요청 시
◈ 웹 서버는 클라이언트로부터 전달된 요청 정보를 묶어서 서블릿 컨테이너
(Servlet Container)에게 전달
◈ 서블릿 컨테이너는 해당 서블릿을 검색한 후 서블릿이 존재하면 서블릿을
실행하여 클라이언트의 요청을 처리하고 응답해 준다.
Client
Web Server Servlet Container
Servlet
Servlet 클라이언트의 요청 종
류에 따라 웹 서버는
자신이 서비스를 해주
거나 서블릿 컨테이너
를 호출하여 서블릿을
실행한 후 응답한다.
HTML
HTML
3.1.2 서블릿 컨테이너의 역할
▣ 요청 및 응답 객체 생성
◈ 웹 서버로부터 넘겨 받은 요청 정보를 이용해서 HttpServletRequest 객체와
HttpServletResponse 객체 생성
▣ 서블릿 객체 생성
◈ 서블릿 객체가 서블릿 컨테이너에 로딩되어 있다면, 바로 해당 서블릿 객체
생성
◈ 서블릿 객체가 서블릿 컨테이너에 로딩되어 있지 않다면, 해당 서블릿의 클
래스 파일(.class)을 로딩한 후 객체 생성
▣ 서블릿의 실행
◈ 사용자가 작성한 서블릿의 doGet() 메소드 호출
HttpServletRequest req = new HttpServletRequest();
HttpServletResponse res = new HttpServletRespone();
MyServlet m = new MyServlet();
m.doGet(req, res);
3.1.3 프로그래머의 역할 (1)
▣ HttpServlet 클래스 상속
◈ 서블릿이 되기 위해서는 HttpServlet을 반드시 상속해야 한다.
◈ 서블릿 클래스는 반드시 public이어야 한다.
▣ doGet() 메소드 재정의
◈ doGet() 메소드의 매개변수 HttpServletRequest와 HttpServletResponse가 들
어 올 것이라는 가정하에 클라이언트로 서비스할 프로그램 작성
public class MyServlet extends HttpServlet {
...
}
public void doGet(HttpServletRequest req, HttpServletResponse res) {
…
}
서블릿 클래스는
누구나 호출해서
쓸 수 있는 public이
어야만 한다. 잊지
말자.
3.1.4 프로그래머의 역할 (2)
▣ doGet() 메소드의 코드 작성
◈ HttpServletResponse 객체의 한글 처리 지정
◈ HttpServletResponse 객체로부터 클라이언트 스트림 얻기
◈ 클라이언트의 요청 정보인 HttpServletRequest의 정보 추출
res.setContentType("text/html;charset=euc-kr");
PrintWriter out = res.getWriter();
out.println(req.getProtocol() + "<br>");
out.println(req.getRemoteAddr() + "<br>");
out.println(req.getRemoteHost() + "<br>");
out.println(req.getScheme() + "<br>");
out.println(req.getServerName() + "<br>");
out.println(req.getServerPort() + "<br>");
3.1.5 MyServlet 실행
Client
WebServer
서블릿 요청
서블릿 응답
http://localhost:8080/MySample/servlet/MyServlet
Servlet Container
MyServlet
doGet() 메소드 호출
invoke() 호출
MyServlet 객체가
로딩되어 있지 않
다면 MyServlet 객
체를 로딩한다.
MyServlet 검색
MyServlet 객체
생성 및 로딩
요청 정보를 이용해서
요청, 응답 객체 생성
invoker
없을 경우있을 경우
3.2 HttpServlet의 동작과 구현
3.2.1 서블릿의 상속 구조
ServletServletConfig Serializable
GenericServlet
HttpServlet
HTTP 프로토콜을 위한 HTTP 전용 서블릿
서블릿 환경을 위한 인터페이스 서블릿 기능 구현을 위한 인터페이스 서블릿 직렬화를 위한 인터페이스
interface interface interface
abstract
abstract
HttpServlet
구현
일반적인 네트워크 프로토콜을 위한 추상 서블릿
서블릿을 위해 필
요한 인터페이스들
을 구현해서 만든
추상 클래스
GenericServlet 추상 클
래스를 상속 받아
HTTP 프로토콜에 맞
게 만든 추상 클래스
가 바로 HttpServlet 클
래스이다.
Servlet Container
3.2.2 HttpServlet 클래스의 동작 과정
▣ HttpServlet 클래스는 GenericServlet 클래스를 상속받아 HTTP 프로토
콜에 맞게 작성한 클래스이다.
Web Server
Get Request
Post Request
Response
Response
extends HttpServlet
service()
doGet()
doPost()
HTTP 프로토콜을 통해 서
블릿 컨테이너에 요청이
들어오면 HttpServlet 클래
스의 service() 메소드가 가
장 먼저 호출된다.
service() 메소드에
서 HTTP의 요청
방식에 따라
doGet()이나
doPost() 메소드를
호출한다.
3.2.3 GET 방식과 POST 방식
▣ GET 방식
◈ URL에 전달하고자 하는 정보를 포함해서 정보를 전달하는 방법
◈ 단점
– 정보가 노출되므로 보안 취약하다.
– 보내는 정보의 크기가 1024바이트로 제한된다
▣ POST 방식
◈ 전달하고자 하는 정보를 첨부파일 형태로 포함해서 전송하는 방법
◈ 장점
– URL의 주소 창에 보내는 정보에 대한 노출이 없기 때문에 보안성이 좋다.
– 보내는 정보의 크기에 제한이 없다.
요청_주소?파라미터이름=파라미터값&파라미터이름=파라미터값&...
GET 방식과 달리
파라미터 정보가
URL에 포함되지
않고 전달된다.
GET 방식은 URL 뒤
에 "?" 기호와 파라미
터 이름, "=" 기호, 그리
고 파라미터 값을 이용
해서 호출한다.
3.2.4 GET 방식 처리를 위한 코드 작성하기
▣ doGet() 메소드 재정의
▣ doGet() 메소드의 코드 작성
◈ 파라미터 값 추출
public void doGet(HttpServletRequest req, HttpServletResponse res) {
…
}
String helloName = req.getParameter("name");
서블릿으로 전달된
HttpServletRequest 객체
의 getParameter() 메소
드를 이용해서 파라미
터의 값을 추출할 수 있
다.
3.2.5 ExcuteGetServlet.html 작성하기 (1)
▣ <form> 태그
◈ 클라이언트에서 서버로 값을 전달하고자 할 때 사용하는 태그
▣ <form> 태그의 속성
◈ action 속성
– 사용자의 요청정보를 받아서 처리하는 CGI 프로그램의 위치를 지정
◈ method 속성
– 사용자의 요청정보를 어떤 방식으로 CGI 프로그램에 전달할 것인지를 지정
– GET과 POST 중 하나를 지정
<form action ="/MySample/servlet/HttpGetServlet" method="GET">
…
</form>
다음으로 실행될 서블릿의 위치를 지정 메시지 전달 방식
3.2.6 ExcuteGetServlet.html 작성하기 (2)
▣ <input> 태그
◈ 텍스트 상자나 버튼을 만들기 위한 태그
◈ <input> 태그의 속성
– type 속성
• <input> 태그의 종류를 지정(text | submit)
– name 속성
• <input> 태그의 이름을 지정
• 파라미터 이름으로 사용된다.
– value 속성
• 버튼에 나타날 값을 지정
<input type="text" name="name" >
<input type="submit" value="Submit">
텍스트 박스 파라미터 이름
전송 버튼 버튼 이름
<input> 태그의 type 속
성을 submit으로 주면 버
튼이 만들어지며, 이 버
튼을 누르면 <form> 태
그의 action 속성에서 지
정된 서블릿이 실행된다.
3.2.7 POST 방식 처리를 위한 코드 작성하기
▣ doPost() 메소드 재정의
▣ doPost() 메소드의 코드 작성
◈ 파라미터 값 추출
public void doPost(HttpServletRequest req, HttpServletResponse res) {
…
}
String helloName = req.getParameter("name");
서블릿으로 전달된
HttpServletRequest 객체
의 getParameter() 메소
드를 이용해서 파라미
터의 값을 추출할 수 있
다.
3.2.8 ExcutePostServlet.html 작성하기
▣ <form> 태그
▣ <input> 태그
<form action ="/MySample/servlet/HttpPostServlet" method="POST">
…
</form>
다음으로 실행될 서블릿의 위치를 지정 메시지 전달 방식
<input type="text" name="name" >
<input type="submit" value="Submit">
텍스트 박스 파라미터 이름
전송 버튼 버튼 이름
<form> 태그의
method 속성 값이
POST이므로 POST
방식을 이용해서
파라미터가 전달된
다.
3.3 HttpServletRequest와 HttpServletResponse
3.3.1 서블릿 작업의 중심
▣ HttpServletRequest와 HttpServletResponse 객체
◈ doGet()과 doPost() 메소드의 매개변수로 넘어오는 인자 타입
◈ 클라이언트가 요청할 때 request와 response를 클래스의 형태로 맵핑
– 클라이언트의 요청 → HttpServletRequest request
– 클라이언트의 응답 → HttpServletResponse response
Client
Request
Response
Web Server
Servlet Container
extends HttpServlet
doGet(request, response)
doPost(request, response)
service(request, response)
HttpServletRequest
HttpServletResponse
클라이언트의 요
청 방식에 따라
doGet()과 doPost()
메소드가 알아서
호출된다.
3.3.2 HttpServletRequest와 HttpServletResponse의 개요
▣ HttpServletRequest 객체
◈ 클라이언트의 모든 요청 정보를 포함
◈ 요청 HTTP 헤더 정보
◈ 서블릿으로 전달된 파라미터 정보
◈ InputStream 형태의 클라이언트로부터 전송된 데이터
◈ 세션(Session)과 쿠키(Cookie)와 같은 기타 정보
▣ HttpServletResponse 객체
◈ 클라이언트로 보내지는 응답 정보를 포함
◈ 응답 HTTP 헤더 정보
◈ OutputStream 형태의 클라이언트로 전송되는 데이터
◈ 세션과 쿠기 설정
3.3.3 간단한 request와 response 예제
▣ HTML 작성
▣ 서블릿 작성
◈ Get 방식의 요청을 처리하기 위한 doGet() 메소드 재정의
◈ request 객체로부터 파라미터 값 얻기
◈ response 객체로부터 응답을 위한 스트림 객체 생성
public void doGet(HttpServletRequest request, HttpServletResponse response)
클라이언트의 요청 객체 클라이언트로의 응답 객체
String helloName = request.getParameter("name");
파라미터 이름
PrintWriter out = response.getWriter();
<form action ="/MySample/servlet/SimpleResponse" method="GET">
<input type="text" name="name" >
<input type="submit" value="submit">
</form>
3.3.4 간단한 request와 response의 동작과정
Client
Servlet Container
HttpServletRequest
PrintWriter
SimpleResponse Servlet
doGet( request , response )request response
Response
SimpleResponse?name=Grace
HttpServletResponse
Request
response.getWriter()
3.3.5 서블릿의 한글 문제
▣ response 객체의 한글 인코딩
◈ 응답으로 전송되는 response 객체의 한글 표현을 위해 한글 인코딩을 설정
해 주어야 한다.
▣ request 객체의 한글 인코딩
◈ 클라이언트로부터 POST 방식으로 전송된 요청 정보는 한글 인코딩을 설정
해 주어야 제대로 사용할 수 있다.
response.setContentType("text/html;charset=euc-kr");
request.setCharacterEncoding("euc-kr");
Client
Request
Response
Servlet Container
HttpServletRequest
HttpServletResponse
Servlet
response 객체 인코딩
request 객체 인코딩
3.4 HttpServletRequest 객체
3.4.1 HTTP 요청 메시지의 구조
▣ HTTP 요청 메시지의 구성
◈ Request 요청 라인
◈ 헤더
◈ Entity Body
Request Line
Header Line
Entity Body
method URL version
Header_Field_Name : value
Header_Field_Name : value
…
Header_Field_Name : value
Request_Data
HTTP 프로토콜을
통해 전달되는 요
청 메시지는 아래
와 같은 구조를
갖는다.
3.4.2 HTTP 요청 메시지의 헤더 출력
▣ request 객체로부터 헤더의 이름 집합(Enumeration) 얻기
▣ 헤더 이름 집합으로부터 헤더 얻기
Enumeration headerNames = request.getHeaderNames();
request 객체로부터 헤더의 이름 집합을 반환
while(headerNames.hasMoreElements()) {
String name = (String)headerNames.nextElement();
String value = request.getHeader(name);
}
Enumeration 객체로부터 다음 요소가 있는지 검사
Enumeration 객체로부터 다음 요소 반환
헤더 이름을 이용해서 해당 값 추출
3.5 HttpServletResponse 객체
3.5.1 HTTP 응답 메시지의 구조
▣ HTTP 응답 메시지의 구성
◈ Response 상태 라인
◈ 헤더
◈ Data
Response Line
Header Line
Data
version Status
Header_Field_Name : value
Header_Field_Name : value
…
Header_Field_Name : value
Response_Data
200 OK
301 Moved Permanently
400 Bad Request
404 Not Found
505 HTTP Version Not Supported
Status Code
응답 메시지는
처리 결과에 따
라 상태 코드를
기술하여 전송한
다.
3.5.2 response의 상태 코드
▣ 상태 코드(Status Code)
◈ HttpServletResponse 인터페이스에 상태 코드와 관련된 다양한 멤버 필드가
정의되어 있다.
▣ 상태 코드의 구분
◈ 200번대
– 클라이언트의 요청을 성공적으로 수행하였음을 의미
– HttpServletResponse.SC_OK : 정상적인 수행(200)
◈ 300번대
– 파일들이 이동되었을 때 사용되는 코드
– 파일의 이동 위치를 나타내는 Location 헤더가 포함된다.
◈ 400번대
– 클라이언트의 요청에 문제가 있을 경우 발생
– HttpServletResponse.SC_BAD_REQUEST : 잘못된 요청(400)
◈ 500번대
– 웹 서버가 클라이언트의 요청을 처리하는 도중 에러가 발생하였을 경우
– HttpServletResponse.SC_INTERNAL_SERVER_ERROR : HTTP 서버 에러(500)
3.5.3 상태 코드 예제
▣ 파라미터 저장
▣ 파라미터 값에 따라 해당 에러 페이지 전송
int status = Integer.parseInt(request.getParameter("status"));
status 파라미터 값을 가져와서 int 형으로 변경
switch(status) {
case 400 :
response.sendError(HttpServletResponse.SC_BAD_REQUEST);
break;
case 404 :
response.sendError(HttpServletResponse.SC_NOT_FOUND);
break;
case 500 :
response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
break;
default :
response.sendError(HttpServletResponse.SC_OK);
}
파라미터 값에 따라 해당 에러 페이지 전송
3.5.4 Refresh 헤더 항목 설정
▣ RefreshPage.java 작성
▣ RefreshPage.java 컴파일과 실행
response.setHeader("Refresh", "5;URL=http://www.jabook.co.kr");
Refresh 헤더 항목을 설정, 5초 후 다른 웹 사이트로 이동
C:...MySampleWEB-INFclasses> javac RefreshPage.java
http://localhost:8080/MySample/servlet/RefreshPage
HTTP
Response
Message
End ███████████
End

More Related Content

What's hot

JavaScript Object Oriented Programming Cheat Sheet
JavaScript Object Oriented Programming Cheat SheetJavaScript Object Oriented Programming Cheat Sheet
JavaScript Object Oriented Programming Cheat Sheet
HDR1001
 
JSP 프로그래밍 #02 서블릿과 JSP 시작하기
JSP 프로그래밍 #02 서블릿과 JSP 시작하기JSP 프로그래밍 #02 서블릿과 JSP 시작하기
JSP 프로그래밍 #02 서블릿과 JSP 시작하기
Myungjin Lee
 
REST APIs with Spring
REST APIs with SpringREST APIs with Spring
REST APIs with Spring
Joshua Long
 
Json in Postgres - the Roadmap
 Json in Postgres - the Roadmap Json in Postgres - the Roadmap
Json in Postgres - the Roadmap
EDB
 
Introduction to rest.li
Introduction to rest.liIntroduction to rest.li
Introduction to rest.li
Joe Betz
 
Battle Of The Microservice Frameworks: Micronaut versus Quarkus edition!
Battle Of The Microservice Frameworks: Micronaut versus Quarkus edition! Battle Of The Microservice Frameworks: Micronaut versus Quarkus edition!
Battle Of The Microservice Frameworks: Micronaut versus Quarkus edition!
Michel Schudel
 
Reactive Access to MongoDB from Java 8
Reactive Access to MongoDB from Java 8Reactive Access to MongoDB from Java 8
Reactive Access to MongoDB from Java 8
Hermann Hueck
 
Spark Summit EU talk by Luc Bourlier
Spark Summit EU talk by Luc BourlierSpark Summit EU talk by Luc Bourlier
Spark Summit EU talk by Luc Bourlier
Spark Summit
 
Introduction to Spring Boot!
Introduction to Spring Boot!Introduction to Spring Boot!
Introduction to Spring Boot!Jakub Kubrynski
 
Ambari: Agent Registration Flow
Ambari: Agent Registration FlowAmbari: Agent Registration Flow
Ambari: Agent Registration FlowHortonworks
 
PUC SE Day 2019 - SpringBoot
PUC SE Day 2019 - SpringBootPUC SE Day 2019 - SpringBoot
PUC SE Day 2019 - SpringBoot
Josué Neis
 
Grails Spring Boot
Grails Spring BootGrails Spring Boot
Grails Spring Boot
TO THE NEW | Technology
 
[2022]NaverMeetup_[Flutter] Dependency Injection과 Service Locator_임태규.pdf
[2022]NaverMeetup_[Flutter] Dependency Injection과 Service Locator_임태규.pdf[2022]NaverMeetup_[Flutter] Dependency Injection과 Service Locator_임태규.pdf
[2022]NaverMeetup_[Flutter] Dependency Injection과 Service Locator_임태규.pdf
Taekyu Lim
 
Parallel builds in Eclipse IDE workspace - EclispeCon Europe 2018
Parallel builds in Eclipse IDE workspace - EclispeCon Europe 2018Parallel builds in Eclipse IDE workspace - EclispeCon Europe 2018
Parallel builds in Eclipse IDE workspace - EclispeCon Europe 2018
Mickael Istria
 
Introduction to react-query. A Redux alternative? (Nikos Kleidis, Front End D...
Introduction to react-query. A Redux alternative? (Nikos Kleidis, Front End D...Introduction to react-query. A Redux alternative? (Nikos Kleidis, Front End D...
Introduction to react-query. A Redux alternative? (Nikos Kleidis, Front End D...
GreeceJS
 
Spring Boot Tutorial
Spring Boot TutorialSpring Boot Tutorial
Spring Boot Tutorial
Naphachara Rattanawilai
 
My Top 5 APEX JavaScript API's
My Top 5 APEX JavaScript API'sMy Top 5 APEX JavaScript API's
My Top 5 APEX JavaScript API's
Roel Hartman
 
[수정본] 우아한 객체지향
[수정본] 우아한 객체지향[수정본] 우아한 객체지향
[수정본] 우아한 객체지향
Young-Ho Cho
 
Spring boot - an introduction
Spring boot - an introductionSpring boot - an introduction
Spring boot - an introduction
Jonathan Holloway
 
React Server Side Rendering with Next.js
React Server Side Rendering with Next.jsReact Server Side Rendering with Next.js
React Server Side Rendering with Next.js
Jamie Barton 👨🏻‍💻
 

What's hot (20)

JavaScript Object Oriented Programming Cheat Sheet
JavaScript Object Oriented Programming Cheat SheetJavaScript Object Oriented Programming Cheat Sheet
JavaScript Object Oriented Programming Cheat Sheet
 
JSP 프로그래밍 #02 서블릿과 JSP 시작하기
JSP 프로그래밍 #02 서블릿과 JSP 시작하기JSP 프로그래밍 #02 서블릿과 JSP 시작하기
JSP 프로그래밍 #02 서블릿과 JSP 시작하기
 
REST APIs with Spring
REST APIs with SpringREST APIs with Spring
REST APIs with Spring
 
Json in Postgres - the Roadmap
 Json in Postgres - the Roadmap Json in Postgres - the Roadmap
Json in Postgres - the Roadmap
 
Introduction to rest.li
Introduction to rest.liIntroduction to rest.li
Introduction to rest.li
 
Battle Of The Microservice Frameworks: Micronaut versus Quarkus edition!
Battle Of The Microservice Frameworks: Micronaut versus Quarkus edition! Battle Of The Microservice Frameworks: Micronaut versus Quarkus edition!
Battle Of The Microservice Frameworks: Micronaut versus Quarkus edition!
 
Reactive Access to MongoDB from Java 8
Reactive Access to MongoDB from Java 8Reactive Access to MongoDB from Java 8
Reactive Access to MongoDB from Java 8
 
Spark Summit EU talk by Luc Bourlier
Spark Summit EU talk by Luc BourlierSpark Summit EU talk by Luc Bourlier
Spark Summit EU talk by Luc Bourlier
 
Introduction to Spring Boot!
Introduction to Spring Boot!Introduction to Spring Boot!
Introduction to Spring Boot!
 
Ambari: Agent Registration Flow
Ambari: Agent Registration FlowAmbari: Agent Registration Flow
Ambari: Agent Registration Flow
 
PUC SE Day 2019 - SpringBoot
PUC SE Day 2019 - SpringBootPUC SE Day 2019 - SpringBoot
PUC SE Day 2019 - SpringBoot
 
Grails Spring Boot
Grails Spring BootGrails Spring Boot
Grails Spring Boot
 
[2022]NaverMeetup_[Flutter] Dependency Injection과 Service Locator_임태규.pdf
[2022]NaverMeetup_[Flutter] Dependency Injection과 Service Locator_임태규.pdf[2022]NaverMeetup_[Flutter] Dependency Injection과 Service Locator_임태규.pdf
[2022]NaverMeetup_[Flutter] Dependency Injection과 Service Locator_임태규.pdf
 
Parallel builds in Eclipse IDE workspace - EclispeCon Europe 2018
Parallel builds in Eclipse IDE workspace - EclispeCon Europe 2018Parallel builds in Eclipse IDE workspace - EclispeCon Europe 2018
Parallel builds in Eclipse IDE workspace - EclispeCon Europe 2018
 
Introduction to react-query. A Redux alternative? (Nikos Kleidis, Front End D...
Introduction to react-query. A Redux alternative? (Nikos Kleidis, Front End D...Introduction to react-query. A Redux alternative? (Nikos Kleidis, Front End D...
Introduction to react-query. A Redux alternative? (Nikos Kleidis, Front End D...
 
Spring Boot Tutorial
Spring Boot TutorialSpring Boot Tutorial
Spring Boot Tutorial
 
My Top 5 APEX JavaScript API's
My Top 5 APEX JavaScript API'sMy Top 5 APEX JavaScript API's
My Top 5 APEX JavaScript API's
 
[수정본] 우아한 객체지향
[수정본] 우아한 객체지향[수정본] 우아한 객체지향
[수정본] 우아한 객체지향
 
Spring boot - an introduction
Spring boot - an introductionSpring boot - an introduction
Spring boot - an introduction
 
React Server Side Rendering with Next.js
React Server Side Rendering with Next.jsReact Server Side Rendering with Next.js
React Server Side Rendering with Next.js
 

Similar to JSP 프로그래밍 #03 서블릿

Servlet3
Servlet3Servlet3
Servlet3
Sukjin Yun
 
4-2. ajax
4-2. ajax4-2. ajax
4-2. ajax
JinKyoungHeo
 
[Study]HeadFirst JSP&servlet chapter5
[Study]HeadFirst JSP&servlet chapter5[Study]HeadFirst JSP&servlet chapter5
[Study]HeadFirst JSP&servlet chapter5
Hyeonseok Yang
 
Android xml parsing
Android xml parsingAndroid xml parsing
Android xml parsingSangon Lee
 
Angular2 router&http
Angular2 router&httpAngular2 router&http
Angular2 router&http
Dong Jun Kwon
 
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
병준 김
 
Spring boot actuator
Spring boot   actuatorSpring boot   actuator
Spring boot actuator
Choonghyun Yang
 
GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출
GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출
GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출
GDG Korea
 
HeadFisrt Servlet&JSP Chapter 4
HeadFisrt Servlet&JSP Chapter 4HeadFisrt Servlet&JSP Chapter 4
HeadFisrt Servlet&JSP Chapter 4
J B
 
HeadFisrt Servlet&JSP Chapter 2
HeadFisrt Servlet&JSP Chapter 2HeadFisrt Servlet&JSP Chapter 2
HeadFisrt Servlet&JSP Chapter 2
J B
 
4-3. jquery
4-3. jquery4-3. jquery
4-3. jquery
JinKyoungHeo
 
Web App Security 2015.10
Web App Security 2015.10Web App Security 2015.10
Web App Security 2015.10
Chanjin Park
 
vine webdev
vine webdevvine webdev
vine webdevdcfc1997
 
Node.js and react
Node.js and reactNode.js and react
Node.js and react
HyungKuIm
 
Servlet design pattern
Servlet design patternServlet design pattern
Servlet design pattern
Sukjin Yun
 
막하는 스터디 첫 번째 만남 Node.js
막하는 스터디 첫 번째 만남 Node.js막하는 스터디 첫 번째 만남 Node.js
막하는 스터디 첫 번째 만남 Node.js
연웅 조
 
Spring test mvc 발표자료
Spring test mvc 발표자료Spring test mvc 발표자료
Spring test mvc 발표자료수홍 이
 
#22.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
#22.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...#22.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
#22.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
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 프로토콜 개요
dgmit2009
 
HTTP web server 구현
HTTP web server 구현HTTP web server 구현
HTTP web server 구현
Javajigi Jaesung
 

Similar to JSP 프로그래밍 #03 서블릿 (20)

Servlet3
Servlet3Servlet3
Servlet3
 
4-2. ajax
4-2. ajax4-2. ajax
4-2. ajax
 
[Study]HeadFirst JSP&servlet chapter5
[Study]HeadFirst JSP&servlet chapter5[Study]HeadFirst JSP&servlet chapter5
[Study]HeadFirst JSP&servlet chapter5
 
Android xml parsing
Android xml parsingAndroid xml parsing
Android xml parsing
 
Angular2 router&http
Angular2 router&httpAngular2 router&http
Angular2 router&http
 
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
 
Spring boot actuator
Spring boot   actuatorSpring boot   actuator
Spring boot actuator
 
GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출
GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출
GKAC 2015 Apr. - Battery, 안드로이드를 위한 쉬운 웹 API 호출
 
HeadFisrt Servlet&JSP Chapter 4
HeadFisrt Servlet&JSP Chapter 4HeadFisrt Servlet&JSP Chapter 4
HeadFisrt Servlet&JSP Chapter 4
 
HeadFisrt Servlet&JSP Chapter 2
HeadFisrt Servlet&JSP Chapter 2HeadFisrt Servlet&JSP Chapter 2
HeadFisrt Servlet&JSP Chapter 2
 
4-3. jquery
4-3. jquery4-3. jquery
4-3. jquery
 
Web App Security 2015.10
Web App Security 2015.10Web App Security 2015.10
Web App Security 2015.10
 
vine webdev
vine webdevvine webdev
vine webdev
 
Node.js and react
Node.js and reactNode.js and react
Node.js and react
 
Servlet design pattern
Servlet design patternServlet design pattern
Servlet design pattern
 
막하는 스터디 첫 번째 만남 Node.js
막하는 스터디 첫 번째 만남 Node.js막하는 스터디 첫 번째 만남 Node.js
막하는 스터디 첫 번째 만남 Node.js
 
Spring test mvc 발표자료
Spring test mvc 발표자료Spring test mvc 발표자료
Spring test mvc 발표자료
 
#22.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
#22.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...#22.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
#22.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
 
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 프로토콜 개요
 
HTTP web server 구현
HTTP web server 구현HTTP web server 구현
HTTP web server 구현
 

More from Myungjin Lee

지식그래프 개념과 활용방안 (Knowledge Graph - Introduction and Use Cases)
지식그래프 개념과 활용방안 (Knowledge Graph - Introduction and Use Cases)지식그래프 개념과 활용방안 (Knowledge Graph - Introduction and Use Cases)
지식그래프 개념과 활용방안 (Knowledge Graph - Introduction and Use Cases)
Myungjin Lee
 
JSP 프로그래밍 #05 HTML과 JSP
JSP 프로그래밍 #05 HTML과 JSPJSP 프로그래밍 #05 HTML과 JSP
JSP 프로그래밍 #05 HTML과 JSP
Myungjin Lee
 
JSP 프로그래밍 #04 JSP 의 기본
JSP 프로그래밍 #04 JSP 의 기본JSP 프로그래밍 #04 JSP 의 기본
JSP 프로그래밍 #04 JSP 의 기본
Myungjin Lee
 
JSP 프로그래밍 #01 웹 프로그래밍
JSP 프로그래밍 #01 웹 프로그래밍JSP 프로그래밍 #01 웹 프로그래밍
JSP 프로그래밍 #01 웹 프로그래밍
Myungjin Lee
 
관광 지식베이스와 스마트 관광 서비스 (Knowledge base and Smart Tourism)
관광 지식베이스와 스마트 관광 서비스 (Knowledge base and Smart Tourism)관광 지식베이스와 스마트 관광 서비스 (Knowledge base and Smart Tourism)
관광 지식베이스와 스마트 관광 서비스 (Knowledge base and Smart Tourism)
Myungjin Lee
 
오픈 데이터와 인공지능
오픈 데이터와 인공지능오픈 데이터와 인공지능
오픈 데이터와 인공지능
Myungjin Lee
 
법령 온톨로지의 구축 및 검색
법령 온톨로지의 구축 및 검색법령 온톨로지의 구축 및 검색
법령 온톨로지의 구축 및 검색
Myungjin Lee
 
도서관과 Linked Data
도서관과 Linked Data도서관과 Linked Data
도서관과 Linked Data
Myungjin Lee
 
공공데이터, 현재 우리는?
공공데이터, 현재 우리는?공공데이터, 현재 우리는?
공공데이터, 현재 우리는?
Myungjin Lee
 
LODAC 2017 Linked Open Data Workshop
LODAC 2017 Linked Open Data WorkshopLODAC 2017 Linked Open Data Workshop
LODAC 2017 Linked Open Data Workshop
Myungjin Lee
 
Introduction of Deep Learning
Introduction of Deep LearningIntroduction of Deep Learning
Introduction of Deep Learning
Myungjin Lee
 
쉽게 이해하는 LOD
쉽게 이해하는 LOD쉽게 이해하는 LOD
쉽게 이해하는 LOD
Myungjin Lee
 
서울시 열린데이터 광장 문화관광 분야 LOD 서비스
서울시 열린데이터 광장 문화관광 분야 LOD 서비스서울시 열린데이터 광장 문화관광 분야 LOD 서비스
서울시 열린데이터 광장 문화관광 분야 LOD 서비스
Myungjin Lee
 
LOD(Linked Open Data) Recommendations
LOD(Linked Open Data) RecommendationsLOD(Linked Open Data) Recommendations
LOD(Linked Open Data) Recommendations
Myungjin Lee
 
Interlinking for Linked Data
Interlinking for Linked DataInterlinking for Linked Data
Interlinking for Linked Data
Myungjin Lee
 
Linked Open Data Tutorial
Linked Open Data TutorialLinked Open Data Tutorial
Linked Open Data Tutorial
Myungjin Lee
 
Linked Data Usecases
Linked Data UsecasesLinked Data Usecases
Linked Data Usecases
Myungjin Lee
 
공공데이터와 Linked open data
공공데이터와 Linked open data공공데이터와 Linked open data
공공데이터와 Linked open data
Myungjin Lee
 
공공데이터와 Linked open data
공공데이터와 Linked open data공공데이터와 Linked open data
공공데이터와 Linked open data
Myungjin Lee
 
Linked Data Modeling for Beginner
Linked Data Modeling for BeginnerLinked Data Modeling for Beginner
Linked Data Modeling for Beginner
Myungjin Lee
 

More from Myungjin Lee (20)

지식그래프 개념과 활용방안 (Knowledge Graph - Introduction and Use Cases)
지식그래프 개념과 활용방안 (Knowledge Graph - Introduction and Use Cases)지식그래프 개념과 활용방안 (Knowledge Graph - Introduction and Use Cases)
지식그래프 개념과 활용방안 (Knowledge Graph - Introduction and Use Cases)
 
JSP 프로그래밍 #05 HTML과 JSP
JSP 프로그래밍 #05 HTML과 JSPJSP 프로그래밍 #05 HTML과 JSP
JSP 프로그래밍 #05 HTML과 JSP
 
JSP 프로그래밍 #04 JSP 의 기본
JSP 프로그래밍 #04 JSP 의 기본JSP 프로그래밍 #04 JSP 의 기본
JSP 프로그래밍 #04 JSP 의 기본
 
JSP 프로그래밍 #01 웹 프로그래밍
JSP 프로그래밍 #01 웹 프로그래밍JSP 프로그래밍 #01 웹 프로그래밍
JSP 프로그래밍 #01 웹 프로그래밍
 
관광 지식베이스와 스마트 관광 서비스 (Knowledge base and Smart Tourism)
관광 지식베이스와 스마트 관광 서비스 (Knowledge base and Smart Tourism)관광 지식베이스와 스마트 관광 서비스 (Knowledge base and Smart Tourism)
관광 지식베이스와 스마트 관광 서비스 (Knowledge base and Smart Tourism)
 
오픈 데이터와 인공지능
오픈 데이터와 인공지능오픈 데이터와 인공지능
오픈 데이터와 인공지능
 
법령 온톨로지의 구축 및 검색
법령 온톨로지의 구축 및 검색법령 온톨로지의 구축 및 검색
법령 온톨로지의 구축 및 검색
 
도서관과 Linked Data
도서관과 Linked Data도서관과 Linked Data
도서관과 Linked Data
 
공공데이터, 현재 우리는?
공공데이터, 현재 우리는?공공데이터, 현재 우리는?
공공데이터, 현재 우리는?
 
LODAC 2017 Linked Open Data Workshop
LODAC 2017 Linked Open Data WorkshopLODAC 2017 Linked Open Data Workshop
LODAC 2017 Linked Open Data Workshop
 
Introduction of Deep Learning
Introduction of Deep LearningIntroduction of Deep Learning
Introduction of Deep Learning
 
쉽게 이해하는 LOD
쉽게 이해하는 LOD쉽게 이해하는 LOD
쉽게 이해하는 LOD
 
서울시 열린데이터 광장 문화관광 분야 LOD 서비스
서울시 열린데이터 광장 문화관광 분야 LOD 서비스서울시 열린데이터 광장 문화관광 분야 LOD 서비스
서울시 열린데이터 광장 문화관광 분야 LOD 서비스
 
LOD(Linked Open Data) Recommendations
LOD(Linked Open Data) RecommendationsLOD(Linked Open Data) Recommendations
LOD(Linked Open Data) Recommendations
 
Interlinking for Linked Data
Interlinking for Linked DataInterlinking for Linked Data
Interlinking for Linked Data
 
Linked Open Data Tutorial
Linked Open Data TutorialLinked Open Data Tutorial
Linked Open Data Tutorial
 
Linked Data Usecases
Linked Data UsecasesLinked Data Usecases
Linked Data Usecases
 
공공데이터와 Linked open data
공공데이터와 Linked open data공공데이터와 Linked open data
공공데이터와 Linked open data
 
공공데이터와 Linked open data
공공데이터와 Linked open data공공데이터와 Linked open data
공공데이터와 Linked open data
 
Linked Data Modeling for Beginner
Linked Data Modeling for BeginnerLinked Data Modeling for Beginner
Linked Data Modeling for Beginner
 

JSP 프로그래밍 #03 서블릿

  • 2. 이 명 진, 최 영 관 Powered by http://www.jabook.org 2nd Edition 소설같은 JSP 3장 서블릿
  • 4. 3.1.1 웹 서버의 역할 ▣ 일반적인 HTTP 요청 시 ◈ 클라이언트의 요청이 전달되면 해당 HTML 문서가 웹 서버에 존재하는지 검사한 후 직접 서비스가 이루어진다. ▣ 서블릿 요청 시 ◈ 웹 서버는 클라이언트로부터 전달된 요청 정보를 묶어서 서블릿 컨테이너 (Servlet Container)에게 전달 ◈ 서블릿 컨테이너는 해당 서블릿을 검색한 후 서블릿이 존재하면 서블릿을 실행하여 클라이언트의 요청을 처리하고 응답해 준다. Client Web Server Servlet Container Servlet Servlet 클라이언트의 요청 종 류에 따라 웹 서버는 자신이 서비스를 해주 거나 서블릿 컨테이너 를 호출하여 서블릿을 실행한 후 응답한다. HTML HTML
  • 5. 3.1.2 서블릿 컨테이너의 역할 ▣ 요청 및 응답 객체 생성 ◈ 웹 서버로부터 넘겨 받은 요청 정보를 이용해서 HttpServletRequest 객체와 HttpServletResponse 객체 생성 ▣ 서블릿 객체 생성 ◈ 서블릿 객체가 서블릿 컨테이너에 로딩되어 있다면, 바로 해당 서블릿 객체 생성 ◈ 서블릿 객체가 서블릿 컨테이너에 로딩되어 있지 않다면, 해당 서블릿의 클 래스 파일(.class)을 로딩한 후 객체 생성 ▣ 서블릿의 실행 ◈ 사용자가 작성한 서블릿의 doGet() 메소드 호출 HttpServletRequest req = new HttpServletRequest(); HttpServletResponse res = new HttpServletRespone(); MyServlet m = new MyServlet(); m.doGet(req, res);
  • 6. 3.1.3 프로그래머의 역할 (1) ▣ HttpServlet 클래스 상속 ◈ 서블릿이 되기 위해서는 HttpServlet을 반드시 상속해야 한다. ◈ 서블릿 클래스는 반드시 public이어야 한다. ▣ doGet() 메소드 재정의 ◈ doGet() 메소드의 매개변수 HttpServletRequest와 HttpServletResponse가 들 어 올 것이라는 가정하에 클라이언트로 서비스할 프로그램 작성 public class MyServlet extends HttpServlet { ... } public void doGet(HttpServletRequest req, HttpServletResponse res) { … } 서블릿 클래스는 누구나 호출해서 쓸 수 있는 public이 어야만 한다. 잊지 말자.
  • 7. 3.1.4 프로그래머의 역할 (2) ▣ doGet() 메소드의 코드 작성 ◈ HttpServletResponse 객체의 한글 처리 지정 ◈ HttpServletResponse 객체로부터 클라이언트 스트림 얻기 ◈ 클라이언트의 요청 정보인 HttpServletRequest의 정보 추출 res.setContentType("text/html;charset=euc-kr"); PrintWriter out = res.getWriter(); out.println(req.getProtocol() + "<br>"); out.println(req.getRemoteAddr() + "<br>"); out.println(req.getRemoteHost() + "<br>"); out.println(req.getScheme() + "<br>"); out.println(req.getServerName() + "<br>"); out.println(req.getServerPort() + "<br>");
  • 8. 3.1.5 MyServlet 실행 Client WebServer 서블릿 요청 서블릿 응답 http://localhost:8080/MySample/servlet/MyServlet Servlet Container MyServlet doGet() 메소드 호출 invoke() 호출 MyServlet 객체가 로딩되어 있지 않 다면 MyServlet 객 체를 로딩한다. MyServlet 검색 MyServlet 객체 생성 및 로딩 요청 정보를 이용해서 요청, 응답 객체 생성 invoker 없을 경우있을 경우
  • 10. 3.2.1 서블릿의 상속 구조 ServletServletConfig Serializable GenericServlet HttpServlet HTTP 프로토콜을 위한 HTTP 전용 서블릿 서블릿 환경을 위한 인터페이스 서블릿 기능 구현을 위한 인터페이스 서블릿 직렬화를 위한 인터페이스 interface interface interface abstract abstract HttpServlet 구현 일반적인 네트워크 프로토콜을 위한 추상 서블릿 서블릿을 위해 필 요한 인터페이스들 을 구현해서 만든 추상 클래스 GenericServlet 추상 클 래스를 상속 받아 HTTP 프로토콜에 맞 게 만든 추상 클래스 가 바로 HttpServlet 클 래스이다.
  • 11. Servlet Container 3.2.2 HttpServlet 클래스의 동작 과정 ▣ HttpServlet 클래스는 GenericServlet 클래스를 상속받아 HTTP 프로토 콜에 맞게 작성한 클래스이다. Web Server Get Request Post Request Response Response extends HttpServlet service() doGet() doPost() HTTP 프로토콜을 통해 서 블릿 컨테이너에 요청이 들어오면 HttpServlet 클래 스의 service() 메소드가 가 장 먼저 호출된다. service() 메소드에 서 HTTP의 요청 방식에 따라 doGet()이나 doPost() 메소드를 호출한다.
  • 12. 3.2.3 GET 방식과 POST 방식 ▣ GET 방식 ◈ URL에 전달하고자 하는 정보를 포함해서 정보를 전달하는 방법 ◈ 단점 – 정보가 노출되므로 보안 취약하다. – 보내는 정보의 크기가 1024바이트로 제한된다 ▣ POST 방식 ◈ 전달하고자 하는 정보를 첨부파일 형태로 포함해서 전송하는 방법 ◈ 장점 – URL의 주소 창에 보내는 정보에 대한 노출이 없기 때문에 보안성이 좋다. – 보내는 정보의 크기에 제한이 없다. 요청_주소?파라미터이름=파라미터값&파라미터이름=파라미터값&... GET 방식과 달리 파라미터 정보가 URL에 포함되지 않고 전달된다. GET 방식은 URL 뒤 에 "?" 기호와 파라미 터 이름, "=" 기호, 그리 고 파라미터 값을 이용 해서 호출한다.
  • 13. 3.2.4 GET 방식 처리를 위한 코드 작성하기 ▣ doGet() 메소드 재정의 ▣ doGet() 메소드의 코드 작성 ◈ 파라미터 값 추출 public void doGet(HttpServletRequest req, HttpServletResponse res) { … } String helloName = req.getParameter("name"); 서블릿으로 전달된 HttpServletRequest 객체 의 getParameter() 메소 드를 이용해서 파라미 터의 값을 추출할 수 있 다.
  • 14. 3.2.5 ExcuteGetServlet.html 작성하기 (1) ▣ <form> 태그 ◈ 클라이언트에서 서버로 값을 전달하고자 할 때 사용하는 태그 ▣ <form> 태그의 속성 ◈ action 속성 – 사용자의 요청정보를 받아서 처리하는 CGI 프로그램의 위치를 지정 ◈ method 속성 – 사용자의 요청정보를 어떤 방식으로 CGI 프로그램에 전달할 것인지를 지정 – GET과 POST 중 하나를 지정 <form action ="/MySample/servlet/HttpGetServlet" method="GET"> … </form> 다음으로 실행될 서블릿의 위치를 지정 메시지 전달 방식
  • 15. 3.2.6 ExcuteGetServlet.html 작성하기 (2) ▣ <input> 태그 ◈ 텍스트 상자나 버튼을 만들기 위한 태그 ◈ <input> 태그의 속성 – type 속성 • <input> 태그의 종류를 지정(text | submit) – name 속성 • <input> 태그의 이름을 지정 • 파라미터 이름으로 사용된다. – value 속성 • 버튼에 나타날 값을 지정 <input type="text" name="name" > <input type="submit" value="Submit"> 텍스트 박스 파라미터 이름 전송 버튼 버튼 이름 <input> 태그의 type 속 성을 submit으로 주면 버 튼이 만들어지며, 이 버 튼을 누르면 <form> 태 그의 action 속성에서 지 정된 서블릿이 실행된다.
  • 16. 3.2.7 POST 방식 처리를 위한 코드 작성하기 ▣ doPost() 메소드 재정의 ▣ doPost() 메소드의 코드 작성 ◈ 파라미터 값 추출 public void doPost(HttpServletRequest req, HttpServletResponse res) { … } String helloName = req.getParameter("name"); 서블릿으로 전달된 HttpServletRequest 객체 의 getParameter() 메소 드를 이용해서 파라미 터의 값을 추출할 수 있 다.
  • 17. 3.2.8 ExcutePostServlet.html 작성하기 ▣ <form> 태그 ▣ <input> 태그 <form action ="/MySample/servlet/HttpPostServlet" method="POST"> … </form> 다음으로 실행될 서블릿의 위치를 지정 메시지 전달 방식 <input type="text" name="name" > <input type="submit" value="Submit"> 텍스트 박스 파라미터 이름 전송 버튼 버튼 이름 <form> 태그의 method 속성 값이 POST이므로 POST 방식을 이용해서 파라미터가 전달된 다.
  • 19. 3.3.1 서블릿 작업의 중심 ▣ HttpServletRequest와 HttpServletResponse 객체 ◈ doGet()과 doPost() 메소드의 매개변수로 넘어오는 인자 타입 ◈ 클라이언트가 요청할 때 request와 response를 클래스의 형태로 맵핑 – 클라이언트의 요청 → HttpServletRequest request – 클라이언트의 응답 → HttpServletResponse response Client Request Response Web Server Servlet Container extends HttpServlet doGet(request, response) doPost(request, response) service(request, response) HttpServletRequest HttpServletResponse 클라이언트의 요 청 방식에 따라 doGet()과 doPost() 메소드가 알아서 호출된다.
  • 20. 3.3.2 HttpServletRequest와 HttpServletResponse의 개요 ▣ HttpServletRequest 객체 ◈ 클라이언트의 모든 요청 정보를 포함 ◈ 요청 HTTP 헤더 정보 ◈ 서블릿으로 전달된 파라미터 정보 ◈ InputStream 형태의 클라이언트로부터 전송된 데이터 ◈ 세션(Session)과 쿠키(Cookie)와 같은 기타 정보 ▣ HttpServletResponse 객체 ◈ 클라이언트로 보내지는 응답 정보를 포함 ◈ 응답 HTTP 헤더 정보 ◈ OutputStream 형태의 클라이언트로 전송되는 데이터 ◈ 세션과 쿠기 설정
  • 21. 3.3.3 간단한 request와 response 예제 ▣ HTML 작성 ▣ 서블릿 작성 ◈ Get 방식의 요청을 처리하기 위한 doGet() 메소드 재정의 ◈ request 객체로부터 파라미터 값 얻기 ◈ response 객체로부터 응답을 위한 스트림 객체 생성 public void doGet(HttpServletRequest request, HttpServletResponse response) 클라이언트의 요청 객체 클라이언트로의 응답 객체 String helloName = request.getParameter("name"); 파라미터 이름 PrintWriter out = response.getWriter(); <form action ="/MySample/servlet/SimpleResponse" method="GET"> <input type="text" name="name" > <input type="submit" value="submit"> </form>
  • 22. 3.3.4 간단한 request와 response의 동작과정 Client Servlet Container HttpServletRequest PrintWriter SimpleResponse Servlet doGet( request , response )request response Response SimpleResponse?name=Grace HttpServletResponse Request response.getWriter()
  • 23. 3.3.5 서블릿의 한글 문제 ▣ response 객체의 한글 인코딩 ◈ 응답으로 전송되는 response 객체의 한글 표현을 위해 한글 인코딩을 설정 해 주어야 한다. ▣ request 객체의 한글 인코딩 ◈ 클라이언트로부터 POST 방식으로 전송된 요청 정보는 한글 인코딩을 설정 해 주어야 제대로 사용할 수 있다. response.setContentType("text/html;charset=euc-kr"); request.setCharacterEncoding("euc-kr"); Client Request Response Servlet Container HttpServletRequest HttpServletResponse Servlet response 객체 인코딩 request 객체 인코딩
  • 25. 3.4.1 HTTP 요청 메시지의 구조 ▣ HTTP 요청 메시지의 구성 ◈ Request 요청 라인 ◈ 헤더 ◈ Entity Body Request Line Header Line Entity Body method URL version Header_Field_Name : value Header_Field_Name : value … Header_Field_Name : value Request_Data HTTP 프로토콜을 통해 전달되는 요 청 메시지는 아래 와 같은 구조를 갖는다.
  • 26. 3.4.2 HTTP 요청 메시지의 헤더 출력 ▣ request 객체로부터 헤더의 이름 집합(Enumeration) 얻기 ▣ 헤더 이름 집합으로부터 헤더 얻기 Enumeration headerNames = request.getHeaderNames(); request 객체로부터 헤더의 이름 집합을 반환 while(headerNames.hasMoreElements()) { String name = (String)headerNames.nextElement(); String value = request.getHeader(name); } Enumeration 객체로부터 다음 요소가 있는지 검사 Enumeration 객체로부터 다음 요소 반환 헤더 이름을 이용해서 해당 값 추출
  • 28. 3.5.1 HTTP 응답 메시지의 구조 ▣ HTTP 응답 메시지의 구성 ◈ Response 상태 라인 ◈ 헤더 ◈ Data Response Line Header Line Data version Status Header_Field_Name : value Header_Field_Name : value … Header_Field_Name : value Response_Data 200 OK 301 Moved Permanently 400 Bad Request 404 Not Found 505 HTTP Version Not Supported Status Code 응답 메시지는 처리 결과에 따 라 상태 코드를 기술하여 전송한 다.
  • 29. 3.5.2 response의 상태 코드 ▣ 상태 코드(Status Code) ◈ HttpServletResponse 인터페이스에 상태 코드와 관련된 다양한 멤버 필드가 정의되어 있다. ▣ 상태 코드의 구분 ◈ 200번대 – 클라이언트의 요청을 성공적으로 수행하였음을 의미 – HttpServletResponse.SC_OK : 정상적인 수행(200) ◈ 300번대 – 파일들이 이동되었을 때 사용되는 코드 – 파일의 이동 위치를 나타내는 Location 헤더가 포함된다. ◈ 400번대 – 클라이언트의 요청에 문제가 있을 경우 발생 – HttpServletResponse.SC_BAD_REQUEST : 잘못된 요청(400) ◈ 500번대 – 웹 서버가 클라이언트의 요청을 처리하는 도중 에러가 발생하였을 경우 – HttpServletResponse.SC_INTERNAL_SERVER_ERROR : HTTP 서버 에러(500)
  • 30. 3.5.3 상태 코드 예제 ▣ 파라미터 저장 ▣ 파라미터 값에 따라 해당 에러 페이지 전송 int status = Integer.parseInt(request.getParameter("status")); status 파라미터 값을 가져와서 int 형으로 변경 switch(status) { case 400 : response.sendError(HttpServletResponse.SC_BAD_REQUEST); break; case 404 : response.sendError(HttpServletResponse.SC_NOT_FOUND); break; case 500 : response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); break; default : response.sendError(HttpServletResponse.SC_OK); } 파라미터 값에 따라 해당 에러 페이지 전송
  • 31. 3.5.4 Refresh 헤더 항목 설정 ▣ RefreshPage.java 작성 ▣ RefreshPage.java 컴파일과 실행 response.setHeader("Refresh", "5;URL=http://www.jabook.co.kr"); Refresh 헤더 항목을 설정, 5초 후 다른 웹 사이트로 이동 C:...MySampleWEB-INFclasses> javac RefreshPage.java http://localhost:8080/MySample/servlet/RefreshPage HTTP Response Message