- PR -

getRequestURLの戻り値

1
投稿者投稿内容
n-squid
会議室デビュー日: 2004/09/17
投稿数: 14
投稿日時: 2007-03-13 11:36
eclipseを使ってWebアプリの開発をしています。
最近jre,Tomcat,eclipseを同時にバージョンアップしましたところ、getRequestURL
が返す値が以前と違うものになってしまい困っています。
ネット上や書籍でもいらいろと調べてはみたのですが改善には至らず手詰まり状態と
なっています。
原因と改良方法をご存知の方がいらっしゃいましたらご教示願います。

■状況
Servlet[db.ListTest]からjsp[list.jsp]をforwardしています
[db.ListTest]内のコード↓
 request.getRequestDispatcher("/list.jsp").forward(request, response);

[list.jsp]内のコード↓
 <%=request.getRequestURL().toString()%>

上記[list.jsp]のgetRequestURLでバージョンアップ前と戻り値が変わってしまって
います。
以前の値=http://localhost:8080/TestContext/db/ListTest
現在の値=http://localhost:8080/TestContext/list.jsp
本当に欲しいのは"以前"のものです。呼び出し元のサーブレットのパスを使用し、
<a href="<%=request.getRequestURL()%>?p=2">
等と使用したいと思っております。

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=35760&forum=12&2
を参考に
<% StringBuffer url = request.getRequestURL(); %>
<%= url.substring(url.indexOf(request.getContextPath())) %>
も試してみましたが、やはり/TestContext/list.jspが返ってしまいます。

■実行環境
・以前
jre1.4.2
Tomcat5.0.16
eclipse3.0.1

・現在(バージョンアップ後)
jre1.5.0
Tomcat5.5.20
eclipse3.2.1

・Context path="/TestContext"

・web.xmlの抜粋
<servlet>
<servlet-name>name_test</servlet-name>
<servlet-class>db.ListTest</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>name_test</servlet-name>
<url-pattern>/db/ListTest</url-pattern>
</servlet-mapping>


足りない情報がありましたらご指摘いただければ追加いたします。
何卒よろしくお願いいたします。
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2007-03-14 00:23
Tomcatの5.0と5.5ではgetRequestURLの実装が違うと聞いた事があります。
5.5では完全にServletAPI2.4の仕様に準拠しており、
フォワード前後でURLが変わりますが、
5.0では変わらないと聞きました。
(ServletAPI2.3/2.4を見比べたとかではありません。)

(上記が本当だとして)
ServletAPI2.4を使われるのでしたら、Tomcat5.5の実装が本来の実装であるので、
フォワード前でリクエストに現在のURLを格納するなどの対応をすべきでしょう。
n-squid
会議室デビュー日: 2004/09/17
投稿数: 14
投稿日時: 2007-03-14 09:12
ありがとうございます。
Tomcat5.5は初めてなので、そういった仕様であるとは知りませんでした。
アドバイスいただきましたように、フォワード前にリクエストに現在のURLを格納
する等で対応をしたいと思います。
1

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