<html:form
や
<form
の
action
の位置に設定する値として
<%= response.encodeURL(request.getRequestURI()) %>
という記述を時々みます。
request.getRequestURL()
であれば、
http://~からはじまる
URLになるので
意味はわかるのですが、
request.getRequestURI()になっているのは
なぜでしょう。
これだと、/コンテクスト名/~
のような記述になってしまい。
webサーバのホスト名を識別するような
情報がどこにもみあたらないのですが・・
いったい、どういうことなのでしょうか?
No.3
- 回答日時:
<<結論>> について
ブラウザが保持しているのではなく、requestが保持しているということです。
JPSやHTMLファイルに【http://ホスト名/】と直接書き込んだ場合、ホストが変更になった場合やSSL通信(https)に変更になった場合修正個所が増大することを避けるためにrequest.getRequestURI()を使用していると考えると良いかもしれません。
ありがとうございます。
>JPSやHTMLファイルに【http://ホスト名/】と直接書き込>んだ場合、ホストが変更になった場合やSSL通信(https)に>変更になった場合修正個所が増大することを避けるために>request.getRequestURI()を使用していると考えると良い>かもしれません
という話であれば、
request.getRequestURI(
ではなく
request.getRequestURL(
を使用しても、
同様にして、修正量を減らすことが
できるとおもいます。
静的なドキュメントに
http://~の文字列が
定数のきってあるのであれば、
修正が大変ですが、
request.getRequestURL(
の方式を用いたとしても
ホストが変更になった場合やSSL通信(https)に変更になった場合
修正する必要がないように思えます。
でも、ほとんど、request.getRequestURI()
のほうが使われているようですね。
なぜ、でしょう。
あと、もうひとつ疑問がありますが。
>ブラウザが保持しているのではなく、requestが保持しているということです
ですが、
正確には
以下のような気がするのですが
Webブラウザがおぼえている情報を
もとにして、
その情報をrequestの中に格納するような
形でリクエストをなげている。
結果として、
requestに保持されている。
理由:
httpプロトコル自体はステートレスなので、
webサーバは覚えていない。
1回リクエスト・レスポンスすると
その情報はなくなる。
レスポンスの結果として
かえってきたHtmlに
/コンテクスト/~
の形式で、
パスが記述されていると、
なにかが、http://~の部分を
覚えていて、補うような
形をとらないと、物理的におかしいように
感じます。
クライアントのwebブラウザのほうで、
レスポンスを受け取ったときのページの位置情報を
おぼえていて、それに基づいて、
requestに保持させるようにしなければ、
物理的に説明がつかないように思われる。
もし間違っているとすればいったい
どこに記憶されている情報が
requestの中に格納されるのでしょうか?
それとも、根本的になにか
勘違いしているでしょうか?
No.2
- 回答日時:
補足:の件から説明すると
Webアプリケーションにおいてクライアントという考えは
意味を持ちません。つまりクライアントのホスト名やIPアドレスに依存していては、Webアプリケーションは構築できないからです。
簡単に言うと、クライアントはサーバに存在するJSPファイル等を参照しているに過ぎず、/コンテクスト名/~とリンクされていても、クライアントのローカルのディレクトリを見るわけではなくあくまでサーバのローカルディレクトリを参照しているからです。
例えば
を<a href="<%= response.encodeURL(request.getRequestURI()) %>">URI</a>
のようにしてリンクを張ってみてください。
このリンクにカーソルを合わせるとhttp://www.****.../
のように表示されるはずです。
説明が不十分かもしれませんが補足ください。
根気よく、ありがとうがざいます。
Webブラウザのほうが
カレントディレクトリのような
URLの基準値を覚えているようです。
http://****.co.jp/appl1/index.jsp
の結果によって表示される
HTMLソースに
<a href="index.jsp"
のような記述があると
http://****.co.jp/appl1/index.jsp
にリンクしにいこうとして、
<a href="/index.jsp
http://****.co.jp/index.jsp
にリンクしにいこうとして
いるようでした。
なお、Webアプリケーションとは関係なしに、
静的なhtmlのページをwebサーバにおいた状態で
<a hrefについて試してみても
そうなりました。
あと、ローカルの
デスクトップに
hoge.html
をおいた状態で
C:\Documents and Settings\k-ookawa\デスクトップ\hoge.html
を表示したところ
<a href="jikkenDir/aaa.html">aaa</a>
の部分は
file://C:\Documents and Settings\k-ookawa\デスクトップ\jikkenDir\aaa.html
<a href="/jikkenDir/bbb.html">bbb</a>
の部分は
file://C:\jikkenDir\bbb.html
と解釈されているようです。
なので、
Webブラウザが今表示している
ページがどこにあるか?
についての状態情報のようなものを保有している
ようで、その情報を元に
URLパターンを作成しているようでした。
そこで、結論なのですが
以下の理解のしかたが正しいか間違っているのかを
教えてください。
間違いであれば、ご指摘いただけたら有難いです。
<<結論>>
サーブレットやJSP
側に
<%= response.encodeURL( request.getRequestURI()
のようなコーディングがなされるのは
Webブラウザが一般的にこのような性質を持っている
ことを踏まえた上でやっていることである。
というような理解のしかたで問題なかったでしょうか?
No.1
- 回答日時:
おつかれさまです。
Javaサーブレット等のWebシステムを動作させるためにTomcat等のサーブレットエンジンは一般的に 「http://www.~」とかかれていない限り同一のサーバへリクエストを返します。 つまり
http://www.****.co.jp/index.jsp内に
<%= response.encodeURL(request.getRequestURI()) %>
のような記述が合った場合サーブレットエンジンは
http://www.****.co.jp/コンテクスト名/~へリクエストを返します。
この回答への補足
クライアントとサーバの
両方が
同じ、****.co.jp
の中にないとダメだ
とか、
同じlocalhost
の中でならうまくいくやり方だ。
とかそういう意味でしょうか?
おもいっきり、勘違いしているかもしれないですが。
そのへんのしくみがまだ、理解不足なので。
早速はやい回答をくださってありがとうございます。
すいませんが、
まだまだ、納得できません。
質問内容を補足すると
たとえば、
1)一番最初
ブラウザでアドレスバーに
http://www.****.co.jp/appl1/index.jsp
と入力してエンターキーを押したとします。
2)サーバ側で
appl1という名前のwebアプリケーションの
index.jspが実行されます。
3)index.jspに
<%= response.encodeURL(request.getRequestURI()) %>
というコードがあったので、
request.getRequestURI()
の部分が
/appl1/index.jsp
におきかえられます。
(4)
それをうけとったブラウザの
HTMLのソースには
/appl1/index.jsp
という記述がありますが。
submitボタンを押して
もう一度リクエストを
だそうにも、どのWebサーバかわからない
以上のようなことに
ならないのですか?
という質問ないようだったのですが
out.println(
で普通に
request.getRequestURI()
とすると
/appl1/index.jsp
という文字列が表示されます。
http://という記述がない文字列にも
かかわらず、
http://wwww.****.co.jp/appl1/index.jsp
には変換されませんが・・・
>http://www.****.co.jp/index.jsp内に
><%= response.encodeURL(request.getRequestURI()) %>>
>のような記述が合った場合サーブレットエンジンは
>http://www.****.co.jp/コンテクスト名/~へリクエスト>を返します。
とは
http://という文字列がない時に
request.getRequestURI()の
先頭に付加してくれるのは
どのような時なのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript Google reCAPTCHAについて 1 2023/02/22 14:37
- JavaScript javascriptのちょっとした動作不良(原因は突き止めたのですが) 1 2023/06/15 19:58
- その他(プログラミング・Web制作) laravel 本番環境でメールが送れません。 1 2023/02/17 17:57
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- JavaScript sessionStorageを調べています。 1 2023/06/20 12:41
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- JavaScript セレクトを全て選択されていないと、文字によるエラーメッセージを表示させるコードを調べています 2 2023/06/22 15:48
- PHP PHPでユーザー情報を入力して簡易ログイン機能をつくってみたのですが 1 2023/05/29 08:51
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
大文字はできるだけ使わない方...
-
C++でWEBブラウザを作成する
-
FFFTPを使ったアップロードがで...
-
Thunderbird 振り分けされなく...
-
【マクロ】エクセルにかいてあ...
-
エクセルで定期的(30分おき)...
-
excel VBA 特定の文字列を含む...
-
Tera Termでのコマンド流し込み...
-
JP1で月末以外で毎週月曜日のジ...
-
C:\\Documents and Settingsが...
-
excel VBA 部分一致の名前をパ...
-
ブラウザにIPアドレスを直打ち...
-
ADでユーザ名と表示名をコマン...
-
大量のフォルダへのハイパーリ...
-
ADのDC移行の手順を教えてください
-
2010でShiftキーを使っても自動...
-
元のフォルダに矢印キーで帰りたい
-
【マクロ】フォルダを3つ、PO...
-
フォルダのサムネイル画像
-
icaclsの読み方
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
大文字はできるだけ使わない方...
-
FFFTPを使ったアップロードがで...
-
Apacheで特定のファイルのみア...
-
C++でWEBブラウザを作成する
-
htaccess ssi basic認証
-
eclipseのPHP Explorerに、.hta...
-
存在しないページを指定してもT...
-
XAMPPで外部からアクセスする方法
-
シンボリックリンクでドキュメ...
-
BASIC認証でダイアログが開かない
-
ASPページを開くとユーザー名と...
-
ホームページのファイル構成の...
-
.htaccessによる検索結果からの...
-
HTMLで大文字と小文字を区別し...
-
ファイル名が変わってしまいます。
-
htmlでサーバのディレクトリを...
-
HTML #include file について
-
Thunderbird 振り分けされなく...
-
フォルダのサムネイル画像
-
Tera Termでのコマンド流し込み...
おすすめ情報