-100p

-10p

+10p

+100p

サーブレット/JSPで405エラー

サーブレット/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

-100p

-10p

+10p

+100p