- PR -

strutsでJavaScriptを使用する際の相対パスの指定方法

投稿者投稿内容
c
会議室デビュー日: 2007/10/03
投稿数: 6
投稿日時: 2007-10-03 13:56
strutsで作成したwebアプリケーションです。
実行ボタンを押したあとvalidator()でチェックし、エラーがある場合は元の画面に戻り、エラー内容を表示する画面があります。
この画面のあるテキストボックスに対し値を入力して、onchangeイベントで計算をして別のテキストボックスに表示するような関数をJavaScriptで作成し、外部ファイルとしてjsp内で呼び出すようにしました。
初期画面表示時は望んだ結果が得られます。(計算結果が別のテキストファイルに表示される)
ですが、一度実行ボタンを押し、validatorでエラーを発生させ再度元の画面に戻った後、上記の関数を入れているテキストボックスのonchangeイベントでは、「オブジェクトを指定してください(IEのエラー)」といわれました。
fireFoxのfirebugで確認したところ、TOMCATのエラーで404が発生していました。
該当箇所のエラーは、JavaScriptのソースが読めてないらしいことがわかりました。
以下はエラー部分です。

<html><head><title>Apache Tomcat/4.1.27 - Error report</title><STYLE><!--H1{font-family : sans-serif,Arial,Tahoma;color : white;background-color : #0086b2;} H3{font-family : sans-serif,Arial,Tahoma;color : white;background-color : #0086b2;} BODY{font-family : sans-serif,Arial,Tahoma;color : black;background-color : white;} B{color : white;background-color : #0086b2;} HR{color : #0086b2;} --></STYLE> </head><body><h1>HTTP Status 404 - /javascript/login.js</h1><HR size="1" noshade><p><b>type</b> Status report</p><p><b>message</b> <u>/javascript/login.js</u></p><p><b>description</b> <u>The requested resource (/javascript/login.js) is not available.</u></p><HR size="1" noshade><h3>Apache Tomcat/4.1.27</h3></body></html>

jsp内では、
<script language="JScript" type="text/javascript" src="../../javascript/login.js" charset="Shift-JIS">
と定義しています。実際の相対パスも間違っていないと思われます。(1回目は読めるので)

上記のエラーを見ると、JavaScriptのソースの位置を "/javascript/login.js"と認識しているようです。試しにjsp内にJavaScriptを埋め込んでみたところ、2回目以降の画面表示でも正常に動作しました。

質問なのですが、パスをどのような記述にすれば2回目以降も認識してくれるのでしょうか?通常のjspだとこんな風にならないと思うのですが、strutsだと書き方が違うのでしょうか?
お忙しいところ申し訳ありませんが、お分かりになる方、ご教授ください。

struts1.2
tomcat4.1
WindowsXP(PRO)
mio
ぬし
会議室デビュー日: 2005/08/25
投稿数: 734
お住まい・勤務地: 神奈川県
投稿日時: 2007-10-03 14:39
おそらくjspが切り替わる際にカレントパスが変わるのでは。
struts以前に、素のHTMLで階層の違うHTMLへ飛ばすような処理を作って確認すべきかと。
c
会議室デビュー日: 2007/10/03
投稿数: 6
投稿日時: 2007-10-03 16:23
>おそらくjspが切り替わる際にカレントパスが変わるのでは。
>struts以前に、素のHTMLで階層の違うHTMLへ飛ばすような処理を作って確認すべきかと。

ご回答ありがとうございます。やってみました。
結果は、mioさんのご指摘どおり、htmlでもパスがみつからず404がでました。
1回目に認識できたリンク先
http://localhost:8080/prj/html/A.html ←正常
2回目に認識できたリンク先
http://localhost:8080/html/A.html ←404
(プロジェクト直下が認識できていないようです)

カレントパスが切り替わらないようにするにはどのように記述すればよいのでしょうか?
絶対パスで書かなければいけないのでしょうか?
mio
ぬし
会議室デビュー日: 2005/08/25
投稿数: 734
お住まい・勤務地: 神奈川県
投稿日時: 2007-10-03 16:56
どのように遷移(リクエスト)しているのかが分からないので、なんとも…。
サーブレット内でリクエスト内容や処理結果に応じて遷移先が変わるのなら、遷移先にパスが書いてあること自体が変ということになりますし。
c
会議室デビュー日: 2007/10/03
投稿数: 6
投稿日時: 2007-10-03 17:04
お世話になります。自己レスですみません。
絶対パスでやってみました。
結果は、やはりうまくいきませんでした。
jspを以下に変更
<script language="JScript" type="text/javascript" src="javascript/login.js" charset="Shift-JIS">

ログ
<h1>HTTP Status 404 - /prj/jsp/input/javascript/login.js</h1><HR size="1" noshade><p><b>type</b> Status report</p><p><b>message</b> <u>/prj/jsp/input/javascript/login.js</u>(以下略)

1回目だと、うまくいきません。2回目以降はきちんとjavascriptのfunctionが呼ばれます。

server.xmlのContext pathを確認してみましたが、
<Context path="/prj"(以下略)
の設定をしています。

やはりパスの設定方法が間違っているのでしょうか?

P.S.
この辺のパスの設定で、参考になるサイトがあれば御誘導お願いします。
c
会議室デビュー日: 2007/10/03
投稿数: 6
投稿日時: 2007-10-03 17:12
>どのように遷移(リクエスト)しているのかが分からないので、なんとも…。
>サーブレット内でリクエスト内容や処理結果に応じて遷移先が変わるのなら、遷移先にパスが書いてあること自体が変ということになりますし。

mioさん、ご回答ありがとうございます。

このjspが呼ばれたときに使うjavascriptファイルはひとつなので、
大丈夫かと思っていたのですが・・。
jspにjavascriptべた書きするしかないのでしょうか。
できればjavascriptは外部ファイルにしたいです。
mio
ぬし
会議室デビュー日: 2005/08/25
投稿数: 734
お住まい・勤務地: 神奈川県
投稿日時: 2007-10-03 17:37
いや、呼ばれるタイミングによって、そのJSPのパスが違うのが問題なのでは…。
毎回パスが同じであれば、JavaScriptのファイルも相対パスで書いておけるはずです。
c
会議室デビュー日: 2007/10/03
投稿数: 6
投稿日時: 2007-10-03 18:01
mioさん、ご回答ありがとうございます。

>いや、呼ばれるタイミングによって、そのJSPのパスが違うのが問題なのでは…。

1回目表示時のurl(これは直打ちでした)
http://localhost:8080/prj/jsp/input/Input.jsp
2回目表示時のアドレス欄に表示されるurl
http://localhost:8080/prj/Input.do

確かに、同じjspを呼んでも階層が違うし、相対パスではだめな筈ですね。
ちょっと光が見えた気がします^^
strutsの設定ファイルを見直してみることにします。
ご丁寧に何度もありがとうございました。

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