Javaサーブレットとは何ですか?JavaWebアプリケーションのリクエスト処理

リクエストの処理は、JavaWebアプリケーション開発の基本です。ネットワークからの要求に応答するために、Java Webアプリケーションは、最初に要求URLに応答するコードを決定してから、応答をマーシャリングする必要があります。すべてのテクノロジースタックには、要求と応答の処理を実行する方法があります。Javaでは、この目的のためにサーブレット(およびJavaサーブレットAPI)を使用します。サーブレットは、要求を受け入れて応答を発行することを仕事とする小さなサーバーと考えてください。

URLとエンドポイント

インターネットユーザーは、ブラウザのWebサイトアドレスとしてのURLに精通しています。開発者は、WebサービスのエンドポイントとしてURLを知っているかもしれません。A URL(ユニフォームリソースロケータ)が記述したテキストを使用してインターネットリソースを検索するための標準的な方法です。エンドポイントという用語は、Webサービスを示すURLを指します。エンドポイントURLという用語は、異なる使用ドメインを指しますが、しばしば同じ意味で使用されます。

レイヤーとしてのソフトウェア

Javaランタイム環境の紹介で説明したように、ソフトウェアは一連のレイヤーと見なすことができます。ソフトウェアシステムの各レイヤーは、その上のレイヤーに必要な特定の機能を保持しています。例として、ハードウェア層はファームウェア層の下にあり、その機能をサポートしています。同様に、オペレーティングシステムを実行するには、ファームウェアレイヤー(PCの場合はBIOS、Macの場合はEFI)が必要です。図1は、これら3つのコンポーネントを階層図で示しています。

マシュータイソン

また、ソフトウェアシステムを一連のコンテナと見なすこともできます。この場合、下位層は上位層のコンテナとして機能します。各レイヤーは、次のレベルの機能を実行するためのコンテキストとして機能します。ハードウェアにはファームウェアが含まれ、ファームウェアにはオペレーティングシステムが含まれます。

サーバーサイドJava

サーバー・サイドのJavaアプリケーションは、与えられたURLからHTTPリクエストを受信し、HMTLまたはJSONのような交換フォーマットでバックデータを送信し、ネットワークエンドポイントとして機能するアプリケーションの幅広いクラスの一つです。サーバー側Javaは、標準化されたJavaサーバーと、それらのサーバーと対話するためのテクノロジーの両方で構成されています。JavaサーブレットAPIは、Javaサーバーとの対話に使用される標準です。

JavaサーバーとJVM

Javaベースのシステムでは、オペレーティングシステム(OS)にJVMが含まれており、Javaアプリケーションを実行するための一貫した環境を提供します。JavaサーバーはJVMの上にあります。JVMがOSとJavaアプリケーションの間の仲介者であるように、Javaサーバーは、オペレーティングシステムのネットワークおよび処理機能への一貫した合理化されたアクセスを提供します。Javaアプリケーションはサーバー内で実行され、JavaサーブレットAPIを使用してサーバーの機能にアクセスします。

図2は、サーバー側Javaのソフトウェアスタックを示しています。

マシュータイソン

Javaサーブレット仕様

Javaサーブレット仕様は、Javaサーバーおよび関連コンポーネントの基礎となる定義を提供します。これは、HTTPを介したネットワーク対話中にサーバーが要求と応答を送信する方法を定義します。すべてのJavaサーバーは、Javaサーブレット仕様と互換性がある必要があります。今日のほとんどのJavaサーバーはサーブレット4.0と互換性があります。

サーブレット4.0

Javaサーブレット仕様の各バージョンは、新しい機能をもたらします。サーブレット4.0には、HTTP / 2プロトコルとそのサーバープッシュメカニズムのサポートが含まれています。サーバープッシュを使用すると、サーバーは特定の要求を待つのではなく、Webページに必要なアセットをプリロードできます。サーブレット4.0仕様には、実行時にURLマッピングを検出する機能も組み込まれています。これは、実行時検出と呼ばれる機能です。

Eclipse Enterprise for Java

サーブレット4.0は、オープンソースのEE4J(Eclipse Enterprise for Java)イニシアチブの一部であり、JCPの代替案が含まれています。

サーブレット仕様がどのように機能するかを実際に理解するには、現在読んでいる記事を検討してください。JavaWorldのインフラストラクチャのどこかで、この記事はフォーマットされ、公開のために提出されました。URLが割り当てられ、ネットワークを介してルーティングされ、サーバーに到着しました。サーバーはアーティファクト(記事)をURLに接続し、そのURLに対してGET要求が到着すると、この記事をHTMLとして提供することを決定しました。

Java Webアプリケーションを作成すると、Javaサーバー内で実行されるソフトウェアが作成されます。アプリケーションはサーバーコンテキストによって提供される機能を利用し、それらの機能の1つはサーブレットAPIです。このため、サーブレット仕様を実装するJavaサーバーは、サーブレットコンテナと呼ばれることもあります

サーブレットを作成するには、Servletインターフェースを実装し、サーブレットコンテナ内にデプロイします。図3は、アプリケーションがサーブレットにどのように依存しているかを示しています。

マシュータイソン

Tomcatを使用したサーブレットの作成

概念の概要がわかったので、Javaサーブレットの作成に取り掛かりましょう。

最初に必要になるのは、Javaアプリケーションサーバーとも呼ばれるサーブレットコンテナです。TomcatとJettyは、最も人気のあるサーブレットコンテナの2つです。TomcatはJava用の最も長年のアプリケーションサーバーの1つであるため、Tomcatを使用します。Tomcatは無料で、最小限のベルとホイッスルが含まれているため、この例では物事がシンプルになります。(ちなみに、「ベルとホイッスル」は専門用語です。)

Tomcatをダウンロードしてインストールします

Tomcatをまだお持ちでない場合は、Tomcatダウンロードページを開くことから始めます。そこで、Windowsインストーラーまたはコンピューターに最適なZIPダウンロードのいずれかを選択できます(たとえば、64ビットのWindows zipをダウンロードしています)。

これで、オペレーティングシステムにJavaサーバーレイヤーが追加されました。

Tomcatが実行されていることを確認します

先に進む前に、Tomcatを実行できることを確認しましょう。Windowsサービスを開始するか、コマンドラインから実行startup.shまたはstartup.batファイルします。

ここでWebブラウザーを開いてに移動するlocalhost:8080と、次の画面が表示されます。

マシュータイソン

Tomcatの実行中に問題が発生した場合は、Tomcatのドキュメントにアクセスしてトラブルシューティングを行うことができます。

Tomcatサーブレットの例を実行します

それでは、Javaサーブレットを見てみましょう。便利なことに、Tomcatにはいくつかの簡単な例が含まれています。

Tomcatウェルカムページの「開発者クイックスタート」セクションにある「例」リンクをクリックします。そこに着いたら、「サーブレットの例」リンクをクリックします。

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パターンに割り当てるために使用されます。JavaServer Pages(JSP)仕様は、はるかに強力な方法でHTMLを生成するためのサポートを提供します。

結論

この記事は、Javaサーバー内でのURL要求と応答の処理を含む、Javaサーブレットの概念的な概要です。サーバー側Javaのこれらの基本要素を理解すると、サーブレット4.0の新機能であるサーバープッシュやURLマッピングのランタイム検出などのより高度な概念を統合するのに役立ちます。

このストーリー「Javaサーブレットとは?Java Webアプリケーションのリクエスト処理」は、もともとJavaWorldによって公開されました。