- PR -

forward 後の URL と Path

1
投稿者投稿内容
ボア
ベテラン
会議室デビュー日: 2002/05/22
投稿数: 78
投稿日時: 2002-11-08 20:04
サーブレットから JSP に forward した際、JSP 側で
request.getServletPath() や
request.getRequestURI()
を実行すると、転送先(ここではJSP)のパスが取得されます。
仕様を見た限り、これは正常のようなのですが、ここで質問があります。

1.ここで、転送元のサーブレットに関する ServletPath や RequestURI を
取得するのによい方法はありますでしょうか?
サーブレット側で上記メソッドを実行後、これを Request オブジェクトの
Attribute に設定するという方法はあまりスマートでない気がします。
2.上記の時、JSP で getRequestURL() を実行すると、転送元サーブレット
の URL が取得されました。(Tomcat4.1.12)
これは正しいのでしょうか?というか、コンテナの実装に依存するのでしょうか。
仕様を見た限りではそれらしい記述を見つけられなかったので・・・

よろしくお願いします。
しょむ
ぬし
会議室デビュー日: 2001/09/06
投稿数: 430
投稿日時: 2002-11-09 03:28
forward でなく include ではだめですか?

<%
if ( CASE ) {
%><jsp:include page="forward1.jsp" flush="true" /><%
} else {
%><jsp:include page="forward2.jsp" flush="true" /><%
}
%>
ボア
ベテラン
会議室デビュー日: 2002/05/22
投稿数: 78
投稿日時: 2002-11-12 17:12
include なら大丈夫だった気がします。今回たまたま forward を
用いているので、たいした意味は無いのですが、みなさんは
forward と include をどのように使い分けていらっしゃるのでしょうか?
未記入
ぬし
会議室デビュー日: 2002/03/28
投稿数: 255
投稿日時: 2002-11-12 19:39
>2.上記の時、JSP で getRequestURL() を実行すると、転送元サーブレット
> の URL が取得されました。(Tomcat4.1.12)
> これは正しいのでしょうか?というか、コンテナの実装に依存するのでしょうか。
> 仕様を見た限りではそれらしい記述を見つけられなかったので・・・
仕様書を読んだわけじゃないですが,普通の動作だと思います.
大抵の入門書にだって書いてあるので.

forwardはサーバー側で処理を移すだけで,クライアントには
見えない処理です.URLが変わるわけないと思いますよ.

forwardとincludeの使い分けは,アプリケーションの設計ですね.
どちらがより記述しやすくバグが出にくく,拡張性に優れるか.
そういう視点で決めれば良いのでは.
しょむ
ぬし
会議室デビュー日: 2001/09/06
投稿数: 430
投稿日時: 2002-11-13 01:27
Servlet API 2.3 の SRV.8.4 に「ターゲットサーブレットの request の path element は RequestDispatcher を得るのに使われた path でなければならない。例外は、getNamedDispatcher() で得られたもの」という記述がありますね。

forward される側の Servlet/JSP は、それが呼び出された URL なんぞに影響されるような作りにしちゃダメ、ってことなのではないでしょうかね。


> forwardはサーバー側で処理を移すだけで,クライアントには
> 見えない処理です.URLが変わるわけないと思いますよ.

ではなくて、逆に「リクエストされた URL は変わってないのに、forward 先ではオリジナルの requested URL が取れないってのはどういうこと?」という疑問では。
# 確かに私も「ん?」と思ってしまった…。


んで、forward/include の使い分けについて。

forward() のほうもふつうに戻ってきちゃうんですよね(当たり前ですが)。out は close() なりされていますが。コードで呼ぶときはちゃんと return しとかないと、意図しない裏側の動作をしてしまったりします。

まぁ、中身をまるまる差し替えたいときは forward()、一部を入れたいときは include()、という至極まっとうな使い分けになるかと
ボア
ベテラン
会議室デビュー日: 2002/05/22
投稿数: 78
投稿日時: 2002-11-14 01:22
> ではなくて、逆に「リクエストされた URL は変わってないのに、forward 先では
> オリジナルの requested URL が取れないってのはどういうこと?」という疑問では。
> # 確かに私も「ん?」と思ってしまった…。

そうなのです。たぶんそうすべき理由があるのでしょうけど。。。

> コードで呼ぶときはちゃんと return しとかないと、意図しない裏側の動作を
> してしまったりします。

スミマセン。これちょっと意味がわからなかったです。
1

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