初心者向けのJava Webアプリケーションチュートリアル

Java Webアプリケーションは、動的なウェブサイトを作成するために使用されます。 Javaは、ServletsJSPsを介してWebアプリケーションのサポートを提供します。静的なHTMLページでウェブサイトを作成できますが、情報を動的にする場合はWebアプリケーションが必要です。

Java Webアプリケーション

この記事の目的は、Webアプリケーション内の異なるコンポーネントの基本的な詳細と、ServletとJSPを使用して最初のJava Webアプリケーションを作成する方法を提供することです。

  1. Webサーバーとクライアント
  2. HTMLとHTTP
  3. URLの理解
  4. なぜServletとJSPが必要なのか?
  5. ServletとJSPを使用した最初のWebアプリケーション
  6. Webコンテナ
  7. Webアプリケーションディレクトリ構造
  8. デプロイメント記述子

Webサーバーとクライアント

Webサーバーは、クライアントのリクエストを処理し、クライアントに応答を返すソフトウェアです。たとえば、Apacheは最も広く利用されているWebサーバーの1つです。Webサーバーは物理マシン上で実行され、特定のポートでクライアントのリクエストを待機します。Webクライアントは、サーバーと通信するのに役立つソフトウェアです。最も広く利用されているWebクライアントのいくつかは、Firefox、Google Chrome、Safariなどです。サーバーから何かをリクエストすると(URLを介して)、Webクライアントはリクエストを作成し、サーバーに送信し、サーバーからの応答を解析してユーザーに表示します。

HTMLとHTTP

WebサーバーとWebクライアントは2つの別々のソフトウェアですので、通信には共通の言語が必要です。HTMLはサーバーとクライアントの間の共通言語であり、HyperText Markup Languageの略です。Webサーバーとクライアントには、共通の通信プロトコルが必要ですが、HTTP(HyperText Transfer Protocol)がサーバーとクライアント間の通信プロトコルです。HTTPはTCP/IP通信プロトコルの上で実行されます。HTTPリクエストの重要な部分には、次のものがあります:

  • HTTPメソッド – 実行するアクション、通常はGET、POST、PUTなど
  • URL – アクセスするページ
  • フォームパラメータ – Javaメソッドの引数と同様で、ログインページからのユーザー、パスワードの詳細などです。

サンプルHTTPリクエスト:

GET /FirstServletProject/jsps/hello.jsp HTTP/1.1
Host: localhost:8080
Cache-Control: no-cache

HTTPレスポンスの重要な部分のいくつかは:

  • ステータスコード – リクエストが成功したかどうかを示す整数です。一部のよく知られたステータスコードは、成功のための200、見つかりませんのための404、アクセスが禁止されているための403などです。
  • コンテンツタイプ – テキスト、HTML、画像、PDFなど。 MIMEタイプとしても知られています
  • コンテンツ – クライアントによってレンダリングされ、ユーザーに表示される実際のデータです。

サンプルHTTPレスポンス:

200 OK
Date: Wed, 07 Aug 2013 19:55:50 GMT
Server: Apache-Coyote/1.1
Content-Length: 309
Content-Type: text/html;charset=US-ASCII

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Hello</title>
</head>
<body>
<h2>Hi There!</h2>
<br>
<h3>Date=Wed Aug 07 12:57:55 PDT 2013
</h3>
</body>
</html>

MIMEタイプまたはコンテンツタイプ:上記のサンプルHTTPレスポンスヘッダーを見ると、タグ “Content-Type”が含まれています。 MIMEタイプとも呼ばれ、サーバーはこれをクライアントに送信して、送信するデータの種類を知らせます。これにより、クライアントはデータをユーザーに表示するのに役立ちます。最もよく使用されるMIMEタイプには、text/html、text/xml、application/xmlなどがあります。

URLの理解

URLはUniversal Resource Locatorの略であり、サーバーとリソースを特定するために使用されます。Web上のすべてのリソースには固有のアドレスがあります。例を示してURLの部分を見てみましょう。

https://localhost:8080/FirstServletProject/jsps/hello.jsp
https:// – これはURLの最初の部分であり、サーバーとクライアントの通信に使用される通信プロトコルを提供します。

localhost – サーバーの固有のアドレスであり、ほとんどの場合、ホスト名が固有のIPアドレスにマップされます。時には複数のホスト名が同じIPアドレスを指し示し、Webサーバーの仮想ホストが特定のサーバーインスタンスにリクエストを送信します。

8080 – サーバーがリスニングしているポートで、オプションです。URLで提供しない場合、リクエストはプロトコルのデフォルトポートに送信されます。ポート番号0から1023は、よく知られたサービスの予約済みポートです。たとえば、HTTP用の80、HTTPS用の443、FTP用の21などです。

FirstServletProject/jsps/hello.jsp – サーバーからリクエストされたリソースです。静的HTML、PDF、JSP、サーブレット、PHPなどが含まれます。

ServletとJSPが必要な理由は何ですか?

Webサーバーは静的コンテンツのHTMLページに適していますが、動的なコンテンツの生成やデータベースへのデータ保存の方法を知りませんので、動的なコンテンツを生成するために別のツールが必要です。PHP、Python、Ruby on Rails、Java Servlets、JSPなど、いくつかのプログラミング言語が動的コンテンツに使用されます。Java ServletとJSPは、動的な応答とデータの永続性のためのサーバーサイド技術で、Webサーバーの機能を拡張します。

Java Web開発

ServletとJSPを使用した最初のWebアプリケーション

最初のサーブレットアプリケーションを作成するために「Eclipse IDE for Java EE Developers」を使用します。サーブレットはサーバーサイド技術なので、ServletテクノロジーをサポートするWebコンテナが必要です。そのため、Apache Tomcatサーバーを使用します。セットアップは非常に簡単で、その部分はあなたに任せます。開発の便宜のために、TomcatをEclipseで構成できます。これにより、アプリケーションの簡単な展開と実行が可能になります。Eclipseの[設定]に移動し、[サーバーランタイム環境]を選択し、Tomcatサーバーのバージョンを選択します。私の場合はTomcat 7です。ランタイム環境を追加するために、Apache Tomcatのディレクトリ場所とJRE情報を提供します。次に、[サーバービュー]に移動し、上記で追加したランタイム環境を指す新しいサーバーを作成します。画像を参照してください。 注意: サーバータブが表示されていない場合は、ウィンドウを選択して[表示] > [サーバー]を選択して、Eclipseウィンドウで表示されるようにします。サーバーが正常に動作していることを確認するために、サーバーを停止してから再起動してください。既にターミナルからサーバーを起動している場合は、ターミナルから停止してからEclipseから起動する必要があります。さもないと、完全に動作しません。これで、最初のサーブレットを作成してTomcatサーバーで実行する準備が整いました。ファイル > 新規 > 動的Webプロジェクトを選択し、前のステップで追加したサーバーをランタイムとして提供し、モジュールバージョンを3.0に設定して、Servlet 3.0仕様を使用してサーブレットを作成します。画像を参照してください。 プロジェクトを作成するには、[完了]ボタンを直接クリックするか、[次へ]ボタンをクリックして他のオプションを確認できます。次に、ファイル > 新規 > サーブレットを選択し、最初のサーブレットを作成します。再び、完了をクリックするか、次のボタンをクリックして他のオプションを確認できます。[完了]ボタンをクリックすると、サーブレットのスケルトンコードが生成されるため、異なるメソッドやインポートをすべて入力する必要はありません。これで、私たちの最初のサーブレットが完成しました。

package com.journaldev.first;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class FirstServlet
 */
@WebServlet(description = "My First Servlet", urlPatterns = { "/FirstServlet" , "/FirstServlet.do"}, initParams = {@WebInitParam(name="id",value="1"),@WebInitParam(name="name",value="pankaj")})
public class FirstServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	public static final String HTML_START="";
	public static final String HTML_END="";
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public FirstServlet() {
        super();
        // TODO 自動生成されたコンストラクターのスタブ
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		PrintWriter out = response.getWriter();
		Date date = new Date();
		out.println(HTML_START + "

Hi There!


Date="+date +"

"+HTML_END); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO 自動生成されたメソッドのスタブ } }

Before Servlet 3, ウェブアプリケーションのデプロイディスクリプタにURLパターン情報を提供する必要がありましたが、Servlet 3.0では、Java注釈を使用して理解しやすく、エラーの可能性が低くなりました。現在、ServletエディタウィンドウからRun > Run on Serverオプションを選択し、以下の画像を使用します。 Finishをクリックすると、Eclipseでブラウザが開き、次のHTMLページが表示されます。 ブラウザを更新して日付が動的で変化し続けるか確認できます。Eclipseの外部でも他のブラウザで開くことができます。したがって、ServletはHTMLを生成して応答で送信するために使用されます。doGet()の実装を見ればわかるように、実際にはHTMLドキュメントを作成してそれを応答のPrintWriterオブジェクトに書き込み、必要な場所に動的な情報を追加しています。これは初めてのスタートには良いですが、応答が巨大で多くの動的データがある場合、エラーが発生しやすく、読み取りおよび保守が難しくなります。これがJSPが導入された主な理由です。JSPもサーバーサイドの技術であり、HTMLのようなものですが、必要な場所に動的なコンテンツを追加するための追加の機能があります。JSPはプレゼンテーションに適しています。HTMLのように書きやすいからです。ここには、上記のサーブレットと同じことを行う最初のJSPプログラムがあります。

<%@page import="java.util.Date"%>
<%@ page language="java" contentType="text/html; charset=US-ASCII"
    pageEncoding="US-ASCII"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Hello</title>
</head>
<body>
<h2>Hi There!</h2>
<br>
<h3>Date=<%= new Date() %>
</h3>
</body>
</html>

上記のJSPを実行すると、以下の画像のような出力が得られます。 最終的なプロジェクトの階層は、Eclipseで以下の画像のようになります。

FirstServletプロジェクトのダウンロード

Hello Worldサーブレットの例プロジェクトのダウンロード

今後の投稿では、ServletとJSPについて詳しく説明しますが、この投稿を終える前に、Javaのウェブアプリケーションのいくつかの側面について十分な理解を持っている必要があります。

Webコンテナ

TomcatはWebコンテナであり、クライアントからWebサーバーにリクエストが行われると、リクエストはWebコンテナに渡され、正しいリソース(サーブレットまたはJSP)を見つけてリクエストを処理し、リソースからのレスポンスを使用してレスポンスを生成し、Webサーバーに提供します。その後、Webサーバーはレスポンスをクライアントに送信します。Webコンテナがリクエストを受け取り、サーブレットの場合は、コンテナは2つのオブジェクトHTTPServletRequestとHTTPServletResponseを作成します。次に、URLに基づいて正しいサーブレットを見つけ、リクエスト用のスレッドを作成します。そして、サーブレットのservice()メソッドを呼び出し、HTTPメソッドに基づいてservice()メソッドはdoGet()またはdoPost()メソッドを呼び出します。サーブレットのメソッドは動的なページを生成し、それをレスポンスに書き込みます。サーブレットのスレッドが完了すると、コンテナはレスポンスをHTTPレスポンスに変換してクライアントに送信します。Webコンテナが行う重要な作業の一部は次のとおりです:

  • 通信サポート – コンテナは、Webサーバーとサーブレット、JSP間の簡単な通信方法を提供します。コンテナのおかげで、Webサーバーからのリクエストを待ち受けるためのサーバーソケットを構築したり、リクエストを解析してレスポンスを生成する必要はありません。これらすべての重要な複雑なタスクはコンテナによって処理され、私たちが集中すべきはアプリケーションのビジネスロジックです。
  • ライフサイクルとリソース管理 – コンテナはサーブレットのライフサイクルを管理します。コンテナはサーブレットをメモリにロードし、サーブレットの初期化、サーブレットメソッドの呼び出し、サーブレットの破棄を管理します。また、コンテナはリソースプーリングと管理のためのJNDIのようなユーティリティも提供します。
  • マルチスレッドサポート – コンテナは、サーブレットへの各リクエストごとに新しいスレッドを作成し、そのスレッドが処理されるとスレッドは終了します。したがって、サーブレットは各リクエストごとに初期化されず、時間とメモリを節約します。
  • JSPサポート – JSPは通常のJavaクラスのようには見えず、WebコンテナがJSPをサポートします。アプリケーション内のすべてのJSPはコンテナによってコンパイルされ、Servletに変換され、その後、コンテナが他のサーブレットと同様に管理します。
  • その他のタスク – Webコンテナはリソースプールを管理し、メモリの最適化、ガベージコレクタの実行、セキュリティ構成の提供、複数のアプリケーションのサポート、ホットデプロイメントなど、私たちの生活をより簡単にする裏側でのさまざまなタスクを処理します。

Webアプリケーションディレクトリ構造

Java WebアプリケーションはWebアーカイブ(WAR)としてパッケージ化され、定義された構造を持っています。上記のダイナミックWebプロジェクトをWARファイルとしてエクスポートし、その階層を確認するために展開できます。以下の画像のようなものになります。

デプロイメント記述子

web.xmlファイルはWebアプリケーションのデプロイメント記述子であり、サーブレット(3.0より前)、ウェルカムページ、セキュリティ設定、セッションタイムアウトの設定などを含んでいます。これでJava Webアプリケーションの起動チュートリアルは終了です。将来の投稿ではサーブレットとJSPをさらに探求します。更新: このシリーズの次のチュートリアルはJava Servlets Tutorialです。

Source:
https://www.digitalocean.com/community/tutorials/java-web-application-tutorial-for-beginners