Know-how for JRun   LastUpdate:


戻る

001    外部WEBの設定の注意点
002    ポート8100って何?
003    ディレクトリ構成について
004    JRunのクラスパス
005    Webアプリ公開の詳細
006    サーブレットのコンパイルの基本
007    管理サーバーが立ち上がるのが遅いのは!
008    サーブレットの公開基本パターン
009    サーブレットがうまく動かない時
010    JRunサーバーを複数立てる方法
011    WIN-INF/classes配下の「サーブレットが見つからない」でエラーになってしまう!
012    システムプロパティの追加の仕方

 

900    お役立ちリンク


001   外部WEBの設定の注意点


002   ポート8100って何?

JRUNは、WEBサーバー機能を有している。通常クライアントブラウザからリスエストが投げられると、ポートNo:80のWWWサーバーが受け取る。このとき、WWWが無いとき、ホスト名:8100で投げると、JRUNの内部サーバーが受け取る事が出来る。つまりWWWが設定されていなくてもAPサーバーの動作テストが出来る。
ちなみに8100番は固定的なものではなく、インストール時の初期設定値である。


003   ディレクトリ構成について


approotのようなルートディレクトリは、Web アプリケーションファイルを提供するためのドキュメントルートとして機能します。このディレクトリには、Web アプリケーションの一部として開発されるJSP ページが含まれます。たとえば、c:/myapp に配置されるWeb アプリケーションの場合、既定のトップページファイルの場所はc:/myapp/index.html になります。

WEB-INF: アプリケーションのドキュメントルート内にないアプリケーション関連のリソースが含まれます。このディレクトリには、アプリケーションの設定情報が格納されたweb.xml ファイルが含まれます。このディレクトリは、アプリケーションの公開ドキュメントツリーの一部ではありません。したがって、このディレクトリまたはサブディレクトリに含まれるファイルは、クライアントに直接提供されません。

このディレクトリまたはサブディレクトリに含まれるファイルは、クライアントに直接提供されません。たとえば、アプレットが含まれる.jar ファイルは、クライアントがアクセスできるディレクトリに置く必要があるため、WEB-INF には格納されません

WEB-INF/classes: アプリケーションのJava サーブレット用のJava クラスファイルが含まれます。

WEB-INF/jsp:JSP ページの変換時にJRun によって生成されるファイル「.class および.java」が含まれます。このディレクトリは、Web アプリケーション仕様の一部ではなく、JRun によって追加されます

メモWEB-INF/jsp ディレクトリは、Java Servlet 仕様Version 2.2 の中では定義されていません。このディレクトリは、JRun 特有のディレクトリです。他のアプリケーションサーバーでは、.java ファイルや.class ファイルが別の場所に書き込まれる場合があります。


004   JRunのクラスパス


Web アプリケーションの既定の再ロード可能クラスパスには、以下のディレクトリが含まれています。
• approot/WEB-INF/classes
• approot/WEB-INF/lib
• approot/WEB-INF/jsp
これらは、approot内のものになる。

一方、default/lib 内は、デフォルトサーバー内のwebアプリから共通で起動できます。が、再ロード不可なフォルダです。一度ロードされたら、リソースが変更されても再ロードされません。
再ロードしようと思ったら、該当のJRunを再起動するしかないのかな?

2001/11/08


005   Webアプリ公開の詳細

新規のアプリケーションを作成するには、以下の手順に従います。
  1. JMC の左側ペインで、machine_name > server_name > Web Applications を選択します。
  2. 右側ペインでアプリケーションの作成を選択します。
  3. アプリケーションのサーバー名を選択します。
  4. 左側ペインのサーバーの下に表示される情報に従ってアプリケーションの名前を指定します。
  5. アプリケーションのWeb サーバーホストを指定します。
  6. アプリケーションのURL マッピングを指定します。
  7. アプリケーションのルートディレクトリを指定します。
    メモWeb アプリケーションのルートディレクトリは、JRun ディレクトリ構造の下に置く必要はありません。
    システム上の任意の場所に作成することができます。
  8. [ 作成] をクリックして、アプリケーションを作成します。
  9. Web アプリケーションにコンテンツを追加します。アプリケーションリソースの追加の詳細については、67 ページの「Web アプリケーションコンポーネントの追加」を参照してください。


HTML ページの追加
アプリケーションのルートディレクトリは、アプリケーションファイルを処理するときにドキュメントルートディレクトリとして機能します。アプリケーションルートまたはアプリケーションルートの任意のサブディレクトリ(WEB-INF ディレクトリを除く) にアプリケーションのHTML ページを追加します。たとえば、Web アプリケーションがc :/apps/app1 に置かれている場合、既定のウェルカムファイルはc :/apps/app1/index.html に置かれます。

JSP ページの追加
JSP ページは、HTML とスクリプトコードが混在しているテキストファイルをもとにサーブレットを作成するときに使用します。クライアントが初めてJSP ページ(.jsp ファイル) を要求したときに、そのページがJava ソースコードファイル(.java ファイル) に変換され、コンパイルされてJava クラスファイル(.class ファイル) が作成されます。JSP ページの作成方法の詳細については、第7 章を参照してください。

Web アプリケーションにJSP ページを追加するには、アプリケーションのルートディレクトリ、またはアプリケーションルートの任意のサブディレクトリ(WEB-INF のサブディレクトリを除く) にJSP ページをコピーします。既定のアプリケーションにJSPページを追加する場合は、そのJSP ページをWeb サーバーのドキュメントルートディレクトリにコピーします。これは、既定のアプリケーションでは、Web サーバーのドキュメントルートディレクトリがルートディレクトリとして機能するためです。
JRun では、JSP ページの要求に応じて生成された.java ファイルおよび.class ファイル
は、WEB-INF/jsp ディレクトリに書き込まれます。
メモWEB-INF/jsp ディレクトリは、Java Servlet 仕様Version 2.2 の中では定義
されていません。このディレクトリは、JRun 特有のディレクトリです。
他のアプリケーションサーバーでは、.java ファイルや.class ファイルが別の場所に書き込まれる場合があります。

Java サーブレットの追加
Java サーブレットは、1 つの.class ファイルに相当します。Web アプリケーションにJava サーブレットを追加する手順は、サーブレットを格納する場所によって異なります。通常、サーブレットを格納するのは、以下の場所のいずれかです。

• WEB-INF/classes 内に.class ファイルとして格納する• .jar ファイル内に.class ファイルとしてWEB-INF/lib を格納する• 複数のアプリケーションで共有されるクラスのディレクトリに格納するディレクトリWEB-INF/classes とWEB-INF/lib は、Web アプリケーションのクラスパスに自動的に組み込まれ、これらのディレクトリ内のすべての.class および.jar ファイルは再ロード可能になります。共有クラスのディレクトリは、必ずアプリケーションのクラスパスで指定しておく必要があります。また、共有ディレクトリには、再ロード可能になるものと、そうでないものがあります。

JRun でJava サーブレットを実行できるようにする場合にもっとも重要な問題は、アプリケーションサーバーは、本来WEB-INF 内やWEB-INF のサブディレクトリ内のファイルを直接操作することはできない点です。それでは、サーブレットの.class ファイルを一般にWEB-INF/classes またはWEB-INF/lib に.jar ファイルとして格納する場合、そのサーブレットをクライアントで利用できるようにするには、どのような方法をとるのでしょうか?
アプリケーションにJava サーブレットを追加する手順は以下のとおりです。
1. サーブレットの.class ファイル、またはサーブレットの.class ファイルが含まれている.jar ファイルを適切なディレクトリ( 通常はWEB-INF/classes かWEB-INF/lib)にコピーします。
2. JRun 管理コンソール(JMC) で[ app_name> Servlet URL Mapping] プロパティを使用して、該当するWeb アプリケーション内のサーブレットを登録します。サーブレットを登録すると、サーブレットのクラスファイルに対する要求のURLのマッピングがセットアップされます。この登録情報は、アプリケーションの
web.xml ファイルに書き込まれます。
たとえば、SnoopServlet.class ファイルで表されるサーブレットにアクセスするとしま
す。その場合、SnoopServlet.class ファイルをc:/apps/app1/WEB-INF/classes にコピーします。次に、JMC を使用して、以下の表に示すサーブレットのマッピングによってサーブレットを登録します。
[ 仮想パス/ 拡張子] フィールドでは、サーブレットに対応するURL を指定します。[ 呼び出されるサーブレット] フィールドでは、サーブレットの名前を指定します。このサーブレットの名前には、サーブレットのクラスファイルの名前を拡張子.class を付けずに指定します。
サーブレットを登録すると、以下のURL を使用して要求できるようになります。

[ 仮想パス/ 拡張子] フィールドでは、サーブレットに対応するURL を指定します。[ 呼び出されるサーブレット] フィールドでは、サーブレットの名前を指定します。このサーブレットの名前には、サーブレットのクラスファイルの名前を拡張子.class を付けずに指定します。
サーブレットを登録すると、以下のURL を使用して要求できるようになります。
http://local_host/app1/Snoop
JRun は、このサーブレットを処理し、サーブレットの結果をクライアントに返します。
次のURL を使用してサーブレットに直接アクセスしようとするとエラーが生じます。
http://localhost/app1/WEB-INF/classes/SnoopServlet.class
JRun ではWEB-INF 下にあるファイルを操作できないので、このURL ではエラーが生成されます。
app1 のルートディレクトリにSnoopServlet.class ファイルをコピーした後で、次のURLを使用してそのファイルへのアクセスを試みると、以下のことが生じます。
http://localhost/app1/SnoopServlet.class
この.class ファイルは、アプリケーションのクラスパスに含まれるディレクトリ内にないので、JRun によってWeb サーバーからクライアントにファイルが返送されます。Web ブラウザは.class ファイルの内容の表示方法を認識できないので、ファイルを格納する宛先ディレクトリの名前を要求するプロンプトを出します。しかし、.class ファイルをクライアントには返送せず、JRun でサーブレットをロードまた実行し、サーブレットの結果をクライアントに返します。

2001/11/05


006   サーブレットのコンパイルの基本

javac -classpath c:\jruninstalldirectory\lib\ext\servlet.jar filename.java とします。
つまり、servlet.jarは、JRunのものを使用します。

007   管理コンソールの立ち上がるのが遅いのは

WEB-INFフォルダにweb.xmlを見よ。管理コンソールより、WEBアプリをした場合はweb.xml内に次の記述が有る場合がある。
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.// DTD Web Application 1.2//EN" "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
これを、削除すると、メチャ早くなる。Jrunサーバー内で1つでも上記記述を含むweb.xmlがあると遅くなるので、全部チェックすること。

以下参考
http://jrun.itfrontier.co.jp/jrunbase/diaplay.cfm?msgid=3b540e8e%2E73050okugawa%5Fhiroshi%40itfrontier%2Eco%2Ejp
このタグは、xml ドキュメントが有効であるかを確証するために使
用され、タグ内の URL に接続を試みようとします。もし、
Internet にアクセスできない環境であれば、default-event.log
内で以下のエラーを取得し、JRun は接続しようと試みることによ
りハングしたようになってしまうでしょう。web.xml からこの
<!DOCTYPE> タグを削除することでこの問題は解決します。

2001/11/07


008   サーブレットの公開基本パターン

通常のhtmlやJSPファイルなどは、HTTPリクエストに対し最初にWEBが動くのに対して、Servletはまずjavaの実行ファイルを起動する必要があるという点。

HTTPクライアントからダイレクトにServletを起動するには、多少の仕掛けが必要になる。

おおまかな手順は次の通りになる。

  1. アプリケーション用のフォルダを任意の場所に作成する。
    例)c:\webapl\kintai    (勤怠管理用のアプリケーション)
  2. JRunでWEBアプリを作成する。HTTPブラウザからは、http://<ホスト名>/kintai/contorolでcontrol.class起動させてたいので、
    アプリケーションのルート ディレクトリ : c:\webapl\kintai
    アプリケーション パスのマッピング: /kintai
    とする。「http://<ホスト名>/kintai」と、「c:\webapl\kintai」が関連付けられる。
  3. WEBの作成を設定すると、c:\webapl\kintai\WEB-INFが作成される。
    WEB-INF\classesの中にservletの実行モジュールを格納する。
  4. HTTPクライアントに対して、control.classを送り返すわけではなく、サーバー内で実行させる必要が有るため、「サーブレット URL のマッピング」にて、HTTPリクエストとサーブレットの関連付けを行うのである。
    仮想パス/拡張子
    仮想パス:contorol  拡張子:control    
    これで、Jrunが認識する各クラスパスからcontrol.classを実行できることになる。
  5. control.class の「control」を実際のクラス名と異なる名前をhttpから指定させたい場合や、controlクラスの起動時に引数を与えたい場合は、別途サーブレットの定義から指定する必要がある。
    名前には、全項で指定した拡張子を指定し、クラス名に実際のクラス名を.classをつけずに設定する。
  6. どうやら、JRunは仮想パスで指定したServletクラスがあればそれを実行し、無いときはサーブレットの定義で指定した名前→クラス名と置き換えて実行するようである。

2001/11/08


009   サーブレットがうまく動かないとき

500 Internal Server Error
/test_1/aaa:

javax.servlet.ServletException: TestServlet をインスタンス化できません。
java.lang.ClassNotFoundException: TestServlet [TestServlet]

これは、該当するクラス(TestServlet)が見つけられない時のメッセージである。クラスパスに該当のクラスがあるかどうか確認する必要あり。

404 Not Found
/test_1/test.htm:

allaire.jrun.JRunServletException: 見つかりませんでした。
at allaire.jrun.file.FileServlet.service(../file/FileServlet.java:125)

これは、/test_1でまっぴんぐされるhttpリソースがみあたらない時と思われる。サーブレットと認識されていないようだ。

2001/11/08


010   JRunサーバーを複数立てる方法

Jrunサーバーは複数のインスタンスを持つことができる。初期インストール時では、Adminサーバー、Defaultサーバーの二つのJRunサーバーが設定される。ここでは、3つ目のさーばーを立てる時のポイントについてメモをする。

ポイント1
\JRun\servers\default\ をコピッてしまおう。 それがラク。たとえば、\JRun\servers\test のように。

ポイント2
ポート番号を重複しないように、残らず変更する。
\Allaire\JRun\servers\追加したサーバー\local.propertiesを変更します。

control.endpoint.main.port
jcp.endpoint.main.port
web.endpoint.main.port
-Dejipt.classServer.port 
-Dejipt.homePort
については、変更する必要があります。1の位を++1しておくと衝突しにくいです。

ポイント3
JRunに追加したサーバーを登録する。

\Allaire\JRun\servers\追加したサーバー\local.propertiesで表示サーバー名を設定しておきます。

########################################################################
## jvm properties
########################################################################

jrun.server.displayname=JRun Test Server



ポイント4
\Allaire\JRun\lib\jvms.propertiesにサーバーを追加します。

admin=C:/Program Files/Allaire/JRun/servers/admin
default=C:/Program Files/Allaire/JRun/servers/default
test=C:/Program Files/Allaire/JRun/servers/test

以上でサーバーを再起動すればokのはずです。
DefaultサーバーとTestサーバーを同時に起動した時だけエラーになるならば、ポート番号が重複している可能性があります。

2001/11/15


011   WIN-INF/classes配下の「サーブレットが見つからない」でエラーになってしまう!

JRunのマニュアルを軽く読むとWEB-INF/classes は規定のクラスパスのように思えるが、実は必ずしもソウではない。
次の何れかの方法で設定されていないと、WEB-INF/classes はクラスパスと認識されないので注意

  1. \Allaire\JRun\servers\default\<default-app>\WEB-INF配下にwebapp.propertiesを配置し、
    webapp.classpath=/WEB-INF/servlets;/WEB-INF/classes;/WEB-INF/lib;/WEB-INF/jsp
    などと設定されている。
  2. JRunサーバーのJavaの設定のクラスパスで 
    {jrun.rootdir}/servers/default-app/WEB-INF/classes/
    などを追加した。

など、何処かでクラスパスを通す必要があるようです。私はハマリマシタ

ドライブ名を含む絶対パスなどを記述する時は、\ を / に置き換えて入力する。
空白を含むフォルダ名の時は、"" で囲む必要があるかも
"C:/data/ome_tutorial/lesson2/web/WEB-INF/classes"

2001/11/15


012   システムプロパティの追加の仕方

JavaVMへのパラメタの追加として行います。

Javaの設定→java引数

-D につづけて、入力


-Dapp.properties="C:/data.dat"

 

2001/12/26


900   お役立ちリンク

http://www.foo.gr.jp/server/index.html


戻る