サーブレットの実体は、Javaのクラスです。Javaでは、クラスという単位でデータやメソッドを管理します。いわば、アプリケーションにおける特定の処理を行うソースコードを1つのクラスにまとめておくのですが、サーブレットもクラスとして定義します。
サーブレットが実行されるとHTMLが出力される
「なるほど、サーブレットってJavaのクラスなんですね。ってことは、フィールド(変数)やらメソッドやらをクラスの内部に作って、何かの処理を行わせるのですね」
「サーブレットはクラスなので、インスタンス化を行ってメモリ上に読み込む必要があります。クラスやインスタンスについては『ミドルエンジニアの素朴な疑問』で触れていますので、よければあとで参照してみてください。で、サーブレットが実行される流れは次のようになります」
「クライアントのブラウザーからリクエストがあると、アプリケーションサーバー内でサーブレットが実行され、処理結果としてHTMLが出力されるという流れになります。もちろん、HTMLを出力するためのメソッドはサーブレットクラス内部で定義しますので、何らかの処理を行ったあと、このメソッドが実行されてHTMLが出力されます」
「えっと、アクセスされるとサーブレットが実行されるってことですが、クラスはインスタンス化しなきゃならないですよね。インスタンス化はどこで行われるんです?」
「スルドイ質問ですね。インスタンス化は、アプリケーションサーバー(GlassFish)の内部でインスタンス化の処理が行われます。アプリケーションサーバーに搭載されているサーブレットやJSPを実行する機能のことを『JSP&サーブレットコンテナー』と呼ぶことがありますが、このコンテナーがインスタンス化を行い、内部のメソッドを呼び出すようになっています」
「えーっと、Javaのプログラムってmain()メソッドから実行されますよね。main()はどうなってるんですか?」
「さらにスルドイですね。確かにJavaのプログラムは、起動直後にまずmain()メソッドが呼ばれます。で、main()メソッドの処理もコンテナーの内部で定義されていて、そこからサーブレットのメソッドを呼び出すようになっています」
ところで、ブラウザーのアドレス欄は『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.