Java 서블릿이란 무엇입니까? Java 웹 애플리케이션에 대한 요청 처리

요청 처리는 Java 웹 애플리케이션 개발의 기본입니다. 네트워크의 요청에 응답하기 위해 Java 웹 애플리케이션은 먼저 요청 URL에 응답 할 코드를 결정한 다음 응답을 마샬링해야합니다. 모든 기술 스택에는 요청-응답 처리를 수행하는 방법이 있습니다. Java에서는이를 위해 서블릿 (및 Java Servlet API)을 사용합니다. 서블릿을 요청을 수락하고 응답을 발행하는 작업을 수행하는 작은 서버로 생각하십시오.

URL 대 끝점

인터넷 사용자는 브라우저의 웹 사이트 주소 인 URL에 익숙합니다. 개발자는 웹 서비스의 끝점으로 URL을 알고있을 수도 있습니다. URL (유니폼 리소스 로케이터)을 설명하고 텍스트를 사용하여 인터넷 리소스를 찾을 수있는 표준 방법입니다. 엔드 포인트 라는 용어 는 웹 서비스를 나타내는 URL을 나타냅니다. 엔드 포인트URL 이라는 용어 는 서로 다른 사용 도메인을 나타내지 만 종종 같은 의미로 사용됩니다.

레이어로서의 소프트웨어

Java Runtime Environment 소개에서 설명했듯이 소프트웨어를 일련의 계층으로 볼 수 있습니다. 소프트웨어 시스템의 각 계층에는 상위 계층에 필요한 특정 기능이 있습니다. 예를 들어 하드웨어 계층은 펌웨어 계층 아래에 ​​위치하여 기능을 지원합니다. 마찬가지로 운영 체제를 실행하려면 펌웨어 계층 (PC의 BIOS 또는 Mac의 EFI)이 필요합니다. 그림 1은 이러한 세 가지 구성 요소를 계층 다이어그램으로 보여줍니다.

매튜 타이슨

또한 소프트웨어 시스템을 일련의 컨테이너 로 볼 수 있습니다 . 여기서 하위 계층은 상위 계층의 컨테이너 역할을합니다. 각 계층은 다음 수준의 기능을 실행하기위한 컨텍스트 역할 을합니다. 하드웨어에는 펌웨어가 포함되고 펌웨어에는 운영 체제가 포함됩니다.

서버 측 자바

서버 측 자바 애플리케이션은 네트워크 엔드 포인트의 역할을 응용, 주어진 URL에서 HTTP 요청을 수신 HMTL 또는 JSON과 같은 교환 형식에서 데이터를 전송하는 다양한 클래스의 하나입니다. 서버 측 Java는 표준화 된 Java 서버와 해당 서버와 상호 작용하기위한 기술로 구성됩니다. Java Servlet API는 Java 서버와 상호 작용하는 데 사용되는 표준입니다.

자바 서버와 JVM

Java 기반 시스템에서 운영 체제 (OS)에는 Java 애플리케이션 실행을위한 일관된 환경을 제공하는 JVM이 포함되어 있습니다. Java 서버는 JVM 위에 있습니다. JVM이 OS와 Java 애플리케이션 사이의 중개자 인 것처럼 Java 서버는 운영 체제의 네트워킹 및 처리 기능에 대한 일관되고 능률적 인 액세스를 제공합니다. Java 애플리케이션은 서버의 기능에 액세스하기 위해 Java Servlet API를 사용하여 서버 내에서 실행됩니다.

그림 2는 서버 측 Java 용 소프트웨어 스택을 보여줍니다.

매튜 타이슨

자바 서블릿 사양

Java Servlet 사양은 Java 서버 및 관련 구성 요소에 대한 기본 정의를 제공합니다. HTTP를 통한 네트워크 상호 작용 중에 서버가 요청 및 응답을 보내는 방법을 정의합니다. 모든 Java 서버는 Java Servlet 사양과 호환되어야합니다. 오늘날 대부분의 Java 서버는 Servlet 4.0과 호환됩니다.

서블릿 4.0

Java Servlet 사양의 각 버전은 새로운 기능을 제공합니다. Servlet 4.0에는 HTTP / 2 프로토콜 및 서버 푸시 메커니즘에 대한 지원이 포함되어 있습니다. 서버 푸시를 사용하면 서버가 특정 요청을 기다리지 않고 웹 페이지에 필요한 자산을 미리로드 할 수 있습니다. Servlet 4.0 사양은 또한 런타임 검색으로 알려진 기능인 런타임에 URL 매핑을 검색하는 기능을 통합합니다 .

Java 용 Eclipse Enterprise

Servlet 4.0은 오픈 소스 EE4J (Eclipse Enterprise for Java) 이니셔티브의 일부이며 JCP에 대한 대체 제안이 포함되어 있습니다.

서블릿 사양이 어떻게 작동하는지에 대한 실질적인 이해를 위해 현재 읽고있는 기사를 고려하십시오. JavaWorld의 인프라 어딘가에서이 기사는 형식화되어 게시를 위해 제출되었습니다. URL이 할당되고 네트워크를 통해 라우팅되고 서버에 도착했습니다. 서버는 아티팩트 (기사)를 URL과 연결하고 해당 URL에 대한 GET 요청이 도착하면이 기사를 HTML로 제공 할 것이라고 결정했습니다.

Java 웹 응용 프로그램을 만들면 Java 서버 내에서 실행되는 소프트웨어가 만들어집니다. 애플리케이션은 서버 컨텍스트에서 제공하는 기능을 활용하며 이러한 기능 중 하나는 Servlet API입니다. 이러한 이유로 서블릿 사양을 구현하는 Java 서버를 서블릿 컨테이너 라고도합니다 .

서블릿을 생성하려면 Servlet인터페이스 를 구현하고 서블릿 컨테이너 내부에 배포합니다. 그림 3은 애플리케이션이 서블릿에 의존하는 방식을 보여줍니다.

매튜 타이슨

Tomcat으로 서블릿 작성

이제 개념적 개요를 얻었으므로 Java 서블릿을 작성하는 비즈니스에 대해 살펴 보겠습니다.

가장 먼저 필요한 것은 자바 애플리케이션 서버라고도하는 서블릿 컨테이너입니다. Tomcat과 Jetty는 가장 많이 사용되는 두 개의 서블릿 컨테이너입니다. 가장 오래된 Java 용 애플리케이션 서버 중 하나이기 때문에 Tomcat을 사용할 것입니다. Tomcat은 무료이며 최소한의 종소리와 휘파람이 포함되어있어 예제를 간단하게 유지할 수 있습니다. ( "벨과 휘파람"은 기술적 인 용어입니다.)

Tomcat 다운로드 및 설치

아직 Tomcat이없는 경우 Tomcat 다운로드 페이지를 열어 시작하십시오. 여기에서 Windows 설치 프로그램 또는 컴퓨터에 가장 적합한 ZIP 다운로드를 선택할 수 있습니다 (예 : 64 비트 Windows zip을 다운로드합니다).

그게 다입니다. Java 서버 계층을 운영 체제에 추가했습니다!

Tomcat이 실행 중인지 확인

계속 진행하기 전에 Tomcat을 실행할 수 있는지 확인하십시오. Windows 서비스를 시작하거나 명령 줄에서 startup.sh또는 startup.bat파일을 실행 합니다.

이제 웹 브라우저를 열고로 이동 localhost:8080하면 다음 화면이 표시됩니다.

매튜 타이슨

Tomcat 실행 중 문제가 발생하면 Tomcat 설명서를 방문하여 문제를 해결할 수 있습니다.

Tomcat 서블릿 예제 실행

이제 Java 서블릿을 살펴 보겠습니다. 편리하게도 Tomcat에는 몇 가지 간단한 예제가 포함되어 있습니다.

Tomcat 시작 페이지 의 개발자 빠른 시작 섹션 에있는 예제 링크를 클릭 하십시오. 거기에 있으면 Servlet Examples 링크를 클릭하십시오 .

Now you can see a simple Servlet in action by clicking the Hello World sample's Execute link. That will bring your browser to the //localhost:8080/examples/servlets/servlet/HelloWorldExample URL, where you will see the perennial programmer's salutation.

Viewing the servlet source code

Click the Back arrow in your browser, then click the source link for the HelloWorld app. The source is shown in Listing 1.

Listing 1. Source code for HelloWorld example

 import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloWorld extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println(""); out.println(""); out.println("Hello World!"); out.println(""); out.println(""); out.println(""); out.println(""); out.println(""); } } 

This very simple code listing contains the basic components of a Java servlet. Let's consider it step by step.

The first line calls the standard Java imports. After that, the program defines a new class, which extends the HttpServlet class. This is critical because servlets must implement the Servlet interface in order to run inside a servlet container.

Next, the HelloWorld class defines a method called doGet(). This is a standard method on servlets: it tells the server to route HTTP GET requests to this method. Other HTTP methods, like POST, are handled by similarly named methods, like doPost.

Notice that that doGet() has two parameters: (HttpServletRequest request, HttpServletResponse response). These two objects represent the request and response. They provide access to everything your code needs to deal with the request and issue a response. In the HelloWorld.doGet servlet method, for example, the response object is used to inform the server what content type header to issue. In this case, it's response.setContentType("text/html");.

Finally, the program obtains a Java Writer object from the response response.getWriter(). The Writer is then used to create a simple HTML response to return to the browser.

URL mapping

The structure and code flow in Listing 1 are fairly intuitive, but there is a glaring omission. How does the server know to associate the //localhost:8080/examples/servlets/servlet/HelloWorldExample URL to the HelloWorld.doGet method?

You will find the answer to this mystery in the application meta-data. Every Java web application includes a standard meta-data file, called web.xml, which tells the server how to map URLs to servlets.

What is meta-data?

Meta-data is any information that is used to control the operation of software from outside the software itself.

In the Tomcat example apps, the web.xml is found at \apache-tomcat-9.0.11\webapps\examples\WEB-INF\web.xml. The \WEB-INF\web.xml is the standard location of the meta-data file for servlets. If you open this file, you'll see how the server is configured.

The abbreviated web.xml in Listing 2 has just the information we need for our discussion.

Listing 2. Source code for the Tomcat HelloWorld example

     HelloWorldExample HelloWorldExample   HelloWorldExample /servlets/servlet/HelloWorldExample    

Listing 2 shows a typical XML file header referencing the schema for a Java web application descriptor. This is followed by two entries: and.

The call to assigns a logical name, HelloWorldExample, to the HelloWorldExample class, via the and fields.

The call to assigns that logical name to the value, thereby associating the code to the URL.

Note that the field supports wild cards in order to handle a variety of flexible URL mappings.

Other servlet capabilities

URL 매핑 외에도 서블릿은 필터링 및 인증을위한 추가 기능을 제공합니다. 요청을 처리하는 데 필터 가 사용 되며 URL 패턴에 간단한 사용자 및 역할을 할당하는 데 인증 이 사용됩니다. JSP (JavaServer Pages) 사양은 훨씬 더 강력한 방식으로 HTML 생성을 지원합니다.

결론

이 기사는 Java 서버 내부의 URL 요청 및 응답 처리를 포함하여 Java 서블릿에 대한 개념적 개요입니다. 서버 측 Java의 이러한 기본 요소를 이해하면 Servlet 4.0의 새로운 기능인 서버 푸시 및 URL 매핑의 런타임 검색과 같은 고급 개념을 통합하는 데 도움이됩니다.

"Java 서블릿이란 무엇입니까? Java 웹 애플리케이션에 대한 요청 처리"라는이 스토리는 원래 JavaWorld에서 게시했습니다.