2

このトピックについてよく検索しましたが、探しているものを提供する質問/回答はないようです。答えがどこかに浮かんでいる場合はお詫び申し上げます。

私が持っているのは、私が作成した一連のユーティリティ JSP であり、適切な JSP に移動するためのボタン フォームがあるインデックス タイプの JSP を介してアクセスします。それぞれ次のようになります。

<form method="POST" action="delete.jsp">
<input type="submit" value="Delete" name="B2">
</form>

私の delete.jsp には、次のように、ボタンが押されるとサーブレットを呼び出す別のフォームがあります。

<form method="post" action="ModelServlet">
Select file to delete: <input type="file" name="dataFile" id="fileChooser" /><br />
<br /> <input type="submit" name="DELETE" value="Delete" />
</form>

この「削除」ボタンを押すと、「HTTP ステータス 405 - HTTP メソッド POST はこの URL ではサポートされていません」というエラーが表示されます。これにより、ユーティリティ JSP がサーブレットを見つけるのを妨げている何らかのマッピング エラーまたは何かがあると思われます。これに関するアイデアはありますか?私のサーブレットコードは以下の通りです:

それが呼び出している私のサーブレット:

package com.model;

import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.FileUtils;

public class ModelServlet extends HttpServlet {
        protected void init(){}

    protected void doPost(Model ourModel, HttpServletRequest   request, HttpServletResponse response) throws ServletException, IOException {
        //check for which case we have: upload, delete, move, or copy
        if (ServletFileUpload.isMultipartContent(request)){
        //do upload stuff
        performUpload(request,response);            
    }
    else if (request.getParameter("DELETE") != null){
        //do delete stuff
        performDelete(request,response);
    }
    else if (request.getParameter("MOVE") != null){
        //do move stuff
        performMove(request,response);

    }
    else if (request.getParameter("COPY")!= null){
        //do copy stuff
        performCopy(request,response);
    }

}

その下の関数に対して定義されたメソッドを使用します。

乾杯、ジョー

4

1 に答える 1

2

エラーを正しく解釈していません。サーブレットは見つかりましたが、目的のメソッドではありませんでした。を使用しているため、明らかにメソッド<form method="post">を探しています。doPost()したがって、提供したことを確認するだけで済みます (そして、誤って に委任していないことsuper.doPost()を確認してください)。メソッドの注釈を使用して@Override、正しいものを実際にオーバーライドし、オーバーロードされた (ただし実際には使用されていない) メソッド署名をタイプミスしていないことを確認してください。

サーブレット全体が見つからない場合は、代わりに 404 エラーが発生します。


更新:質問の更新によると、サーブレットは実際のdoPost()メソッドをまったくオーバーライドしていません。サーブレット API で指定されていない事実上オーバーロードされたメソッドになる未知の 3 番目の引数があります。

protected void doPost(Model ourModel, HttpServletRequest   request, HttpServletResponse response) throws ServletException, IOException {

メソッドに注釈を付けると、無効な引数@Overrideのためにまったくコンパイルされないことがわかります。Model ourModelそれに応じて修正します。

@Override
protected void doPost(HttpServletRequest  request, HttpServletResponse response) throws ServletException, IOException {
于 2013-02-04T20:03:03.787 に答える