2011-12-18 2 views
6

私はサーブレットのクラスを持っています。私はまだそれに取り組んでいます(つまり、それはまだindex.jspだけをロードし、他のファイルはロードしません)。私のコンストラクタにvoidの除去、私のクラスにsuper()またはthis()を入れる場所

[OK]を

SEVERE: Exception while deploying the app [ContentManagement] : (class: contentmanagement/content/EditServlet, method: <init> signature:()V) Constructor must call super() or this() 

アップデート:私は私のコードをコンパイルすることができない、しかしだ

@WebServlet(name = "EditServlet", urlPatterns = {"/content/edit"}) 
public class EditServlet extends Library.MyServlet { 
    public EditServlet() { 
     super(); 
    } 

    public void doGet (HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
     System.out.println("EditServlet loaded"); 
    } 
} 

を次のように

public class MyServlet extends HttpServlet { 
    public MyServlet() { 
     super(); 
    } 

    public void loadView (HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
     RequestDispatcher dispatcher = request.getRequestDispatcher("/index.jsp"); 

     response.setContentType("text/html;charset=UTF-8"); 

     System.out.println("MyServlet::LoadView() success"); 

     dispatcher.forward(request, response); 
    } 
} 

私のサーブレットがあります電話:​​must call firstの部分が消えてしまったが、まだ呼び出されているにもかかわらず、私はスーパーに電話しなければならないと言っている。

更新

私は彼らが私の例が既に行われていることを示したときに、コンストラクタ内super()を置くために言っておく、それがコードの最初の行です....以下の応答を理解していません。他のアドバイスは高く評価されます。

どのような考えですか?

これは現在問題ではありません。私は何がこの問題を解決したのかはわかりませんが、複数の変更を加えてアプリケーションを再構築することで、私はもはやこの問題を経験しません。

+2

最初にする必要があるというエラーが表示された場合は、最初にコンストラクタに入れてみましたか? –

+1

コンストラクタには戻り値の型がありません。 MyServletとEditServletの前にvoidを削除してください。コードはコンパイルされますか? –

+3

Netbeansを使用していますか?私はこのNetbeansの奇妙なことについての同様の質問を思い出してください:http://stackoverflow.com/questions/6560988/method-must-call-super-error-in-netbeansつまり、あなたのビルドは汚いです。たとえば、IDEではなくファイルエクスプローラでプロジェクト内のクラスファイルの名前を手動で変更したり移動したりしています。それらのコンストラクタは、まったく必要ありません。サーブレットは(あなたがあなたの汚れたクラスパスをきれいにした後で)どれもなくても同じようにうまくいくはずです。 – BalusC

答えて

11

あなたの問題があった。

method: <init> signature:()V) Constructor must call super() or this()

それはVerifyError症状のように思えます。清掃し、プロジェクトを再構築しても問題が解決しなければならない、また次を参照してください。


さらに、あなたはsuper()シングルラインであなたのコンストラクタを削除することができます。 JVMはデフォルトの(暗黙的に隠された)コンストラクターでそれを行います。したがって、これらの不要な行をクリア:

public MyServlet() { 
    super(); 
} 

public EditServlet() { 
    super(); 
} 

は、あなたは、コンストラクタで追加のビジネスラインを書くために必要な場合は、明示的に super()を呼び出す必要があります。

2

Library.MyServletのコンストラクタはどのように見えますか?注意として、superキーワードをコンストラクタで使用する場合は、にはが最初の行に表示されます。 thisの場合も同じです。

空のコンストラクタを削除しようとしましたか?明らかに、あなたはそれを使用していません。

+0

コンストラクタは上に示されています – Webnet

+0

@Webnetあなたのコードでは 'extends Library.MyServlet'を読み込んでいますが、あなたが示したコードは' MyServlet'のためです。同じであれば、 'EditServlet'の最初の行に' super() 'を書くか、' EditServlet'コンストラクタを削除してください。 –

+0

'MyServlet'はライブラリパッケージの一部です。はっきりしていない。 'EditServlet'のコンストラクタを削除しても、' MyServlet'にはまだエラーがあります – Webnet

2

Library.MyServletは引数を取らないコンストラクタを持ち、これは動作するはずと仮定:

public class EditServlet extends Library.MyServlet { 
    public EditServlet() { 
     super(); 
     // Rest of initialization code... 
    } 
    //... 
} 
1

あなたがthis()super()を使用する場合は、コンストラクタの最初行でなければなりません。

public MyClass() { 
    this(someStaticMethod()); 
} 

または

public MyClass() { 
    super(someStaticMethod()); 
} 

や工芸品の他のプライベートコンストラクタは合うように:あなたはがthis()またはsuper()を呼び出す前に、いくつかの作業を行う必要がある場合

しかし、あなたはこのパターンを使用することができます。

呼び出すメソッドはインスタンスメソッドではありません。したがって、すべての場合に機能するわけではありませんが、役立つ可能性があります。

+0

私のコンストラクタの最初の行です。私のコードを見てください: - \ – Webnet

2

ちょうどきれいにしてください... これはビルド上の問題です。あなたのクラスは現在完全に正常です。ときどきコードを修正すると、コード全体ではなくコードの一部のみが再コンパイルされます。クリーンでビルドが必要です。

関連する問題