マニアックな質問なのかもしれませんが・・

インターフェイス及び抽象メソッドの定義は
●インターフェイスに定義されているメソッドは必ず抽象メソッドである
●抽象メソッドにはメソッドのプロトタイプだけが定義されている
だと思うのですが、
RequestDispatcherインターフェイスのforwardメソッドには既に
「サーブレットから他のリソースへ、requestオブジェクトとresponseオブジェクトを転送する」
という処理内容が定義されているように思います。>java.sun.comのapiドキュメント

これってインターフェイスの原則から外れていると思うのですが、
どうなのでしょうか。「例外」もあるってことなんでしょうか。
おひまだったら解答をお願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

別に RequestDispatcher に限らないでしょう。

例えば、J2SE で Iterator の
next() の説明から引用すると、

J2SE> 繰り返し処理で次の要素を返します。

とあります。

インターフェースの説明は「××をする」と書いてあれば、そのインターフェースを
実装するクラスで「××をする *ように実装しなさい* 」と書いてあるのだ、という
ふうに読むべきです。

たまたま RequestDispatcher は、自分で実装することが無い(サーブレットコンテナ
を提供する人が実装する)から、質問にあるように読めてしまうんですよね。
    • good
    • 0
この回答へのお礼

理解しました。

お礼日時:2001/11/22 16:43

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

QRequestDispatcher.forwardメソッドで遷移する際のURL

お世話になります。
JSP/サーブレットを使用してwebアプリケーションを作成しています。

タイトルの通りRequestDispatcher.forwardメソッドで遷移する際のURL
についてうまくいかず、原因がわからない為質問させて頂きます。
ご教授宜しくお願い致します。
Aproject/jsp/login.jsp
Aproject/jsp/top.jsp
Aproject/WEB-INF/src/servlet/Login.java
という3つのファイルを使用しています。

login.jspにて<form action="../Login" method="post">で
Login.javaサーブレットにIDとパスワードを渡し、
サーブレットで認証を行ったあと
RequestDispatcher.forwardメソッドにて以下のように
遷移するようになっています。
RequestDispatcher rd = request.getRequestDispatcher("./jsp/top.jsp");
rd.forward(request, response);

遷移はうまくいくのですが、top.jspが表示される時のURLが
http://localhost:8080/Aproject/jsp/top.jspとなるはずが、
http://localhost:8080/Aproject/Login
となってしまいます。
web.xmlの記述は
<servlet>
<servlet-name>Login</servlet-name>
<servlet-class>servlet.Login</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Login</servlet-name>
<url-pattern>/Login</url-pattern>
</servlet-mapping>
としています。
forwardメソッドではなく、sendRedirectメソッドを使用した場合
http://localhost:8080/Aproject/jsp/top.jsp
とうまくいきます。

どのような原因が考えられますでしょうか?
宜しくお願い致します。

お世話になります。
JSP/サーブレットを使用してwebアプリケーションを作成しています。

タイトルの通りRequestDispatcher.forwardメソッドで遷移する際のURL
についてうまくいかず、原因がわからない為質問させて頂きます。
ご教授宜しくお願い致します。
Aproject/jsp/login.jsp
Aproject/jsp/top.jsp
Aproject/WEB-INF/src/servlet/Login.java
という3つのファイルを使用しています。

login.jspにて<form action="../Login" method="post">で
Login.javaサーブレットにIDとパスワードを渡し、
...続きを読む

Aベストアンサー

そういう仕様です。
RequestDispatcherはリクエスト(URL)から実体のデータ(JSP)を隠匿します。

Qオブジェクトとメソッドの、定義の分離

JavaScriptにて、最初にメソッド用の関数を定義しておいた後、それを複数のオブジェクトのメソッドとして利用するようにしたいのですがうまくいきません。

***************************
<html>
<head>
<title>test</title>
<script type="text/javascript">
function a() {return this.size;}
function b(s) {this.size = s;}

function rectA()
{
this.size = 0;
this.getSize = a;
this.setSize = b;
this.notice = function() {alert(this.getSize());}
}

function rectB()
{
this.size = 0;
this.arg = 90;
this.getSize = a;
this.setSize = b;
this.notice = function() {alert(this.getSize());}
}
</script>
</head>


<body>
<script type="text/javascript">
var a = new rectA;
var b = new rectB;
a.setSize(12);
b.setSize(250);
a.notice();
b.notice();
</script>
</body>
</html>
*************************

要するに↑のコードのようなことをやりたいのですが、FireFox3.6と12.1で実行した限りでは、a.notice()は実行されるものの, b.notice()の段階では「this.getSize is not a function」というエラーが出てしまいます。

上手な解決法がありましたらお願いします。

JavaScriptにて、最初にメソッド用の関数を定義しておいた後、それを複数のオブジェクトのメソッドとして利用するようにしたいのですがうまくいきません。

***************************
<html>
<head>
<title>test</title>
<script type="text/javascript">
function a() {return this.size;}
function b(s) {this.size = s;}

function rectA()
{
this.size = 0;
this.getSize = a;
this.setSize = b;
this.notice = function() {alert(this.getSize());}
}

funct...続きを読む

Aベストアンサー

ユーザー関数名が上書されていませんか?試しに

var x = new rectA;
var y = new rectB;
x.setSize(12);
y.setSize(250);
x.notice();
y.notice();

としてみてください?

Q抽象クラス、インターフェイスについて

少し長いですが、以下にコードを書きました。これでコンパイルすると、13個ほどエラーが出て、何がなんだかわかりません。何が間違っているのでしょうか?よろしくお願いします。ちなみに本を見ながらの独学です。
//のりものインターフェイス
interface iVehicle
{
abstract void show();
}
//車くらす
class Car implements iVehicle
{
private int num;
private double gas;

public Car(int n, double g))
{
num = n;
gas = g;
System.out.println("ナンバー" + num +"ガソリン量" + gas +"の車を作成しました");
}
public void show()
{
System.out.println("車のナンバーは" + num +"です");
System.out.println("ガソリン量は" + gas +"です");
}
}
//飛行機クラス
class Plane extends Vehicle
{
private int flight;

public Plane(int f)
{
flight = f;
System.out.println("便" + flight +"の飛行機を作成しました");
}
public void show()
{
System.out.println("飛行機の便は" + flight +"です");
}
}
class sample8
{
public static void main(String args[])
{
iVehicle ivc[];
ivc = new iVehicle[2];

ivc[0] = new Car(1234, 20.5);

ivc[1] = new Plane(232);

for(int i=0; i<ivc.length; i++){
if(vc[i] instanceof Car)
ivc[i].show();
}
}
}

少し長いですが、以下にコードを書きました。これでコンパイルすると、13個ほどエラーが出て、何がなんだかわかりません。何が間違っているのでしょうか?よろしくお願いします。ちなみに本を見ながらの独学です。
//のりものインターフェイス
interface iVehicle
{
abstract void show();
}
//車くらす
class Car implements iVehicle
{
private int num;
private double gas;

public Car(int n, double g))
{
num = n;
gas = g;
System.out.println("ナンバー" + num +"ガ...続きを読む

Aベストアンサー

「コンパイルができない」という話ですよね。また、タイプミスのレベルだと
思うんですが、とりあえず、全部指摘しておきます。

(1) for(int i=0; i<vc.length; i++){
(2)   if(vc[i] instanceof Car)
(3)     System.out.println((i+1)+"番目のオブジェクトはCarクラスです");
(4)   else
(5)     Sytem.out.println((i+1)+"番目のオブジェクトはCarクラスではありません");
(6)   }
(7) }

(1) vc.length → ivc.length
(2) vc[i] → ivc[i]
(5) Sytem → System
(6) 余分な }

といったところです。

QRequestDispatcherオブジェクトについて。

データベース表示を行うサーブレットを呼び出す処理を行うには、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部分にはどこからのパスを書けばよいのでしょうか?あってるか不安です。

データベース表示を行うサーブレットを呼び出す処理を行うには、RequestDispatcherオブジェクトを取得して、そのforwardメソッドを呼び出すだけと聞きましたが、うまくいきません。どなたかどこが悪いか教えてください。
// データベース表示するために、RequestDispatcherを取得
ServletContext cx = getServletContext();
RequestDispatcher rd = cx.getRequestDispatcher(
"/netjv/servlet/shuwa.ext_db5_2_1");

// サーブレット...続きを読む

Aベストアンサー

RequestDispatcher rd = cx.getRequestDispatcher(
"/netjv/servlet/shuwa.ext_db5_2_1");

のURIの部分を
RequestDispatcher rd = cx.getRequestDispatcher(
"/servlet/shuwa.ext_db5_2_1");
としてみてください。

たぶん正常に動くはずです。

もしうごかなければまた結果を教えてください

Q静的メソッドとインスタンスメソッドを定義する方法

簡単な、カウンタクラスからのインスタンス作成とその利用のテストを行いました。

テストとして作成した以下の内容のファイルをブラウザ(IEやFireFox)で開くと、期待した結果は返りますが、(Windowsで処理待ちを示す)砂時計マークがいつまで経っても消えません。

どこかで永続ループでもしているのでしょうか。

どこに問題があるのか、また、こういった問題のデバッグのコツを教えて下さい。
よろしくお願いします。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

<HTML>
<HEAD>
<TITLE>教えて!goo</TITLE>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
<META HTTP-EQUIV="Content-Script-Type" CONTENT="javascript">

<SCRIPT TYPE="text/javascript">
function Counter(initialCount) {
this.count = initialCount;
}

Counter.prototype = {
count : 0,
increment : function() {
this.count += 1;
},
decrement : function() {
this.count -= 1;
}
}

Counter.newInstance = function(initialCount) {
return new Counter(initialCount);
}

var counter;

function testCounter() {
counter = Counter.newInstance(100);
counter.increment();
document.write(counter.count);
}

</SCRIPT>

</HEAD>

<BODY ONLOAD="testCounter()">
</BODY>
</HTML>

簡単な、カウンタクラスからのインスタンス作成とその利用のテストを行いました。

テストとして作成した以下の内容のファイルをブラウザ(IEやFireFox)で開くと、期待した結果は返りますが、(Windowsで処理待ちを示す)砂時計マークがいつまで経っても消えません。

どこかで永続ループでもしているのでしょうか。

どこに問題があるのか、また、こういった問題のデバッグのコツを教えて下さい。
よろしくお願いします。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4...続きを読む

Aベストアンサー

writeで書き込んだ後はcloseしてください。


このカテゴリの人気Q&Aランキング

おすすめ情報