>  기사  >  Java  >  Tomcat 연구 노트 (1) 간단한 웹 서버

Tomcat 연구 노트 (1) 간단한 웹 서버

PHP中文网
PHP中文网원래의
2017-07-07 18:12:481030검색
내용은 "톰캣 심층 분석" 1장의 핵심 내용과 제가 직접 정리한 내용입니다. 불분명한 설명이 있으면 원서를 확인하시면 됩니다.
1. HTTP 프로토콜:
1. 정의: 서버와 클라이언트 간의 통신에 사용되는 프로토콜로, 웹 서버와 브라우저가 인터넷을 통해 데이터를 보내고 받을 수 있도록 합니다. 신뢰할 수 있는 TCP 프로토콜을 사용하는 요청 및 응답 프로토콜이며 TCP 프로토콜의 포트는 80이며 연결 지향 프로토콜입니다.
2. HTTP 프로토콜 요청의 세 가지 구성 요소: 이 세 부분은 캐리지 리턴 및 줄 바꿈(CRLF)으로 구분됩니다.
요청 부분: 메소드(GET/POST를 포함한 7가지 유형, 그 외는 거의 사용되지 않으며 책에 소개됨) [공백, 내용의 이 부분은 공백으로 구분됩니다.] URL(Uniform Resource Identifier) ​​URI [공백, 내용의 이 부분은 공백으로 구분] ] 프로토콜/프로토콜 버전
URL은 일반적으로 서버의 루트 디렉터리에 상대적이므로 "/"로 시작합니다.
요청 헤더: 요청 헤더에는 클라이언트 환경 및 요청 본문 내용에 대한 유용한 정보가 포함되어 있습니다. 예를 들어, 브라우저 설정의 언어, 주요 콘텐츠의 길이 등이 포함될 수 있습니다. 각 헤더는 CRLF(캐리지 리턴 줄 바꿈) 문자로 구분됩니다.
요청 본문 콘텐츠: HTTP 요청 형식의 경우 헤더와 본문 콘텐츠 사이에 CRLF(캐리지 리턴 라인 피드)를 포함하는 것이 매우 중요합니다. CRLF는 본문 내용이 시작되는 위치를 HTTP 서버에 알려줍니다. 일부 인터넷 프로그래밍 서적에서는 CRLF를 HTTP 요청의 네 번째 부분으로 간주하기도 합니다.
3. HTTP 응답에는 다음 세 부분도 포함됩니다.
· 방법 - URI(Uniform Resource Identifier) ​​- 프로토콜/버전
· 응답 헤더
· 주요 내용
2. 서버와 클라이언트 간의 통신
1. 서버와 클라이언트 간의 통신에는 소켓(클라이언트)과 ServerSocket(서버)의 두 부분이 필요합니다.
(1) ServerSocket(java.net.ServerSocket, 서버측 소켓), 서버 소켓을 생성하려면 ServerSocket 클래스에서 제공하는 네 가지 구성 방법 중 하나를 사용해야 합니다. 서버 소켓이 수신할 IP 주소와 포트 번호를 지정해야 합니다. 일반적으로 IP 주소는 127.0.0.1입니다. 이는 서버 소켓이 로컬 시스템에서 수신 대기한다는 의미입니다. 서버 소켓이 수신 대기 중인 IP 주소를 바인딩 주소라고 합니다. 서버 소켓의 또 다른 중요한 속성은 백로그입니다. 이는 서버 소켓이 들어오는 요청을 거부하기 전에 들어오는 연결 요청의 최대 대기열 길이입니다.
        ServerSocket ss = new ServerSocket();//바인딩되지 않은 ServerSocket 만들기
              ServerSocket ss = new ServerSocket(int port);//특정 포트에 바인딩된 ServerSocket 생성
             ServerSocket ss = new ServerSocket(int port, int log);//특정 포트에 바인딩된 ServerSocket을 생성하고 최대 대기열 길이를 설정합니다.
          ServerSocket ss = new ServerSocket(int port, int log, InetAddress address);//특정 주소와 특정 포트에 바인딩된 ServerSocket을 생성하고 최대 대기열 길이를 설정합니다.
ㅋㅋㅋ                                                                                네 번째 생성자의 경우 바인딩 주소는 InetAddress의 인스턴스여야 합니다. InetAddress 개체를 구성하는 간단한 방법은 해당 정적 메서드 getByName을 호출하여 문자열을 전달하는 것입니다. 다음 코드와 같이 호스트 이름을 포함합니다.
                 InetAddress.getByName("127.0.0.1");
ServerSocket을 생성하는 일반적인 방법:
                                new ServerSocket(8080, 1, InetAddress.getByName("127.0.0.1"));
코드는 로컬 시스템의 포트 8080을 수신하는 ServletSocket을 구성하며 해당 대기열 길이는 1입니다.
서버가 생성된 후에는 대기 상태를 유지합니다(신뢰할 수 있는 전송 프로토콜인 TCP 프로토콜은 동기 프로토콜이므로 응답이 없을 때까지 대기합니다)
(2) 소켓(java.net.Socket 클래스, 클라이언트 소켓): 접속하려는 서버의 IP/호스트 이름과 포트 번호를 알아야 서버에 요청을 보낼 수 있습니다. 소켓의 다양한 구성 방법 중 하나를 사용하여 소켓을 만들 수 있습니다
      새 소켓("yahoo.com", 80);
Socket 클래스의 인스턴스를 성공적으로 생성한 후에는 이를 사용하여 바이트 스트림을 보내고 받을 수 있습니다. 바이트 스트림을 전송하려면 먼저 Socket 클래스의 getOutputStream 메소드를 호출하여 java.io.OutputStream 객체를 얻어야 합니다. 원격 애플리케이션에 텍스트를 보내려면 반환된 OutputStream 객체에서 java.io.PrintWriter 객체를 생성하는 경우가 많습니다. 연결의 다른 쪽 끝에서 바이트 스트림을 수신하려면 Socket 클래스의 getInputStream 메소드를 호출하여 java.io.InputStream 객체를 반환할 수 있습니다.
(3) 서버는 accept() 메소드를 통해 클라이언트의 연결 요청을 수신하고 클라이언트와 연결을 설정한 후 Socket을 반환합니다
        소켓 s = ss.
(4) 입력 스트림과 출력 스트림은 소켓을 통해 얻을 수 있습니다. 입력 스트림은 클라이언트 요청 데이터를 읽는 데 사용되며, 출력 스트림은 클라이언트에 응답 정보를 반환하는 데 사용됩니다.
예: InputStream 입력 = s.getInputStream();
          OutputStream 출력 = s.getOutputStream();
3. 간단한 웹 서버 통신 예시 (MyEclipse에 복사해서 보거나 실행하는 것을 권장)
1. 서버 수업
으아악
2.수업신청
으아악
3. 응답 수업
으아악
4. 샘플 코드 기능 설명: 브라우저는 요청을 받은 후 http://localhost:8080/MyHtml.html과 같은 http 요청을 입력하고, 서버는 입력 스트림을 사용하여 요청 내용을 읽어 파일 위치를 얻습니다. , 그리고 파일 입력 스트림을 사용하여 파일 콘텐츠를 읽습니다. 최종적으로 브라우저 클라이언트에 응답을 반환하고 그림과 같이 브라우저에 html 파일의 콘텐츠를 표시합니다.
5. 샘플 코드 교차 기능 흐름도:

위 내용은 Tomcat 연구 노트 (1) 간단한 웹 서버의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.