- PR -

warファイルを配置したときのserver.xmlの記述について

1
投稿者投稿内容
miyuki
会議室デビュー日: 2006/08/23
投稿数: 11
投稿日時: 2006-08-23 19:06
はじめまして。
java経験の浅い miyuki と申します。
初めての投稿になります。宜しくお願いします。

Tomcat環境でサーブレットを動かそうとしています。
warファイルで配置した際に、期待通りに動いてくれず困っています。
ご存知の方がいらっしゃいましたら教えて頂けないでしょうか。

[動作環境]
・WindowsXP
・Tomcat5.0

サーブレットクラスは次のパスで作成しています。
 %CATALINA_HOME%/webapps/SVTest/SV001/SVServlet.class

このサーブレット環境を SVTest.war として、
webapps直下に配置しています。
tomcat起動時には、上記warファイルは自動展開され、
正しくSVTestフォルダ以下は作成されます。

このサーブレットを2つのURLでアクセスした際に以下の結果になりました。

 @ /SVTest/SVController ※ 展開されたフォルダ名と同じパス指定
 A /SV/SVController ※ 展開されたフォルダ名とは異なるパス指定

[結果]
 @ 正しくアクセス完了
 A HTTP 404 エラー

ここで、AのURLでも動かしたいのですが、
どうすればいいでしょうか。

server.xml と web.xml(アプリケーション配下) に定義している内容は
次の通りです。

[server.xml]
--------------------------------------------------------------------
 <Host name="localhost" debug="0" appBase="webapps"
  unpackWARs="true" autoDeploy="true"
  xmlValidation="false" xmlNamespaceAware="false">
   〜
  <Context path="/SV" docBase="SVTest.war" debug="9" reloadable="true"/>
 </Host>
--------------------------------------------------------------------

[web.xml]
--------------------------------------------------------------------
 <web-app>
  <servlet>
   <servlet-name>SVMain</servlet-name>
   <servlet-class>SV001/SVServlet</servlet-class>
  </servlet>
  <servlet-mapping>
   <servlet-name>SVMain</servlet-name>
   <url-pattern>/SVController/*</url-pattern>
  </servlet-mapping>
 </web-app>
--------------------------------------------------------------------

ちなみに、warファイルではなく、元々展開された状態でサーブレットを
配置させておいて、server.xml のコンテキストを次のように記述した
場合には、Aでも正常にアクセスできます。

  <Context path="/SV" docBase="/SVTest" debug="9" reloadable="true"/>

自分なりに調べてみたのですが、わからなくて困っています。
文章が下手で伝わるかどうか心配なのですが、
どこが間違ってるとか抜けているとかの情報を頂けないでしょうか。
宜しくお願い致します。
小僧
ぬし
会議室デビュー日: 2002/08/14
投稿数: 526
投稿日時: 2006-08-23 19:34
中身が全く同じなSV.warをもう1つ作って、webappsに置くというベタな方法も
ありますが・・・。
Tomcat5単体でやるならば、Tomcat、コンテキストファイルで調べると、良い情
報が出てくると思いますよ。
miyuki
会議室デビュー日: 2006/08/23
投稿数: 11
投稿日時: 2006-08-23 20:52
小僧さま、御返答ありがとうございました。

server.xmlのContext部分を抜き出して
%CATALINA_HOME%/conf/Catalina/localhost/SV.xml
を作成した結果、

 @ /SVTest/SVController ※ 展開されたフォルダ名と同じパス指定
 A /SV/SVController ※ 展開されたフォルダ名とは異なるパス指定

@Aのどちらでもアクセスできるようになりました。
ありがとうございました!!

ただ、こうすると SVTest.war が2つのフォルダに展開されてしまいました。

 ・webapps/SVTest
 ・webapps/SV

これは、そういうもんなんでしょうか。
できれば、/SVTest だけに展開して欲しいのですが。

初歩的な質問で申し訳ありません。
宜しくお願い致します。
nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2006-08-24 09:22
webappフォルダに置いて自動配備してるんですよね?
自動配備の場合はどうなるんだったっけなぁ…。

自分はwarを配備する必要がある場合は
Tomcatマネージャでxml設定ファイルを使用して配備を行います。
このxmlファイル、"Context descriptor"と呼ばれているらしいのですが、
日本語の情報が非常に少ない…。

要はContextタグを抜き出したものなのですが、
これを用いて配備を行うと、Contextタグで行う設定をちゃんと
行えるのでまっとうな配備が可能になりますよ。

…というか、詳細に設定する場合は
みんな手作業でserver.xmlとか編集しちゃうのかな。
warの自動配備は簡易機能と割り切ってますね。
小僧
ぬし
会議室デビュー日: 2002/08/14
投稿数: 526
投稿日時: 2006-08-24 09:28
とりあえず動いてなによりです。

引用:

これは、そういうもんなんでしょうか。



多分。

引用:

できれば、/SVTest だけに展開して欲しいのですが。



こういった要望を受けたことが無いので何とも言えませんが、多分
できないんでしょうね。Tomcatだけで済ませるならば、SVTest.war、
SV.warの2つを作って配置するのがベストかと思います。
SV.war側に、/SVTest側にフォーワード処理を行うサーブレットフィルタ
を1つだけ登録するなんていう強引なやり方もできないことも無いですが。
Apacheとかを経由してTomcatにアクセスさせるならば、URLの書き換え
とかコネクト用モジュールの設定で変更できると思いますので、ご検討
ください。
UNIX系のシステムだったら、ディレクトリのリンクとかでも対応できる
かもしれない。

差し支えなければ、なぜ同じコンテキストを別名でアクセスさせてみたい
のかを教えていただけないでしょうか。別の解決策が見つかるかもしれ
ませんので。




[ メッセージ編集済み 編集者: 小僧 編集日時 2006-08-24 09:35 ]
miyuki
会議室デビュー日: 2006/08/23
投稿数: 11
投稿日時: 2006-08-24 10:46
nagiseさま、御返答ありがとうございます。

Tomcatマネージャにそんな機能があるのですね。
すみません、勉強がぜんぜん足りないです...

頑張って勉強してみます。
アドバイスありがとうございました。
また、色々教えて下さい。
miyuki
会議室デビュー日: 2006/08/23
投稿数: 11
投稿日時: 2006-08-24 10:47
小僧さま、御返答ありがとうございました。

今回のサーブレットはお客様に導入するシステムの1サブシステムとしています。
開発する上で、サブシステム毎にIDを付与しています。
※ (例) SVServ … "SV":システム名、"Serv":サブシステム名
※ 実際にはもっと長い名前です。

このIDはそのままフォルダ名としてて、サーブレットについても
サブシステム名付でWebサーバに配置します。
ただ、お客様からは、URLにはシステム名("SV")でと言われています。

お客様に導入する際のWebサーバ環境は、Apache+Tomcatなので、
小僧さまの言われるようにApacheでの設定を考えています。
と、偉そうに言いましたが、Apacheの設定もよくわかってません。
勉強します。(^^

開発ではTomcatだけでしています。
Tomcat環境でwarファイルを配置したときにうまく動いてくれなかったので、
調べてみようと思ってハマッてしまいました。
すみません。m(_ _)m

色々教えて頂きありがとうございました。
Tomcatではそういうもんとして、あとはApacheで頑張ります。
また、Apacheでハマッてしまったときには質問させてください。

ありがとうございました。
1

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