- PR -

Lombozで作成したサーブレットの呼び出し方

投稿者投稿内容
SKYOO
会議室デビュー日: 2003/10/02
投稿数: 5
投稿日時: 2003-10-02 11:26
初投稿です。よろしくお願いいたします。

現在以下の環境で、JSPからServletを呼び、適宜処理をしてまたJSPを呼ぶ処理を作成しています。

Windows2000
Tomcat4.1.0
Eclipse2.1.1
SKYOO
会議室デビュー日: 2003/10/02
投稿数: 5
投稿日時: 2003-10-02 11:42
すみません、途中で切れました。

Windows2000
Tomcat4.1.0
Eclipse2.1.1
Lomboz2.1.1

Lombozでプロジェクトを作成して、各ファイルを配置したのですが、JSPからServletを呼び出すことができません。JSPからどころか、ブラウザでServletを直に指定しても、404のエラーになってしまいます。

いろいろ調べた結果、こちらのスレッドが近い話題なのではないかと思いました。

Lombozでのクラスパスについて
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=6597&forum=12&2

でも必要なクラスパスは指示されているようですし、私のほうは「クラスがない」のではなく「ファイルがない」状態です。完全にパスを誤っているのだと思います。

実はServletのクラスはユーザから指定されたパッケージの中にあり、非常に構成が深いのです。Eclipseのパッケージエクスプローラーを借りると、このようになっています。この状態でlogin.jspからServlet/Loginを呼び出したいのです。

webProj
 +src
 | +a.b.c.d.e.servlet
 | | +Login.class
 | |
 |
 +webName
 | +login.jsp
 |
 …

実はJavaにもEclipseにもましてやLombozもほとんど未経験なので、私がディレクトリ構成などを把握していないことが一番の原因とは思いますが、この場合にはどのような設定が不可欠のもので、かつどのように呼び出すのが普通なのでしょう。
ヒントだけでもいただけたら、調べるきっかけだけでもいただけたらと思います。よろしくお願いいたします。
ニシトミ
ベテラン
会議室デビュー日: 2003/04/24
投稿数: 76
お住まい・勤務地: 千葉・東京
投稿日時: 2003-10-02 13:02
こんにちは

サーブレットのクラス群は、ウェブコンテナ名/WEB-INF/classes配下に置かなきゃ
だめだったはず?
プロジェクトのプロパティJavaのビルドパス設定で
デフォルト出力フォルダーがWEB-INF/classesに設定してみてください。
SKYOO
会議室デビュー日: 2003/10/02
投稿数: 5
投稿日時: 2003-10-02 13:39
ニシトミさん、返信ありがとうございます。

引用:

サーブレットのクラス群は、ウェブコンテナ名/WEB-INF/classes配下に置かなきゃ
だめだったはず?


私の認識ではこれは「普通の場合」でした。なにが普通化というとIDEを使わずに手でゴリゴリと環境構築したような場合です。でもLombozでプロジェクトを作った場合、クラスファイルは/src/binの配下に置かれることが前提になるのではないのでしょうか。

なので先の発言に引用されていた部分↓

引用:

LombozプラグインからTomcatを起動する場合、J2EEプロジェクトのビルド出力フォルダ(今回はC:\Eclipse\workspace\j2eePrj\bin)がクラスパスに追加されます。そのためsrc配下のクラスはEclipse上でビルドされていれば、WEB-INF/classesにクラスがなくてもJSPから使用することができます。


にしたがって作成して、確かに長いパッケージ名ごと、クラスファイルは/src/bin配下にできています。たぶんここまではOKだと思うのですが、それをブラウザ上から呼び出すときに、何をどう指定したらよいのかがわかりません。

引き続きのご教授をお願いいたします。
ニシトミ
ベテラン
会議室デビュー日: 2003/04/24
投稿数: 76
お住まい・勤務地: 千葉・東京
投稿日時: 2003-10-02 14:00
引用:

SKYOOさんの書き込み (2003-10-02 13:39) より:

LombozプラグインからTomcatを起動する場合、J2EEプロジェクトのビルド出力フォルダ(今回はC:Eclipseworkspacej2eePrjbin)がクラスパスに追加されます。そのためsrc配下のクラスはEclipse上でビルドされていれば、WEB-INF/classesにクラスがなくてもJSPから使用することができます。


そうだったんですか、記事見てみます
引用:


たぶんここまではOKだと思うのですが、それをブラウザ上から呼び出すときに、何をどう指定したらよいのかがわかりません。




単純に、SKYOOさんの環境を例にすると以下のようなURLで呼び出せませんか?
http://hogehogehost/webproj/servlet/a/b/c/d/e/servlet/Login

またTomcatなどのお使いのサーバのserver.xmlなどの設定も要確認です。

編集します
すみません
http://hogehogehost/webproj/servlet/a.b.c.d.e.servlet.Login
でしたかね
またLombozはserver.xmlを編集してくれないみたいなので
手書きで編集する必要であった気がします

[ メッセージ編集済み 編集者: ニシトミ 編集日時 2003-10-02 14:15 ]
SKYOO
会議室デビュー日: 2003/10/02
投稿数: 5
投稿日時: 2003-10-02 15:31
server.xmlはcontextを追加しています。このようになっています。

<Context path="/webName" docBase="D:\My Documents\eclipse\workspace\webName" workDir="D:\My Documents\eclipse\workspace\webName\work\org\apache\jsp" debug="0" reloadable="true" crossContext="true" />

これはLombozではなく、テストで使ってみたtomcatPluginで追加されたものを模しています。Servletを使わずにJSPだけで遷移していく分には何も問題ないので、ここはこれでよいかと思うのですが、Servletを使う場合に特別に書かなければいけないことなどありましたでしょうか。
なおweb.xmlはいろいろいじったけどお手上げで、今はまっさらの、Lombozが最初に作ってくれるものそのままになっています。

なお
http://hogehogehost/webproj/servlet/a/b/c/d/e/servlet/Login
および
http://hogehogehost/webproj/servlet/a.b.c.d.e.servlet.Login
ですが、

おお!「servlet」が2回出てきてる!とちょっとワクワクしたのですが、どちらもダメでした。
私の足りない認識では、後述の形が正しくて、クラスパスに「a.b.c.d.e」まで指定しておけば「http://hogehogehost/webproj/servlet/Login」でアクセスできるのだと思っていたのですが…。
taku
ぬし
会議室デビュー日: 2002/11/12
投稿数: 918
お住まい・勤務地: 墨田区→中野区
投稿日時: 2003-10-02 15:38
引用:

SKYOOさんの書き込み (2003-10-02 15:31) より:
私の足りない認識では、後述の形が正しくて、クラスパスに「a.b.c.d.e」まで指定しておけば「http://hogehogehost/webproj/servlet/Login」でアクセスできるのだと思っていたのですが…。


 APサーバーはクラスパスの設定を無視しますので、
クラスパスに設定しても無駄です。
 上記にあるようにInvokerを使用するなら、特に設定はいりません。
ただし、Tomcat4.xからはInvokerは使用不可に設定されていますので、
Invokerを使用可能に設定する必要があります。
web.xmlのコメントをはずすことでInvokerは使用可能になります。
Invokerの使用はお勧めできませんので、
servletをweb.xmlに登録することをお勧めします。
SKYOO
会議室デビュー日: 2003/10/02
投稿数: 5
投稿日時: 2003-10-02 20:02
引用:

takuさんの書き込み (2003-10-02 15:38) より:

 APサーバーはクラスパスの設定を無視しますので、
クラスパスに設定しても無駄です。


あれ?それはシステム(マイコンピュータの詳細で見ることができるやつ)に設定したクラスパスを無視してしまうということですか?…ええと、今回の場合はTomcatが。
一応Eclipceで起動したTomcatの「プロセス情報」で、その深いパッケージのディレクトリが物理パスで指定されていることは確認しているのですが、それも実は意味がないということなのでしょうか。
どうもクラスパスは鬼門です。

引用:

web.xmlのコメントをはずすことでInvokerは使用可能になります。
Invokerの使用はお勧めできませんので、
servletをweb.xmlに登録することをお勧めします。


つい最近、そのような記事を見た記憶があります。この近くだったような気も…。なるほど、そういう関わりがあるのですね。
この現象でさんざ悩んでいて、server.xmlやweb.xmlの書き方などを片っ端から見ていたところでした。なので意味はサッパリわからなかったのですが、記憶に残ったようです。
ありがとうございます。とても参考になりました。今回の環境ではこれらクラスファイルを.warにして使うということになるようなので、その辺も含めてもう一度、設定ファイルを見直してみます。長ったらしいパッケージ名はmappingするでしょう。いえ、mappingの書き方もかなり危ういのですが…。

本当に、まったくわからないまま続ける羽目になっています。どうかまたお知恵をお貸しくださいませ。

スキルアップ/キャリアアップ(JOB@IT)