プロが教える店舗&オフィスのセキュリティ対策術

恐らく、超基本的な事になってしまうので質問をためらいましたが、
探し続けて一週間も経ってしまったので、最終手段としてここに質問させて頂く事にしました。
恥ずかしい限りですが質問させて下さい。

Eclipse+Strutsからxml操作を行う際に、
・プロジェクトを基準にした相対パスを記述した外部ファイルを用意して
 EclipseのProject配下に置いたxmlファイルを操作したいのですが、
・絶対パスでしかxmlファイルが認識されない。
という所で悩んでいます。

ユーザが自分の名前をウェブのオンライン画面からテキストボックスに入力して
Submitボタンをクリックすると、
システム側では既存の人員管理表のようなxmlファイルにその名前がDOMで追記される、
というアプリケーションをStrutsでの作成にチャレンジしていますが、
ここでアプリケーションの処理の遷移を

 (1)a.jsp→(2)b.do→(3)b.class→(4)c.jsp

とし、(3)b.classに、xmlの追記処理の為、
追記対象となるxmlの定義について下記のようにコーディングしました。
----
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
String uri = "sample1.xml";
Node root = builder.parse(uri);
(中略)
----

この処理の実行時に下記のエラーメッセージが表示されます。
----
致命的: サーブレット action のServlet.service()が例外を投げました
java.io.FileNotFoundException: C:\Program Files\Apache Software Foundation\Tomcat 5.5\sample1.xml (指定されたファイルが見つかりません。)
----

・絶対パスを指定した場合
・C:\Program Files\Apache Software Foundation\Tomcat 5.5にsample1.xmlを置く
・EclipseでのTOMCAT_HOMEの設定を、
 「C:\Program Files\Apache Software Foundation\Tomcat 5.5;C:\eclipse\work_space\TEST001」
 と、実行するプロジェクトディレクトリを追記で指定
とした場合、この部分はエラー無く実行されるようなのですが、
できればプロジェクトを基準にした相対パスを記述した外部ファイルを用意して
EclipseのProject配下に置いたxmlファイルを操作したいのです。
(開発環境はWindowsですが、将来的に本番稼動ではwarファイルをUnix or Linux に乗せたいので)

現在、WindowsXP/Eclipse3.3/Tomcat5.5/GEF3.3/struts-1.3.8/JDK1.5の環境で、
参考書は「Eclipseパーフェクトマニュアル ベストセレクション」
「xml 逆引きクイックリファレンス」
という本をもとに勉強しています。

恐らく簡単な設定か何かの問題だと思いますので恥ずかしい限りではありますが、
どなたかご存知の方がいらっしゃいましたら、
ご教授頂きたく宜しくお願い致します。

A 回答 (2件)

「EclipseのProject配下に置いたxmlファイルを操作したい」とありますが、本番環境にもEclipseを配置するのでしょうか?そんなわけはありませんよね。

根本的にやりたいことが間違っていると思います。
ただ、おそらく、サーバに配置したxmlを操作したい、が正しいのではないでしょうか?
とりあえずローカルで動かすだけなら、
String uri = "sample1.xml";
を、
String uri = "C:\\eclipse\\work_space\\TEST001\\sample1.xml";
とするだけで動くはずです。
※変数がuriとなっていますが、そもそもそこに誤解があるようです。単純にfilePathでしょうね。
※TOMCAT_HOMEの設定を変えているようですが、それは無意味です。TOMCAT_HOMEはTOMCATをインストールした場所を設定するものです。
String uri = "sample1.xml";
としてパスを指定していないため、TOMCAT_HOME\sample1.xmlにアクセスしてしまいます。

この回答への補足

ありがとうございます! 
絶対パスを利用すれば良いのですね。
大変参考になりました。

補足日時:2009/05/05 13:23
    • good
    • 0

やり方はいろいろあるんじゃないかと思いますが、


例えば、サーブレットコンテキストクラスのgetRealPath()メソッドを使えば絶対パスに変換してくれるので、それを使ってparse()しては如何でしょうか。

この回答への補足

御礼が遅れて申し訳ありません。
getRealPath()メソッドですね。
ありがとうございます。参考にさせて頂きます。

補足日時:2009/05/05 13:21
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!