- - PR -
ServletContext,HttpServletRequestなどについて
1
| 投稿者 | 投稿内容 | ||||||||
|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-03-05 12:00
こんにちはナスティキャットです。
現在サーブレットの勉強をしているのですが、ServletContext,HttpServletRequestのところで困ってます。 HttpServletRequestはServletRequestを継承していますが、両方ともインターフェースとなっていて、実際の処理の部分は何処で行われているのでしょうか? APIリファレンスを見るる限りではわかりません。 サーブレットコンテナが処理の部分を定義しているのでしょうか? サーブレットが定義しているとしたら public void doGet (HttpServletRequest request, HttpServletResponse response) { この部分のHttpServletRequestはインターフェースであると思うのですが・・・ インタフェースとは、ある特定の機能の概要を記述したもので、インタフェースを実装したクラスは、同一のインタフェースを実装したクラスとの間においてある特定の機能の概要を共通に持ち、機能概要の詳細はそれぞれのクラスで定義するもの。 と認識していますがここではインスタンス化しているように思うのですが・・・ 下手な質問でごめんなさい、どなたかご教授ください。 | ||||||||
|
投稿日時: 2004-03-05 13:25
こんにちわ、ちばです。
apiリファレンスに載ってますね。 http://java.sun.com/j2ee/sdk_1.3/ja/techdocs/api/ HttpServletRequestを実装しているクラスはHttpServletRequestWrapperクラスです。
インスタンス化はしていません。 どこかでインスタンス化したオブジェクトの型、HttpServletRequestをパラメータとして 渡しているだけです。 うまいこと説明できていませんが、他の方のレスも参考にしてください。 | ||||||||
|
投稿日時: 2004-03-05 13:38
直接 HttpServletRequest を new することは出来ませんが、HttpServletRequest をimplements した HttpServletRequestWrapper を HttpServletRequest として扱うことはできますよね。
オブジェクト指向の多態性ですよ。 ここが参考になると思います。 | ||||||||
|
投稿日時: 2004-03-05 14:09
で、サーブレットに対して渡される HttpServletRequest の実体はコンテナ側で実装されています。
クラス名を表示すればわかりますが、 ・Tomcat では org.apache.coyote.tomcat5.CoyoteRequest http://cvs.apache.org/viewcvs.cgi/jakarta-tomcat-catalina/catalina/src/share/org/apache/coyote/tomcat5/CoyoteRequest.java?rev=1.31&view=markup ・WebLogic では weblogic.serlvet.internal.ServletRequestImpl とかになります。まぁ、実装の中身をみずにインターフェースでコーディングできるのがオブジェクト指向ですから、あまり気にすることはありません。 インターフェースから期待できる挙動を示さない場合だけソースをみたりサポートに問い合わせれば良いわけです。 | ||||||||
|
投稿日時: 2004-03-05 17:26
ちばさん、でゅうくさん、インギさん、どうもありがとうございます。
大変勉強になりました。 引用: -------------------------------------------------------------------------------- 直接 HttpServletRequest を new することは出来ませんが、HttpServletRequest をimplements した HttpServletRequestWrapper を HttpServletRequest として扱うことはできますよね。 -------------------------------------------------------------------------------- この考え方を使えばより良いプログラムが組めそうですね、 JUnitのMockObjectなどもこのような考え方なのでしょうか? | ||||||||
|
投稿日時: 2004-03-05 18:11
そうですね。 テストされるクラスは、型が同じなので MockObject だと意識する事無く動作することが出来ます。 これらの考え方は、オブジェクト指向を有効に活用するために欠かせないものですので、しっかりと押さえておくと良いでしょう。 | ||||||||
|
投稿日時: 2004-03-05 19:31
HttpServletRequestWrapper はその性質からコンストラクタに HttpServletRequest が必要ですので、単体では new できないという罠がありますので Mockアプローチのテストにそのままでは使えません。[ メッセージ編集済み 編集者: インギ 編集日時 2004-03-05 19:31 ] | ||||||||
1
