- PR -

Tomcat5のwebDAVでファイルが表示されない

1
投稿者投稿内容
ハイネマン
会議室デビュー日: 2006/03/15
投稿数: 10
投稿日時: 2006-04-01 16:50
今まで見ているだけでしたが,初めて投稿致します。

Tomcatに付属されているwebDAVを拡張?して,
自作のServletにてWebシステムを作成したいと考えております。
まず初めに,

org.apache.catalina.servlets.WebdavServlet

を継承させたクラスを作成しweb.xmlに記述したのですが,

Caused by: java.lang.NoClassDefFoundError:
org/apache/catalina/servlets/WebdavServlet

が発生して起動できませんでした。
そこでTomcatにある以下のライブラリをコピーして動かしたのですが
Webフォルダとして参照できたものの,ファイルがフォルダ表示になってしまい,
ファイルの参照ができません。ここで行き詰っております。

  • /server/lib/catalina-optional.jar
  • /server/lib/catalina.jar
  • /common/lib/naming-common.jar
  • /common/lib/naming-resources.jar
  • /server/lib/servlets-common.jar
  • /server/lib/servlets-default.jar
  • /server/lib/servlets-webdav.jar
  • /server/lib/tomcat-util.jar

何かの設定がないのか,ライブラリに抜けがあるのか,
わかりません。特にエラーも出ておらずどこから調べていいのか見当も付かず。

動かしている環境は,
WindowsXP Pro SP2,Tomcat5.0.30です。

ご助言を宜しくお願い致します。

[ メッセージ編集済み 編集者: ハイネマン 編集日時 2006-04-06 19:55 ]
mintu
会議室デビュー日: 2001/12/15
投稿数: 1
投稿日時: 2006-04-02 03:18
私もTomcatのWebDav拡張して作ったことがあって、そのときはパケットキャプチャなどをよく使った。うまくいっているレスポンスと、うまくいっていないレスポンスを見比べれば直ぐ何がおかしいか分かるとおもいます。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2006-04-02 07:29
NoClassDefFoundError ですからクラスパスの問題ですね。
まずは拡張せず、WebdavServlet そのものが動く環境を整えましょう。
"servlets-webdav.jar" あたりにクラスパスがとおっていないのではないでしょうか?
/WEB-INF/lib に置いてみてはいかがでしょう?
ハイネマン
会議室デビュー日: 2006/03/15
投稿数: 10
投稿日時: 2006-04-02 20:32
mintuさん、インギさん返答ありがとうございます。

投稿をした時点より試行錯誤をした結果を報告致します。
Tomcatにあるライブラリ(上記のリストにあるJAR)を/WEB-INF/libに配置して、
WebdavServletにて実行した場合は、問題なくフォルダはフォルダ、ファイルはファイルで表示され、
アップロード&ダウンロードも問題なく行えました。
また、この状態で自作のServletに置き換えた場合は、やはりすべてフォルダ表示になってしまいました。
自作のServletとはいえWebdavServletを継承したのみでなんの実装もしていません。
Webフォルダではなくブラウザにて表示した際に、ディレクトリ一覧が表示されるのですが、
ここではファイルサイズも更新日も正確に取得できていないみたいでnullと表示されています。
これはファイルやフォルダの属性がなにも取得できてないのかなと。

mintuさんの言われているように、リクエストやレスポンスを追ってみたいと思います。
ハイネマン
会議室デビュー日: 2006/03/15
投稿数: 10
投稿日時: 2006-04-03 16:24
やはり原因つかめず,再度助言を頂きたく。

Fiddlerというソフトを用いてRequest&Responseを取得し
正常時とそうでない時を見比べてみたのですが,
情報が取得できていない,としか判断が付かず,この原因がわかりません。

pccl-webdavというWebシステムを作成し,FileServerディレクトリにReadMe.txtを
置いてありますが,このReadMe.txtがフォルダになってしまいます。

/pccl-webdav
  |
  +/FileServer
  |  |
  |  +ReadMe.txt
  |
  +/WEB-INF
     |
     +/lib
     |
     +web.xml

org.apache.catalina.servlets.WebdavServlet使用時
コード:
<response><href>/pccl-webdav/FileServer/ReadMe.txt</href>
<propstat><prop>
<getcontenttype>null</getcontenttype>
<getcontentlanguage/>
<creationdate>2005-07-28T02:09:18Z</creationdate>
<getlastmodified>Thu, 28 Jul 2005 02:09:18 GMT</getlastmodified>
<getcontentlength>14</getcontentlength>
<displayname><![CDATA[ReadMe]]></displayname>
<resourcetype/></prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
<propstat><prop>
<name/><parentname/><href/><ishidden/><isreadonly/>
<contentclass/><lastaccessed/><iscollection/><isstructureddocument/>
<defaultdocument/><isroot/></prop>
<status>HTTP/1.1 404 Not Found</status>
</propstat>
</response>



自作Servlet使用時(WebdavServletを継承したClass)
コード:
<response><href>/pccl-webdav/FileServer/ReadMe.txt/</href>
<propstat><prop>
<creationdate>1970-01-01T00:00:00Z</creationdate>
<displayname><![CDATA[ReadMe]]></displayname>
<resourcetype><collection/></resourcetype>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
<propstat><prop>
<name/><parentname/><href/><ishidden/><isreadonly/>
<getcontenttype/><contentclass/><getcontentlanguage/><lastaccessed/>
<getlastmodified/><getcontentlength/><iscollection/><isstructureddocument/>
<defaultdocument/><isroot/></prop>
<status>HTTP/1.1 404 Not Found</status>
</propstat>
</response>



ファイルなり,フォルダなりの属性情報(作成日時,ファイルサイズetc)が
取得できない原因としてはどのような事が挙げられますか?
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2006-04-03 16:33
>情報が取得できていない,としか判断が付かず,この原因がわかりません。
どのように判断されたのでしょう?
WebdavServlet を使った場合と、自前の継承クラスを使った場合になにかレスポンスの違いが見られた、ということでしょうか?
ハイネマン
会議室デビュー日: 2006/03/15
投稿数: 10
投稿日時: 2006-04-03 18:22
>>情報が取得できていない,としか判断が付かず,この原因がわかりません。
>どのように判断されたのでしょう?
>WebdavServlet を使った場合と、自前の継承クラスを使った場合に
>なにかレスポンスの違いが見られた、ということでしょうか?

とのことですが,
情報という曖昧な表現をしてしまいましたが,ここでいう情報とは
ファイルやフォルダの属性情報?(ファイルサイズ,更新日etc)の事です。
Response結果を比べてみたところ,自作のServletでは,
<prop>
<creationdate>1970-01-01T00:00:00Z</creationdate>
<displayname><![CDATA[ReadMe]]></displayname>
<resourcetype><collection/></resourcetype>
</prop>
のように属性情報が返ってきていません。
レスポンスを追った結果で違いが見つかったのはこの部分です。

属性が取得できない原因ではどのような事が考えられるのでしょうか?
ハイネマン
会議室デビュー日: 2006/03/15
投稿数: 10
投稿日時: 2006-04-06 22:52
いろいろとやっているうちに表示されるようになりました。。。
何箇所か変更したのでどこがよかったのか調査中ですが。

気になっている箇所はライブラリです。
初めの投稿のリストにあるライブラリに加えていくつか追加致しました。

  • catalina.jar
  • catalina-optional.jar
  • commons-beanutils.jar
  • commons-digester.jar
  • commons-fileupload-1.0.jar
  • commons-modeler.jar
  • servlets-common.jar
  • servlets-default.jar
  • servlets-webdav.jar
  • tomcat-util.jar

この状態でTomcat5を実行すると自作のServletでWebフォルダが表示されたようです。

ライブラリ同士の依存関係がよくわかりませんが,
なにかが足りなかったのでしょうか??
すっきりしませんが,とりあえず解決?致しました。

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

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