4

HTTP Status 405 - HTTP method POST is not supported by this URL次のコード(以下)を使用するとエラーが発生します...トラブルの原因となっている行は(明らかに)getServletContext().getRequestDispatcher("/EditObject?id="+objId).forward(request, response);

package web.objects;

import java.io.IOException;
import java.sql.SQLException;

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

import dao.ObjDetailsDao;

@SuppressWarnings("serial")
public class EditObjectText extends HttpServlet {

 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {


  int objId = Integer.parseInt(request.getParameter("objId"));
  String text = (String)request.getParameter("description");

  ObjDetailsDao oddao = new ObjDetailsDao();
   try {
oddao.modifyText(text, objId);
 /////////////
    getServletContext().getRequestDispatcher("/EditObject?id="+objId).forward(request, response);
 ////////////
   } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   } catch (ServletException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
        }
      }
}

編集:throws ServletException, IOException提案どおりに追加しましたが、これはエラーを変更しませんでした。

編集: EditObject サーブレットは次のようになります

 @SuppressWarnings("serial")
public class EditObject extends HttpServlet{

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {

        int objId = Integer.parseInt(request.getParameter("id"));
        dispPage(objId, request, response);
    }

    private void dispPage(int objId, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{        

// ... lots of code in here
            getServletContext().getRequestDispatcher("/jsp/objectPageEdit.jsp").forward(request, response);

    }
}

別の編集:基本的に、私は自分がしていることをすることができません。私が必要としているのはこれです。ユーザーは投稿リクエストを送信し、Post の代わりに Get メソッドを使用するサーブレットに戻します。エラーを発生させずにこの紹介を行うにはどうすればよいですか? 前もって感謝します。

4

2 に答える 2

8

(以前に投稿した間違った回答については申し訳ありませんが、削除しました)


どうやら、URLはメソッドがオーバーライド/EditObjectされていない別のサーブレットにマップされています。現在HTTPリクエストを実行しているメソッドはPOSTであるため、doPost()これも呼び出されます。デフォルトRequestDispatcher#forward()の実装はHTTP405を返します。実際の目的がメソッドが呼び出されるようにGETリクエストを起動することである場合は、代わりに使用する必要があります。 HttpServlet#doPost()doGet()HttpServletResponse#sendRedirect()

response.sendRedirect("/EditObject?id="+objId);
于 2010-08-26T17:03:10.547 に答える
2

EditObject クラスに doPost() を追加します。

 @SuppressWarnings("serial")
public class EditObject extends HttpServlet{

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
      process(request, response);
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
      process(request, response);
    }


    public void process(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {    
        int objId = Integer.parseInt(request.getParameter("id"));
        dispPage(objId, request, response);
    }

    private void dispPage(int objId, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{        

// ... lots of code in here
            getServletContext().getRequestDispatcher("/jsp/objectPageEdit.jsp").forward(request, response);

    }
}
于 2010-08-26T17:11:10.773 に答える