Contents
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 5 | commons-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 6 | ecj-4.3.1.jar el-api.jar jasper.jar jasper-el.jar jsp-api.jar tomcat-coyote.jar tomcat-juli.jar |
Tomcat Version 7 | ecj-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.5 | ecj-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 9 | ecj-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 10 | ecj-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リファレンス」を参照してください。