連載
» 2016年07月26日 05時00分 公開

サーブレットを作って分かるJava Webアプリの基本的な仕組み初心者のためのサーブレット/JSP入門(3)(2/3 ページ)

[金城俊哉,著]

サーブレットを作ると何ができるの?

 サーブレットの実体は、Javaのクラスです。Javaでは、クラスという単位でデータやメソッドを管理します。いわば、アプリケーションにおける特定の処理を行うソースコードを1つのクラスにまとめておくのですが、サーブレットもクラスとして定義します。

サーブレットが実行されるとHTMLが出力される

Driver

「なるほど、サーブレットってJavaのクラスなんですね。ってことは、フィールド(変数)やらメソッドやらをクラスの内部に作って、何かの処理を行わせるのですね」


Navigator

「サーブレットはクラスなので、インスタンス化を行ってメモリ上に読み込む必要があります。クラスやインスタンスについては『ミドルエンジニアの素朴な疑問』で触れていますので、よければあとで参照してみてください。で、サーブレットが実行される流れは次のようになります」


サーブレットが実行される流れ
Navigator

「クライアントのブラウザーからリクエストがあると、アプリケーションサーバー内でサーブレットが実行され、処理結果としてHTMLが出力されるという流れになります。もちろん、HTMLを出力するためのメソッドはサーブレットクラス内部で定義しますので、何らかの処理を行ったあと、このメソッドが実行されてHTMLが出力されます」


Driver

「えっと、アクセスされるとサーブレットが実行されるってことですが、クラスはインスタンス化しなきゃならないですよね。インスタンス化はどこで行われるんです?」


Navigator

「スルドイ質問ですね。インスタンス化は、アプリケーションサーバー(GlassFish)の内部でインスタンス化の処理が行われます。アプリケーションサーバーに搭載されているサーブレットやJSPを実行する機能のことを『JSP&サーブレットコンテナー』と呼ぶことがありますが、このコンテナーがインスタンス化を行い、内部のメソッドを呼び出すようになっています」


Driver

「えーっと、Javaのプログラムってmain()メソッドから実行されますよね。main()はどうなってるんですか?」


Navigator

「さらにスルドイですね。確かにJavaのプログラムは、起動直後にまずmain()メソッドが呼ばれます。で、main()メソッドの処理もコンテナーの内部で定義されていて、そこからサーブレットのメソッドを呼び出すようになっています」


JSP&サーブレットコンテナーによる処理

Memo GlassFishのデフォルトのポート番号は「8080」

 ところで、ブラウザーのアドレス欄は『http://localhost:8080/ServletApp01』となっています。この「8080」というのは、GlassFishが使用するポート番号です。Webサーバーが使用するポート番号は通常『80』ですが、GlassFishでは『8080』を使用します。『http://localhost/ServletApp01』とすると、ApacheのようなWebサーバーへのアクセスになるので、『localhost:8080』のようにポート番号を指定しているというわけです。

 このため、もしGlassFishをWeb上で稼働させた場合は、外部からアクセスする際には常に『8080』を指定することになります。

 ただし、GlassFishの設定を変更して80番ポートにすることも可能です。そうすれば普通にURLを指定すればアクセスできます。なお、実際にWeb上で公開する場合は、ApacheなどのWebサーバーを稼働させておき、Webサーバー側の設定で、80番ポートにアクセスを8080番に切り替えてGlassFishに振り分ける、といった方法がよく使われています。この場合、「ブラウザー→Apacheサーバー→ポート番号を8080に付け替え→GlassFish」のようにWebサーバーを介してアクセスすることになります。


Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。