サーブレット/JSPでHTTP ERROR 405が出た時の対処。
サーブレットから別のサーブレットに繋ごうとしたとき405エラーが出てしまった。
結構悩んだけど極めて簡単なミスで、自分がサーブレットに対してド忘れしてただけだった。
request.getRequestDispatcherの対応
修正前のコードでは、Java Servlet内でデータベースを弄り、元のページにリダイレクトする処理を入れていた。
しかしリダイレクトではリクエストパラメータを別のサーブレットへ送ることが出来ないので、下のようにgetRequestDispatcherにコードを変更した。
//記事一覧にリダイレクト
//response.sendRedirect("admin_article_list");
request.getRequestDispatcher("/admin_article_list").forward(request,
response);
その結果下のような405エラーが出てしまった。
このページは動作していません
この問題が何度も発生する場合は、サイト所有者にお問い合わせください。
HTTP ERROR 405
これの理由は簡単で、/admin_article_listのアノテーションをつけたサーブレットに、doPost関数が無いからだった。
@WebServlet(urlPatterns
=
{"/admin_article_list"})
public
class
AdminArticleList
extends
HttpServlet
{
private
String
articleTemplatePath
=
"/html/admin/admin_article_unit.html";
//普通のアクセスやリダイレクトならdoGetだけ十分だが、getRequestDispatcherを受け取るにはdoPost関数が必要
public
void
doGet(HttpServletRequest
request,
HttpServletResponse
response)
throws
ServletException,
IOException
{
response.setContentType("text/html;
charset=UTF-8");
request.setAttribute("controller",
"ctrl_article_list");
PrintWriter
out
=
response.getWriter();
なのでdoGetの下にdoPost関数を作って修正完了。
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
response.setContentType("text/html; charset=UTF-8");
request.setAttribute("controller", "ctrl_article_list");
PrintWriter out = response.getWriter();
0
0