2
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class ServletTemplate extends HttpServlet {

    public void doGet(HttpServletRequest ***request***,
                      HttpServletResponse ***response***)
    throws ServletException, IOException {
        PrintWriter out = response.getWriter();
    }

}

上記のコード例では、リクエストとレスポンスは事前定義されていますか? つまり、それらが定義されているパッケージで事前定義されている場合、それらの代わりに他の名前を使用できますか? 別の質問があります ServletException の仕事は何ですか ServletException は例外を処理することを知っていますが、私の質問は、詳細な機能を知りたいすべてのプログラムでそれを使用する必要があるかどうかです

4

2 に答える 2

3

Java プログラム内の任意の変数に、任意の名前を付けることができます。インターフェイスにメソッドを実装するルール、またはスーパークラスのメソッドをオーバーライドするルールでは、パラメーターの型が一致する (同じ型、同じ順序、同じ数) 必要がありますが、名前はまったく関係ありません。 . これは Java EE とは何の関係もありません。プログラミング言語がどのように機能するかだけです。

についてServletException:ドキュメントdoGet()をざっと見てみると、スーパークラスで定義されたメソッドで例外がスローされていることがわかりHttpServletます。そのため、メソッドをオーバーライドするサブクラスも例外をスローする必要があります。

あなたの質問は両方とも、継承とオーバーライドが Java で機能する方法に関連しており、Java EE 固有のものではありません。より複雑なコードを書き始める前に、まず Java での継承とオーバーライドに関するドキュメントを調べることをお勧めします。Java でオブジェクト指向の概念がどのように適用されるかを理解するのに苦労しているようです。

于 2013-08-08T20:54:15.590 に答える
1

それらは、オーバーライドする引数の名前にすぎません。本質的に、クラス ServletTemplate は HttpServlet を継承します。次に、GET メソッドによって送信されたリクエストに機能を提供する場合は、親クラスからオーバーライドする必要があります。変数の名前は関係ありません。Java でメソッドをオーバーライドするためのルールは次のとおりです。

  • メソッドのシグネチャと同じメソッドのシグネチャを維持します。
    • 署名は、メソッドの名前と引数リストで構成されます (名前は関係ありませんが、型は重要です)。
  • より制限的なアクセサー修飾子を定義しないでください (たとえば、public から private へ)。

したがって、次のようにメソッドを実装できます(必要な場合)

public void doGet(HttpServletRequest x,
    HttpServletResponse y) throws ServletException, IOException 
{
    PrintWriter out = y.getWriter();
}

パラメータを反転することはできません。以下は間違っています:

public void doGet(HttpServletResponse response,
     HttpServletRequest request) throws ServletException, IOException 
{
    PrintWriter out = y.getWriter();
}
于 2013-08-08T20:59:47.780 に答える