BayServerでServletを使う

BayServerとサーブレットエンジン

Servlet APIはJavaでWebアプリケーションを開発するための標準のAPIです。Java版BayServerには標準でサーブレットエンジンが搭載されており、すぐ使用することができます。

BayServerのサポートするServlet API

BayServerはServlet API 3.0をサポートします。

Jakarta API対応

Servlet APIは、Java EE標準APIからJakartaプロジェクトに移行した都合上、javax.servletとjakarta.servletの2種類のパッケージが存在します。

BayServerはどちらのパッケージで作成されたサーブレットアプリケーションも動かすことができます。

Servletドッカー

BayServerは標準でサーブレットアプリケーションの実行機能がついていますが、内部的には「ドッカー」という拡張可能な仕組みを使って実装されています。

すなわち、BayServerのコア部分とは切り離されていることを意味し、使用しない場合は読み込まれないというわけです。

サーブレットアプリケーションを動かすためのドッカーが「Servletドッカー」になります。このドッカーを使用することで、特定のパスに対してサーブレットエンジンを起動することが可能になります。

JSP対応

JSP(Java Server Pages)は、PHPのようにHTMLの中にJavaコードを埋め込むことができる、初期のテンプレートエンジンのような仕組みで、Servlet APIを使用するよりも簡単にWebアプリケーションを記述することが可能になります。

BayServerにはJSP機能は付属していません。

理由は、JSPは膨大な機能を持ち、必要なライブラリもたくさんあるため、この機能を搭載するとBayServerのバイナリが大きくなってしまい、BayServerの特徴でもある軽量性が著しく損なわれるからです。

その代わり、BayServerでは、TomcatのJSPエンジンをコピーすることでJSPアプリケーションを動かすことができます。Tomcat 5以降のライブラリであれば使用することができます。ただし、いくらかの設定が必要なのでそれはこのページで後述します。

Tomcatと比べた制限

現在、前述のJSPの他に、Tomcatと比べて主に以下の制限があります。

・Managerアプリがない
・リロード機能がない
・アノテーションスキャンが低速

BayServerにはTomcatに付属のようなManagerアプリがないため、Webインタフェースでwarをアップロードしてアプリケーションをデプロイするといったことができません。手動でwarファイルの展開をする必要があります。

また、サーブレットアプリケーションのリロード機能はありませんから、アプリケーションを更新した場合はBayServerを再起動する必要があります。

BayServerのアノテーションスキャンはクラスローダを使用しているため、クラスライブラリを多用しているとスキャンに時間がかかります。従ってデフォルトでアノテーションスキャンの機能はオフになっています。Tomcatは高速にアノテーションをスキャンできますが、これは class ファイルを直接オープンして解析しているからです。

この辺りは優先順位の問題で実装されていないだけで、BayServerの今後の課題とも言えます。是非機能リクエストをして、開発者を動かしてくださいw

Servletドッカーの設定

基本的なServletドッカーの設定は以下のようになります。

    [town /servlet/]
        location /home/user1/www/servlet
        [club *]
            docker servlet

このようにすることで、”/servlet/”というパスに対してはサーブレットエンジンに処理が委譲されます。アプリケーションの位置はここでは「/home/user1/www/servlet」になり、ここにコンテンツやWEB-INFなどのディレクトリが存在することになります。

前述のように、ServletドッカーはClubドッカーの一種なので、特定のパスや拡張子に対して起動されることもできますが、基本的にパスには”*”を指定して全てのファイルに対して起動するようにします。

理由は、拡張子やパスによる振り分けはサーブレットエンジンの中でも行えるなど、Webサーバーとサーブレットエンジンで被っている機能がいくつかあるので、サーブレットエンジンに丸投げする方が運用が楽だからです。

もはや、サーブレットアプリケーションっていうのは別のWebサーバーが動いていると思った方がいいかも知れませんw

jakarta.servletパッケージを使用する

Servlet APIの混迷とBayServerの対応

Java EE APIの一部がjakartaプロジェクトに移行し、Servlet APIもjakarta.servletパッケージに変更になった関係で、同じServlet API 3.0を使用していても、Webサーバーとアプリケーションとの間の互換性が保証されなくなってしまいました。

Tomcatの場合、Version9まではjavax.servletパッケージをサポートし、Version10以降はjakarta.servletパッケージをサポートするようになっているので、サーブレットアプリケーションによってTomcatのバージョンを切り替える必要があります。

このようなServlet APIの混迷状態に対するBayServerの見解と対応は以下です。

Servlet APIがjakartaプロジェクトに移行したとしても、現状はまだjavax.servletパッケージを使用したサーブレットアプリケーションの方が多いと思われる。従って、デフォルトはjavax.servletパッケージを使用したサーブレットをサポートする。ただし、パラメータの切り替えによりjakarta.servletパッケージを使用したサーブレットアプリケーションも使用できるようにする。将来、シェアが逆転した場合にデフォルトを入れ替える。

このような方針が決まったため、BayServerでは、デザインパターンやリフレクションAPIを駆使して、二重の実装をすることなく、共通のロジックでどちらのパッケージでも動くように実装されました。

BayServerの設定

Jakarta Servlet APIを使用する場合は以下の設定を行います。

・BayServerのservletjakarta.servletパッケージを使用した jakarta-servlet-api.jar をコピーする
・apiTypeパラメータを”jakarta”に設定する

Jakarta Servlet APIのコピー

Tomcat10をダウンロードし、この中のjakarta-servlet-api.jarをBayServerホームのlibディレクトリにコピーします。

パラメータの設定

以下のように”apiType”パラメータを”jakarta”に設定します。

    [town /servlet/]
        location /home/user1/www/servlet
        [club *]
            docker servlet
            apiType jakarta

JSP(Jasper)を使用する

BayServerのServletドッカーにはJSPの機能は組み込まれていませんが、Jasperと呼ばれる、Tomcatに付属のJSPエンジンを使用することが可能になっています。

Jasperを使用するための設定手順は以下のようになります。

・関連するクラスライブラリのコピー
・”jasperVersion”パラメータの設定

関連するクラスライブラリのコピー

Jasperを動かすために必要なクラスライブラリをBayServerホーム直下のlibディレクトリにコピーします。

コピーするファイルはバージョンによって異なります。以下を参考にしてください

Tomcat Version 5commons-el.jar
commons-logging-api-1.1.1.jar
ecj-3.7.2.jar
jasper-compiler.jar
jasper-runtime.jar
jsp-api.jar
Tomcat Version 6ecj-4.3.1.jar
el-api.jar
jasper.jar
jasper-el.jar
jsp-api.jar
tomcat-coyote.jar
tomcat-juli.jar
Tomcat Version 7ecj-4.4.2.jar
el-api.jar
jasper.jar
jasper-el.jar
jsp-api.jar
tomcat-api.jar
tomcat-juli.jar
tomcat-util.jar
Tomcat Version 8.5ecj-4.6.3.jar
el-api.jar
jasper.jar
jasper-el.jar
jaspic-api.jar
jsp-api.jar
tomcat-api.jar
tomcat-juli.jar
tomcat-util.jar
tomcat-util-scan.jar
Tomcat Version 9ecj-4.18.jar
el-api.jar
jasper.jar
jasper-el.jar
jaspic-api.jar
jsp-api.jar
tomcat-api.jar
tomcat-juli.jar
tomcat-util.jar
tomcat-util-scan.jar
Tomcat Version 10ecj-4.18.jar
el-api.jar
jasper.jar
jasper-el.jar
jaspic-api.jar
jsp-api.jar
tomcat-api.jar

パラメータの設定

次にjakartaVersionパラメータでJasperのバージョンを指定します。

        location /home/user1/www/servlet
        [club *]
            docker servlet
            jasperVersion 8.5

指定可能な値は、「5」,「6」, 「7」, 「8.5」, 「9」, 「10」 のいずれかです。

その他の設定

Servletドッカーはその他にも、エンコーディングやタイムアウト、一時ファイルを生成するディレクトリなど細かな設定があります。

Servletドッカーのその他の設定については「BayServerリファレンス」を参照してください。

Twitterでフォローしよう

おすすめの記事