- - PR -
forward 後の URL と Path
1
| 投稿者 | 投稿内容 |
|---|---|
|
投稿日時: 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) これは正しいのでしょうか?というか、コンテナの実装に依存するのでしょうか。 仕様を見た限りではそれらしい記述を見つけられなかったので・・・ よろしくお願いします。 |
|
投稿日時: 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-11-12 17:12
include なら大丈夫だった気がします。今回たまたま forward を
用いているので、たいした意味は無いのですが、みなさんは forward と include をどのように使い分けていらっしゃるのでしょうか? |
|
投稿日時: 2002-11-12 19:39
>2.上記の時、JSP で getRequestURL() を実行すると、転送元サーブレット
> の URL が取得されました。(Tomcat4.1.12) > これは正しいのでしょうか?というか、コンテナの実装に依存するのでしょうか。 > 仕様を見た限りではそれらしい記述を見つけられなかったので・・・ 仕様書を読んだわけじゃないですが,普通の動作だと思います. 大抵の入門書にだって書いてあるので. forwardはサーバー側で処理を移すだけで,クライアントには 見えない処理です.URLが変わるわけないと思いますよ. forwardとincludeの使い分けは,アプリケーションの設計ですね. どちらがより記述しやすくバグが出にくく,拡張性に優れるか. そういう視点で決めれば良いのでは. |
|
投稿日時: 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-11-14 01:22
> ではなくて、逆に「リクエストされた URL は変わってないのに、forward 先では
> オリジナルの requested URL が取れないってのはどういうこと?」という疑問では。 > # 確かに私も「ん?」と思ってしまった…。 そうなのです。たぶんそうすべき理由があるのでしょうけど。。。 > コードで呼ぶときはちゃんと return しとかないと、意図しない裏側の動作を > してしまったりします。 スミマセン。これちょっと意味がわからなかったです。 |
1
