초보자 웹 개발 간단한 요약 (1)-톰캣이란?

목차

웹 애플리케이션 개발

1. 웹 애플리케이션 개발이란?

2. 개발 프로세스

3. 웹 응용 프로그램 서버 란?

두 톰캣

1. 서블릿이란

2. 서블릿 컨테이너 란?

3. 서블릿 컨테이너 분류

4. 아키텍처

(1. 개요

(2) 서버

(3) 서비스

(4) 프로세스

세 가지 요약


모바일 앱 개발자로서 최근에 웹 개발 관련 콘텐츠에 대해 배우기 시작하고 싶습니다. 이전에 건드리지 않았기 때문에 가장 간단한 개념부터 시작해야합니다. 일주일 동안 본 후에 내가 본 것들을 요약하고 정리할 것입니다.

웹 애플리케이션 개발

1. 웹 애플리케이션 개발이란?

웹 애플리케이션 개발을위한 두 가지 일반적인 개발 모드가 있습니다.

  • 하나는 B / S (브라우저 / 서버) 모드입니다. 브라우저가있는 한 주요 PC의 공식 웹 사이트 등을 열 수 있습니다.

브라우저 자체는 통신 프로토콜로 일반 http 프로토콜을 가지고 있기 때문에 통신 모듈의 개발을 피할 수 있습니다. 따라서 브라우저에 URL 주소를 입력하면 브라우저가 요청을 Http 요청으로 캡슐화하여 서버로 보냅니다. 서버가 요청을 수신하면 응답 데이터를 Http 응답으로 캡슐화하고 데이터 처리 후 브라우저. 그런 다음이 URL 주소에는 실제로 서버에서 찾아 볼 파일의 경로가 포함됩니다.

  • 두 번째는 C / S (클라이언트 / 서버) 모드입니다. 비즈니스 로직을 개별적으로 처리 할 클라이언트가 있어야하며 여기에서 클라이언트는 일반적으로 PC 설치 프로그램입니다.

2. 개발 프로세스

초기 웹 애플리케이션 개발은 정적 페이지를 탐색하는 데 사용되었습니다. 링크를 클릭하거나 브라우저에 URL 주소를 입력하면 브라우저는 Http 프로토콜을 통해 웹 애플리케이션 서버의 정적 페이지를 요청합니다. 웹 서버는 요청을 수신 한 후 URI로 식별 된 리소스를 읽고 정보 헤더를 브라우저에 반환합니다. 브라우저는 Html을 구문 분석하고 결과를 제공합니다.

나중에 정적 페이지 검색에 국한되지 않고 일부 동적 상호 작용을 추가해야합니다. 그리고 웹 애플리케이션 서버를 확장하기위한 CGI (Common Gateway Interface)가 있습니다. 링크를 클릭하거나 브라우저에 URL 주소를 입력하면 브라우저도 웹 응용 프로그램 서버를 요청합니다. 웹 응용 프로그램 서버는 요청을 수신 한 후 CGI 프로그램을 시작하여 사용자 요청을 처리 한 다음 응답 데이터를 처리 후 웹 응용 프로그램 서버, 웹 응용 프로그램 서버는 데이터를 캡슐화하여 Http 응답의 형태로 브라우저에 반환합니다. 브라우저는 Html을 구문 분석하고 결과를 표시합니다.

나중에 서블릿 구성 요소가 나타나 서버 측에서 실행되고 동적 상호 작용을 달성하기 위해 Sevlert 컨테이너에서 관리됩니다. 링크를 클릭하거나 브라우저에 URL 주소를 입력하면 브라우저도 웹 응용 프로그램 서버로 요청을 보냅니다. 웹 응용 프로그램 서버는 요청을 수신 한 후 서블릿 컨테이너로 요청을 전달합니다. 서블릿 컨테이너는 Servlet로드, 생성, 인스턴스화 및 호출 Servlet 특정 메소드가 처리에 사용되며 마지막으로 응답 결과는 Servlet 컨테이너에 의해 웹 응용 프로그램 서버에 제공됩니다. 웹 응용 프로그램 서버는이 응답을 Http 응답으로 래핑하고 반환합니다. 브라우저는 Html을 구문 분석하고 결과를 표시합니다.

CGI에 비해 Servlet의 장점은 다음과 같습니다.

(1) Servlet은 단일 인스턴스로 여러 요청을 실행할 수 있으며 각 요청은 별도의 스레드에서 실행되며 인스턴스는 일반적으로 생성 후 파괴되지 않습니다 .CGI는 서비스가 완료된 후 스레드가 아닌 요청 활성화 프로세스에 존재합니다. 파괴됩니다.

(2) 더 많은 웹 서버에서 지원하는 표준 API.

(3) Servlet은 Java 언어이고 CGI는 Perl, Shell Script 또는 C 언어입니다.

(4) Servlet 컨테이너는 Servlet에 대한 오류 처리 및 보안을 제공합니다.

3. 웹 응용 프로그램 서버 란?

웹 애플리케이션 개발은 사용자가 일부 웹 리소스에 액세스 할 수 있도록하는 것입니다. 이러한 웹 리소스는 정적 리소스와 동적 리소스로 구분됩니다. HTML, CSS 및 일부 고정 로고 이미지와 같은 정적 리소스는 브라우징 프로세스 중에 변경되지 않습니다. 동적 리소스는 브라우징 프로세스 중에 동적으로 변경해야합니다 (물론 이러한 동적 변경은 복잡한 비즈니스 로직에 해당). JSP, ASP, PHP 등

그리고 이러한 웹 리소스를 외부에 게시하여 사용자가 액세스 할 수 있도록하는 것이 웹 응용 프로그램 서버이고, 사용자는 IP 주소를 통해 웹 응용 프로그램 서버에 액세스하여 웹 리소스에 액세스 할 수 있습니다. 공통 웹 애플리케이션 서버 WebLogic 서버 (BEA 회사), WebSphere 서버 (IBM 회사), Tomcat 서버 (Apache 회사). 처음 두 개는 유료이고 마지막 두 개는 무료이며 오픈 소스이며 나중에이 Tomcat 서버에 대해 점차적으로 배울 것입니다.

두 톰캣

Tomcat은 무료 서블릿 및 JSP 컨테이너입니다. Html 페이지 처리 기능과 함께 Servlet 및 JSP 컨테이너이기도합니다. 그런 다음 Tomcat 서버는 Http 서버 (웹 서버 / 웹 컨테이너)와 Servlet 컨테이너의 두 부분으로 나눌 수 있습니다. 전자는 주로 정적 리소스를 처리하는 데 사용되고 동적 요청은 후자에 위임되고 후자는 주로 사용됩니다. 동적 상호 작용을 처리합니다.

1. 서블릿이란

Java 기술의 웹 구성 요소 인 Servlet 구성 요소도 앞에서 언급했으며 Servlet 구성 요소는 서버 측에서 실행되며 Servlet 컨테이너에 의해 관리됩니다. 서블릿은 주로 인터랙티브 브라우징 및 데이터 수정을 처리하고 동적 웹 콘텐츠를 생성하므로 주로 비즈니스 로직 생성에 사용됩니다. 서블릿은 단독으로 실행할 수 없으며 인스턴스화되고 Serlvet의 관련 메서드 (doPost / doGet)라고하는 서블릿 컨테이너에 배포되어야합니다.

서블릿 사양을 따라야합니다.

2. 서블릿 컨테이너 란?

서블릿 컨테이너는 서블릿 엔진이라고도합니다 (톰캣의 네 가지 구성 요소 중 엔진에 해당한다고 생각합니다). 요청 및 응답을위한 네트워크 서비스를 제공하는 데 사용됩니다. MIME 디코딩 및 포맷을 기반으로합니다. 일반적인 MIME 유형은 text / html, application / pdf, video / quicktime, application / java, image / jpeg, application / jar, application / octet-stream, application / x-zip입니다.

따라서 Servlet 컨테이너의 기능은 다음과 같이 요약됩니다.

(1) 네트워크 서비스. Servlet은 ServerSocket을 설정하지 않고 Http 서버와 직접 통신 할 수 있으며, servlet은 비즈니스 로직에만 집중할 수 있습니다.

(2) 라이프 사이클 관리. 서블릿로드, 생성, 인스턴스화, 해당 서블릿 메서드 호출 및 가비지 수집을 담당합니다.

(3) 다중 스레드 관리. 서블릿에 대한 스레드를 자동으로 생성하면 서블릿이 실행 된 후 스레드가 자동으로 종료됩니다. 그러나 여전히 스레드 안전성 문제를 고려해야합니다.

(4) 신고 방법은 안전합니다. xml 배포 설명 파일을 사용하여 보안을 구성하고 수정하며 프로그램에 하드 코딩 할 필요가 없습니다.

(5) JSP 지원. jsp를 Java 코드로 변환 할 수 있습니다.

3. 서블릿 컨테이너 분류

웹 애플리케이션 서버에는 Java 서버와 비 Java 서버가 있습니다. 그런 다음 웹 애플리케이션 서버는 정적 자원과 동적 자원을 모두 처리해야합니다.

따라서 Java 서버의 경우 Servlet 컨테이너를 독립 웹 응용 프로그램 서버로 사용할 수 있습니다. 이것은 Serlvet 컨테이너첫 번째 유형 인 독립 Servlet 컨테이너입니다. 예를 들어 Tomcat의 기본값은 독립 Servlet 컨테이너입니다.

따라서 Java가 아닌 서버의 경우 Servlet 컨테이너에는 다음 두 가지 작업 방식이 있습니다 (서블릿 컨테이너를 다른 서버와 결합하는 것으로 이해 될 수 있다고 생각합니다. Servlet 컨테이너는 동적 상호 작용을 처리하는 데 사용되며 다른 서버는 정적 리소스를 처리하는 데 사용됩니다.) ) :

두 번째 유형의 서블릿 컨테이너 : 인 프로세스 서블릿 컨테이너 입니다.

세 번째 유형의 서블릿 컨테이너 : out-of-process 서블릿 컨테이너 .

이러한 두 가지 유형의 Servlet 컨테이너에는 웹 서버 플러그인 및 Java 컨테이너가 포함됩니다 (서블릿은 Java 기술의 구성 요소이므로 Java 환경에서 실행되어야 함).

운영 원칙은 클라이언트 요청이 수신되면 비 Java 서버가 요청을 수신하여 Servert 컨테이너로 전달하는 것입니다. 실제로 웹 서버 플러그인은 요청을 제어하고 요청을 Java 컨테이너로 전달합니다. , Java 컨테이너가 전송 중입니다. 요청이 Servlet으로 전달됩니다.

이 두 서블릿 컨테이너의 차이점 :

(1) In-process 서블릿 컨테이너 : 웹 서버 플러그인은 협력하는 웹 서버의 내부 주소 공간에서 JVM을 열어 Java 컨테이너가 JVM에서 서블릿을로드하고 실행할 수 있도록합니다. -process Servlet 컨테이너 : 웹 서버 외부의 주소 공간에서 실행되고 Java 컨테이너는 외부 JVM에서 실행됩니다.

(2) 웹 서버 플러그인은 Java 컨테이너로 전달됩니다. in-process Servlert 컨테이너는 JNI를 사용하고 out-of-process Servlet 컨테이너는 IPC를 사용합니다.

(3) In-process Servlet 컨테이너는 단일 프로세스 및 다중 스레드 서버에 적합하지만 확장 성이 충분하지 않습니다 .Out-of-process Servlet 컨테이너는 확장 성과 안정성이 더 좋지만 응답 속도가 프로세스 내 서블릿 컨테이너

Tomcat의 기본값은 독립 서블릿 컨테이너입니다.

4. 아키텍처

(1. 개요

Tomcat 서버는 일련의 구성 가능한 구성 요소로 구성되어 있으며 핵심 구성 요소는 다른 모든 Tomcat 구성 요소의 최상위 컨테이너 인 Catalina Servlet 컨테이너입니다. 먼저 tomcat 설치 파일 아래의 conf / server.xml 파일에서 Tomcat의 구성 요소에 대한 개요를 볼 수 있습니다.


<Server port="8005" shutdown="SHUTDOWN">
  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
  <GlobalNamingResources>
    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />
  </GlobalNamingResources>
  <Service name="Catalina">
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
               maxThreads="150" SSLEnabled="true">
        <SSLHostConfig>
            <Certificate certificateKeystoreFile="conf/localhost-rsa.jks"
                         type="RSA" />
        </SSLHostConfig>
    </Connector>
    <Engine name="Catalina" defaultHost="localhost">
      <Realm className="org.apache.catalina.realm.LockOutRealm">
      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
        <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
      </Host>
    </Engine>
  </Service>
</Server>

이 문서 구조에서 Tomcat의 구성 가능한 구성 요소 간의 포괄적 인 관계를 대략적으로 볼 수 있으며 이는 나중에 하위 섹션에서 설명합니다.

(2) 서버

전체 Catalina Servlet 컨테이너를 나타내는 최상위 구성 요소입니다. 하나 이상의 서비스를 포함 할 수 있습니다.

(3) 서비스

서비스에는 주로 이러한 커넥터를 엔진에 바인딩하는 하나 이상의 커넥터와 하나의 엔진 만 포함됩니다. 따라서 서비스는 두 부분으로 나눌 수 있습니다. 한 부분은 커넥터이고 다른 부분은 컨테이너입니다 (서블릿 컨테이너로 이해할 수 있다고 생각합니다). 이 컨테이너에는 주로 엔진, 호스트, 컨텍스트 및 래퍼의 네 부분이 포함됩니다.

  • 1) 커넥터

클라이언트와 통신하기 위해 하위 계층은 소켓을 통해 클라이언트와 연결을 설정하고 클라이언트의 요청을 수신하여 클라이언트에 응답 결과를 반환하고 컨테이너가 인식하고 전달할 수있는 요청 및 응답으로 정보를 캡슐화합니다. 컨테이너.

서비스에는 여러 커넥터가있을 수 있습니다. 일부 커넥터는 Https 프로토콜을 제공하고 일부 커넥터는 Ajp 프로토콜 등을 제공하여 클라이언트의 요청에 대한 응답을 완료 할 수 있습니다.

커넥터가 ProtocolHandler를 사용하여 요청을 처리하는 코드 계층에서 확인할 수 있습니다. org.apache.coyote 패키지 아래에있는 다른 ProtocolHandler 구현 클래스는 Http11Protocol, Http11NioProtocol, AjpNioProtocol 등과 같은 다른 연결 프로토콜을 나타냅니다.

각 ProtocolHandler에는 엔드 포인트, 프로세서 및 어댑터가 포함됩니다.

EndPoint : 기본 소켓의 네트워크 연결을 처리하고 클라이언트가 보낸 요청을 수신하고 TCP / IP 프로토콜을 구현합니다.

프로세서 : EndPoint가 수신 한 소켓을 Http 프로토콜 구현 요청으로 캡슐화합니다.

어댑터 : 수신 된 요청이 Servlet 사양을 따르지 않기 때문에 어댑터는 요청을 ServletRequest로 변환하고이를 컨테이너에 적용한 후 특정 처리를 위해 컨테이너에 제공합니다.

  • 2) 컨테이너

Servlert를 캡슐화 및 관리하고 Servlet을 통해 비즈니스 로직을 처리합니다. 앞서 언급했듯이 컨테이너에는 엔진, 호스트, 컨텍스트 및 래퍼의 네 부분이 포함됩니다. 다음 효과에 대한 간단한 단계별 설명 :

  • 엔진

Servlet 엔진이라고도하는 내가 이해하는 것은 Servlet을 관리하는 것입니다. 요청의 처리 흐름을 완료하는 서비스에는 엔진이 하나뿐입니다. 엔진은 여러 커넥터로부터 요청을 수신 할 수 있으며 엔진은이를 처리 한 후 해당 커넥터를 찾아 사용자에게 반환합니다.

엔진은 요청 및 응답 위에 네트워크 처리입니다. 즉, Servlet은 비즈니스 로직에만 신경을 쓰면되며 Connector와 연결을 설정하는 방법, Connector에서 정보를받는 방법, 이전에 해당하는 Connector를 찾는 방법 등이 모두 전달됩니다. 처리를위한 엔진.

사용자는 StandardEngine을 구현할 수 있지만 일반적으로 그렇게 할 필요는 없습니다.

  • 주최자

사이트라고도하는 가상 호스트. 엔진은 하나 이상의 호스트를 포함 할 수 있습니다. 사용자는 Host를 사용자 정의 할 필요가 없으며 StandardHost 만 구현하면됩니다.

  • 문맥

웹 응용 프로그램 (서블릿, Html 페이지, 클래스 및 기타 리소스 집합으로 구성되고 웹 서버에서 실행되는 응용 프로그램)은 특정 호스트에서 실행됩니다. 호스트는 하나 이상의 컨텍스트를 포함 할 수 있으며 각 컨텍스트에는 고유 한 경로가 있습니다. 기본적으로 Tomcat 구성 웹앱 아래의 각 폴더는 컨텍스트이고이 웹앱은 호스트입니다.

사용자는 Context를 사용자 정의 할 필요가 없으며 StandardContext를 구현하기 만하면됩니다.

  • 싸개

각 Wrapper는 Servlet을 캡슐화하여 비즈니스 로직을 캡슐화합니다.

컨테이너의이 네 부분은 책임 체인 모델을 통해 요청을 처리합니다. 각 부분은이 BaseValue에 해당하고 현재 값을 하나만 처리 한 다음 실행을 위해 다음 Value로 넘겨줍니다 .4 개의 값이 실행되면 결과가 Connector로 반환되고 Connector는 반환됩니다. 소켓을 통해 고객에게 전달합니다.

위에서 소개 한 많은 구성 요소에서 구성 요소는 신체에서 어떻게 통신합니까? 다음 그림은 이러한 질문에 답할 수 있습니다.

(4) 프로세스

  • 1. 사용자가 주소를 입력하거나 브라우저의 링크를 클릭하면 브라우저가 Tomcat 서버에 TCP 연결 요청을 보냅니다.
  • 2. Tomcat 서버는 요청 수신 및 연결 설정에 동의하며 이때 Connector를 통해 클라이언트와 연결이 설정됩니다.
  • 3. 브라우저는 Http 형식의 데이터 패킷을 생성하고 Http 요청을 Tomcat 서버로 보냅니다.
  • 4. 커넥터가 요청을 수신하면 앞서 언급 한 세 가지 구성 요소 인 EndPoint, Processor 및 Adapter를 통해 요청을 ServletRequest로 캡슐화하고 컨테이너를 보냅니다.
  • 5. Engine은 요청을 수신 한 후 url과 Servlet 간의 매핑 관계에 따라 특정 Servlet을 찾습니다.
  • 6. 서블릿이 비즈니스 로직을 처리 한 후 엔진은 처리 결과를 해당 커넥터에 반환합니다.
  • 7. Connector가 응답 결과를 브라우저에 보냅니다.
  • 8. 브라우저가 데이터를 수신하면 데이터를 Http 형식으로 구문 분석하고 결과를 사용자에게 제공합니다.

간단히 말해서:

브라우저는 커넥터를 통해 웹 서버와의 연결을 설정합니다.

브라우저는 요청을 해당 커넥터로 보냅니다.

커넥터는 요청을 수신 한 후 요청을 캡슐화하여 컨테이너로 전달합니다.

컨테이너는 비즈니스 로직을 처리하기 위해 해당 서블릿을 찾는 책임이 있습니다.

컨테이너는 응답 결과를 Connector에 반환합니다.

커넥터는 응답 결과를 브라우저에 반환합니다.

브라우저는 인식 가능한 데이터로 구문 분석하여 사용자에게 표시합니다.

세 가지 요약

일주일 간의 학습 끝에 마침내 Tomcat의 기본 요청 처리 프로세스 인 Tomcat이 무엇인지 알아 냈습니다. 그러나 실제로 Serlvet 컨테이너 분류에 언급 된 두 번째와 세 번째는 아직 잘 이해되지 않았고 요약도 좋지 않아 관련 정보를 찾아야합니다.

또한 습득 한 내용과 현재 회사 프로젝트 코드 구조 사이에는 여전히 약간의 불일치가 있으며 나중에 계속 공부할 것입니다. 자, 마지막으로 웹 애플리케이션 개발에 대해 조금 이해하십시오. 이전에는이 ​​요청이 어떻게 웹 서버로 전송되었는지 몰랐지만 이제 마침내 알아 냈습니다.

다음 기사는 Xiaobai (2)의 초보자 웹 개발 에 대한 간단한 요약 을 이해하는 것입니다. web.xml이란 무엇입니까?

추천

출처blog.csdn.net/nihaomabmt/article/details/113180885