RequestDispatcherインターフェイスと抽象メソッドの定義について

このQ&Aのポイント
  • RequestDispacherインターフェイスについて知りたい方への質問です。
  • RequestDispacherインターフェイスのforwardメソッドについて疑問があります。
  • インターフェイスの原則と例外についての解答をお願いします。
回答を見る
  • ベストアンサー

RequestDispacherインターフェイスのことを知っている方がいたら・・

マニアックな質問なのかもしれませんが・・ インターフェイス及び抽象メソッドの定義は ●インターフェイスに定義されているメソッドは必ず抽象メソッドである ●抽象メソッドにはメソッドのプロトタイプだけが定義されている だと思うのですが、 RequestDispatcherインターフェイスのforwardメソッドには既に 「サーブレットから他のリソースへ、requestオブジェクトとresponseオブジェクトを転送する」 という処理内容が定義されているように思います。>java.sun.comのapiドキュメント これってインターフェイスの原則から外れていると思うのですが、 どうなのでしょうか。「例外」もあるってことなんでしょうか。 おひまだったら解答をお願いいたします。

  • Java
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.1

別に RequestDispatcher に限らないでしょう。例えば、J2SE で Iterator の next() の説明から引用すると、 J2SE> 繰り返し処理で次の要素を返します。 とあります。 インターフェースの説明は「××をする」と書いてあれば、そのインターフェースを 実装するクラスで「××をする *ように実装しなさい* 」と書いてあるのだ、という ふうに読むべきです。 たまたま RequestDispatcher は、自分で実装することが無い(サーブレットコンテナ を提供する人が実装する)から、質問にあるように読めてしまうんですよね。

masamisss
質問者

お礼

理解しました。

関連するQ&A

  • インターフェースについて

    いまサーブレットをやっています。 Java言語仕様では、 「インターフェースの定義には、メソッドの定義を書いてはいけない」 (メソッドの定義はそのインターフェースをimplementsしたクラスのなかで オーバーライドする) ということになってますよね? …でも、 APIリファレンスを読むと、 インターフェースHttpServletRequestのメソッドgetParameterには、 「リクエストパラメータの値をString型として返す」と書かれています。 ↑これって上記のJava言語仕様と矛盾してませんか? まるでどこかでgetParameterメソッドの定義がなされているかのようです。 これってどういうことでしょう? 考えれば考えるほど、訳わかりません。とっても混乱中です(-_-)

    • ベストアンサー
    • Java
  • RequestDispatcherオブジェクトについて。

    データベース表示を行うサーブレットを呼び出す処理を行うには、RequestDispatcherオブジェクトを取得して、そのforwardメソッドを呼び出すだけと聞きましたが、うまくいきません。どなたかどこが悪いか教えてください。 // データベース表示するために、RequestDispatcherを取得 ServletContext cx = getServletContext(); RequestDispatcher rd = cx.getRequestDispatcher( "/netjv/servlet/shuwa.ext_db5_2_1"); // サーブレットを呼び出す rd.forward(request, response); } catch (Exception e) { e.printStackTrace(); } } 後、URL部分にはどこからのパスを書けばよいのでしょうか?あってるか不安です。

    • ベストアンサー
    • Java
  • サーブレットコンテキストの意味がわからなくて困っています。

    やさしいJava活用編で勉強しているのですが、 サーブレットコンテキストの説明が書いてなく、ネットで調べても意味不明です。 サーブレットコンテキストは、 javax.servlet.ServletContextインタフェースを実装するクラスのインスタンスで、そのアプリケーションに一つあるとのことですが、 そのサーブレットコンテキストの意味がわからなくて困っています。 HttpSessionのようなもので、クライアントではなく、そのアプリケーションに対して1つあるということですが... ServletContextオブジェクトは、具体的に何の情報を持っているのですか? また以下のソースですが、 なぜ指定されたパスにあるリソースを、ラッパーとして機能するRequestDispatcherオブジェクトを返してから、 forwardで転送するのですか? ServletContext sc = getServletContext(); sc.getRequestDispatcher("/thanks.html").forward(request, response);

    • ベストアンサー
    • Java
  • インタフェースとは

    インタフェースとはメソッドをのみを定義してある抽象クラスようなものということですが、具体的にどのようなときに役立つのでしょうか? ご存知の方、宜しくお願いします。

    • ベストアンサー
    • PHP
  • インターフェイスの使い方がわかりません(初心者です)

    Javaを始めたばかりの初心者です。 「やさしいJava」を買って一通り学んだのですが、 インターフェイスの使い方がよくわからず、困っています。 インターフェイスを実装することでインターフェイスが持つメソッドがすべて定義されてることが保障される、 というのはわかるんですが、そのことがどうして有用なのでしょう? また、具体的にはスレッドを扱うときにRunnableインターフェイスを実装する理由がわかりません。 Threadクラスのオブジェクトを作成するときに、 Runnableを実装したクラスのオブジェクトの変数を 引数にしないといけないんですよね? このとき、Runnableインターフェイスが 「runメソッドが定義されていなければならない」 とだけいうものだったとしたら、 Runnableを実装してなくてもrunメソッドさえ定義してあれば 実行できそうな気がするんですが・・・

    • ベストアンサー
    • Java
  • メソッドの引数に指定されているインタフェースについて

    最近サーブレットをいじっているので例としてサーブレットを扱いますが、一般的な話題として扱っていただければと存じます。 非常に質問を文章化しにくいのですが・・ たとえば、クラスHttpServletには以下のようなメソッドがあります。 doGet(HttpServletRequest req, HttpServletResponse resp) このメソッドの引数に指定されているHttpServletRequest/Responseはいずれもインタフェースなわけですが、メソッドの引数にインタフェースを指定するというのは、具体的にどういうことなのでしょうか? これがたとえばintだったりStringだったりした場合は簡単にイメージできるのですが、インタフェースだとさっぱりわかりません。 質問がわかりにくいかもしれませんが、よろしくお願いいたします。

    • ベストアンサー
    • Java
  • インターフェイス、列挙型について

    インターフェイスにclone()メソッドが無くて気づいたのですが、 インターフェイスはObjectを継承しないのですか? しかしそれ以外のメソッドは定義されていたので、何らかのクラスを継承しているのでしょうか? 列挙型のメンバにもclone() は無かったですけど、別のメソッドは持っていました。 列挙型や、そのメンバもスーパークラスを持っているのですか?

  • 抽象クラスとインタフェースの違いは?

    基本的なことかもしれなのですが、疑問に思ったのですが、抽象クラスとインタフェースは、どういう違いがあるのでしょうか? 実際にそれぞれ定義してみるとあまり違いが無いような気がしてしまいます。 「抽象クラスは、抽象データ型を定義するもの」で「インターフェースは、オブジェクトのインターフェースを定義するもの」という解釈でいいのでしょうか? 意味的な違いはあっても実際は、同じもののような気がするのですが、どう違うのでしょうか?

    • ベストアンサー
    • Java
  • サーブレットforward時の実行メソッドについて

    初歩的な質問で失礼します。 サーブレットAに doGet, doPost, serviceメソッドを実装しています。 サーブレットBのdoPostメソッド内にて サーブレットAにforwardを実行する場合に、 呼出されるのはサーブレットAのどのメソッドですか? JSPへのforwardはできたのですが、 サーブレットへのforwardができず悩んでいます。 サーブレットのAPIを読んでもいまいちわかりません。 何かメソッドに関する制約があるのでしょうか? 上の質問は全くマト外れでしょうか? 追加ですが・・・ サーブレットからforwardされたサーブレットで、 そこからさらにJSPへforwardすることはできますか? Apache2.0.43+tomcat4.1.12+Java1.4.0_01です。

    • ベストアンサー
    • Java
  • 「インタフェースを実装してそれが持つ抽象メソッドをオーバーライドする」

    「インタフェースを実装してそれが持つ抽象メソッドをオーバーライドする」は正しい? はじめまして。Javaのインタフェースに関する質問です。 私はこれまで、インタフェースを使うときは、インタフェースを実装してクラスを宣言し、そのクラス、またはサブクラスでインタフェースがもつすべての抽象メソッドを定義する、と理解していました。 しかし、下の例をみてください。抽象メソッドの定義を、インタフェースの実装の以前で与えています。問題無くコンパイルでき、実行できます。実行結果も以下の通りです。 インタフェースの抽象メソッドへの定義の与え方やその実行のされ方は、メソッドのオーバーライドと同様と思っていましたので、下記のコードでは「クラスBが抽象クラスではありません」や、「インタフェースの抽象メソッドがオーバーライドされていません」などの文法エラーがでると思っていました。 そこで、質問です。 インタフェースが持つ抽象メソッドの定義を与える場所について、または、これに関する説明のあるページなど、何かご存知でしたら教えてください。 ★コード★ interface X{   void show(); } class A{   public void show(){     System.out.println("A");   } } class B extends A implements X{ } public class Main{   public static void main(String[] args){     X x=new B();     x.show();   } } ★実行結果★ >java Main A ★Java環境★ java 1.6.0_21 javac 1.6.0_16

    • ベストアンサー
    • Java

専門家に質問してみよう