2009년 10월 31일 토요일

SDLoader 쓸만한데...

*SDLoaderとは
開発およびデモ用に開発されたWebコンテナです。
特徴:
・Jar1つでWebアプリを起動できます。
・コンパクトで複雑なディレクトリ構造が不要なため、アプリケーションに組み込みやすくなっています。
・mainメソッドから、Webコンテナをインスタンス化できます。
・プログラマチックにアプリケーションを追加したり、web.xmlを変更したりできます。
・1つのアプリケーションに対して、ドキュメントルートを複数指定できます。

なお、SDLoaderはServletAPIをフル実装していません。(例えばUserPrincipalなどは未実装です)

*必要な環境
JRE1.5以上

*アーカイブの説明
SDLoaderには、次のアーカイブが用意されています。

libフォルダ以下には、各種SDLoaderのアーカイブが入っています。

lib/sdloader.jar・・・Servlet2.5のServetエンジンのみ。JSPは使用できません。
lib/sdloader-jsp20.jar・・・Servlet2.4+JSP2.0
lib/sdloader-jsp21.jar・・・Servlet2.5+JSP2.1

これらは、開発環境に入れて使う用途が主な目的のアーカイブです。推奨はsdloader-jsp21.jarです。

また、standaloneフォルダ下には、スタンドアロンで動かすためのファイルセットが入っています。

standalone/sdloader・・・Servlet2.5のServetエンジンのみ。JSPは使用できません。
standalone/sdloader-jsp20・・・Servlet2.4+JSP2.0
standalone/sdloader-jsp21・・・Servlet2.5+JSP2.1

各フォルダ下に入っているwebappsフォルダにwarファイルをいれ、batファイルで起動できます。
スタンドアロンの場合、起動後にタスクトレーにアイコンが表示されます。
アイコン右クリックから、shutdownを選ぶと停止します。

libフォルダとスタンドアロンの違いは、swt.jarが入っているかどうかの違いだけ、
基本機能には変わりがありません。

**使用方法
SDLoaderは、大きく分けて「開発利用」と「スタンドアロン利用」の2つの使い方があります。

**開発利用
開発に利用する場合、まずはじめに適当なJavaプロジェクトを作成します。
つぎに、SDLoaderのアーカイブをプロジェクト内におき、クラスパスを通します。
SDLoaderにはJavaEEのAPIが入っているため、クラスパスに通した時点で
JavaEEのAPIが利用できるようになります(つまりHttpServletやHttpServletRequestなどを
使ったコーディングができます)

eclipseの場合、クラスパスに通した後、jarファイルを右クリック->実行->Javaアプリケーションを選択します。
一覧からServlet25ProjectTemplateToolを選ぶと、WEB-INFやweb.xmlなどの雛形、
SDLoader起動のコードの雛形がプロジェクト内に出力されます。

雛形を作らなかった場合は、WEB-INFやweb.xmlを作成したあと、mainメソッドを持ったクラスを作成します。
mainクラスには、SDLoaderを起動するコードを書きます。
最低限必要なコードは、以下のようになります。

public static void main(String[] args){
  SDLoader sdLoader = new SDLoader(8080);
  WebAppContext webApp = new WebAppContext("/test","WebContent");
  sdLoader.addWebAppContext(webApp);
  sdLoader.start();
}


SDLoader sdLoader = new SDLoader(8080);
の部分は、Webコンテナのインスタンス化です。
SDLoaderの引数にポート番号を渡すことで、そのポートでSDLoaderを起動します。
SDLoader sdLoader = new SDLoader(true);
のようにして引数にtrueを渡すと、空いているポート番号を探して起動します。(自動ポート検出)

次の
  WebAppContext webApp = new WebAppContext("/test","WebContent");
の部分は、デプロイするWebアプリのインスタンス化です。
第一引数は、デプロイするアプリのコンテキストルートです。直接warファイルを指定することも出来ます。
第二引数は、ドキュメントルートディレクトリです。通常はWEB-INFが入っているフォルダを
指定します。

SDLoaderは通常のJavaプログラムとして動くため、ドキュメントルートを探す場合は、起動した
ディレクトリを基点に探します。
eclipseの場合、プロジェクトフォルダが起点になります。

従って、
HogeProject
 |-src
 |-WebContent
    |-WEB-INF
    |    |-lib
    |    |-classes
    |    |
    |    |-web.xml
    |
    |-index.jsp    

という構成の場合、「HogeProject」が起点になるため、ドキュメントルートとして
"WebContent"を指定します。

作成したwebAppを、
  sdLoader.addWebAppContext(webApp);
で、SDLoaderに追加します。
WepAppContextは、複数追加可能です。

最後に、
  sdLoader.start();
で、起動します。

起動後はブラウザからアクセスします。
なお、自動ポート検出で起動すると、SDLoaderの起動ポートはログからしか分かりません。
従って、sdLoader.start();のあとに、次のコードを書いておくと便利です。

  Broser.open("http://localhost:"+sdloader.getPort()+"/hoge/inde.html");

Browser.openは、引数にURLを入れるとそのURLをブラウザで開きます。上記コードで
アプリの開始画面URLを組み立てて渡すと、起動後にそのポートの開始画面を開くことが出来ます。

**スタンドアロン利用
スタンドアロンの場合は、特に設定する項目はありません。

webapps
lib/sdloader-jspXX.jar
sdloader-jspXX.bat
sdloader-jspXX.exe

のファイル配置にし、batファイルもしくはexeから起動できます。

webapps以下には、
・warファイル
・ディレクトリ
・ROOTディレクトリ
・コンテキストXMLファイル
の4つが配置できます。

warファイルを置くとその場でwarが展開され、warファイル名がコンテキストパスになります。
warファイルを交換したい場合は、展開されたディレクトリを削除してwarファイルを入れ替え、
再起動します。

ディレクトリの場合は、そのディレクトリがコンテキストパスになります。

ディレクトリの名前を「ROOT」とすると特殊フォルダとして扱われ、コンテキストパスが"/"になります。

コンテキストXMLファイルとは、
<Context path="/example" docBase="../../example/webContents"/>
のような形で記述したXMLファイルです。
これを配置すると、そのファイルに従ってコンテキストパスおよびドキュメントルートを設定できます。
pathはコンテキストパスの設定で、docBaseがドキュメントルートになります。
path省略可能で、省略すると、このファイル名がコンテキストパスとなります。
docBaseは、.(ドット)表記からはじめるとwebappsフォルダからの相対パス、それ以外は絶対パスとなります。

なお、どの配置に関しても、WEB-INFおよびweb.xmlがない場合でもエラーにはなりません(警告は出ます)
従って、単純にディレクトリを作成すれば、HTTPサーバとして利用することが出来ます。

댓글 없음:

댓글 쓰기