티스토리 뷰

책/톰캣 최종분석

1장

IT공부블로그 2019. 3. 21. 22:09
728x90
반응형

카탈리나 구조

 

커넥터 (n) ----- 컨테이너 (1)

 

커넥터 : 요청을 전달해주는 모듈

 

커넥터는 요청객체와 응답객체를 전달해주고

컨테이너는 service()를 실행

 

http요청 : 메소드 - 요청url - http버전

요청 헤더

엔티티 본문

 

헤더와 본문사이는 빈줄로 구분

헤더 시작은 스페이스바 or tab

줄구분은 CRLF(개행)으로 구분

본문이 내용이없어도 CRLF해줘야하지만 안해줄경우도 구현해줘야한다

 

http응답 : http버전 - 상태코드 - 사유구절

응답 헤더

엔티티 본문

 

 

서버소켓 : 연결요청을 기다리는 소켓

 

서버소켓은 리슨하고있을 바인드주소를 결정해야함 보통 서버컴퓨터(자기자신 127.0.0.1)을 바인드 시킴

백로그 : 최대연결개수         백로그값이 넘어가면 요청거부

 

 

리스트 1.2 HttpServer 클래스의 await 메소드

public void await() {

ServerSocket server—Socket = null

int port = 8080

try {

ServerSocket = new ServerSocket(port, 1 ,

InetAddress.getByName ("127. 0 . 0 .111 )

}

catch- (lOException. e) {

e .printStackTrace()

System.exit(1)

}

 

// 요청을 기다리는 루프

while (!shutdown) {

Socket socket = null

InputStream input = null;

Outputstream output = null

try {

socket = ServerSocket.accept( )

input = socket.getInputStream( )

output = socket.getOutputStream( )

 

// Request 객체 생성 몇 parse 호출

Request request = new Request (input);

request.parse( )

 

//. Resppnse 객체 생성

Response response = new Response(output)

response.setRequest{request}

response.sendstaticResource( )

 

/ / 소켓 닫기

socket. close ();

 

// URL이 총료 명령이었는지를 확인

shutdown = request.getUri().equals{SHUTDOWN_GOMMAND)

}

catch (Exception e) {

e .printStackTrace( )

continue

}

}

}

 

서버소켓을 바인드시켜 요청받을준비를 하고

socket = ServerSocket.accept( ); 요청이 오길 기다린다

 

요청을 받으면 소켓인스턴스를 생성하고 바이트스트림을 읽고쓰기위해

input = socket.getInputStream( )

output = socket.getOutputStream( )

 

소켓인스턴스의 is, os를 가져온다

 

Request request = new Request (input);

request.parse( )

 

요청한내용을 읽어서 요청객체에 담고 요청메세지를 파싱하여 분석한다

 

 

Response response = new Response(output)

response.setRequest{request}

response.sendstaticResource( );

 

응답객체를 생성하고 응답할 내용을 쓰기위해 os를 인자로 준다

응답객체에 요청메세지를 분석한 내용을 담고

sendstaticResource() 호출

 

 

/ / 소켓 닫기

socket. close ();

 

// URL이 총료 명령이었는지를 확인

shutdown = request.getUri().equals{SHUTDOWN_GOMMAND)

 

마지막으로 소켓을 닫고 getUri()로 종료명령인지 확인후 맞으면 종료

 

 

 

public class Request {

private InputStream input

private String u r i

 

public Request(InputStream input) {

this. input =. input

}

 

public void pa r s e (){

 

}

 

private String parseUri(String requestString) {

 

}

publ i-c String getUri (} {

return u r i

 

}

}

 

GET /index.htmi HTTP/1. 1

 

parse 메소드는 위내용을 inputStream이 요청 바이트스트림을 모두 읽어서 바이트배열에 저장함

그 바이트배열에 저장된것을 읽어서 request라는 이름의 StringBuffer에 저장

StringBuffer String으로 변환하여 parseUri에 인자로 전달한다

 

 

parseUri는 필드사이의 공백으로 구분하여 url을 알아낸다

 

 

response         os를 인자로 생성됨 (응답을 쓰기위해서)

setRequest : 분석끝난 request객체를 담아서 보냄(응답)

sendStaticResource : 정적자원을 보냄 File을 이용하여 url에 맞는 파일을 찾아서 생성시켜줌 없으면 에러발생        가공하지않는 데이터 그대로 보냄


728x90
반응형

' > 톰캣 최종분석' 카테고리의 다른 글

2장  (0) 2019.03.22
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함