关于解决HTTP Status 405 - HTTP method POST is not supported by this URL方法之一

最近在做老师布置的javaweb作业,刚好做到了数据库的增删改查,犯错总是难免的,在我写完updateUserServlet代码后,运行代码后出现了如图错误

在网上查了很多博客无果后,开始自己解决问题。

一、




我的想法是在修改完成点击修改按钮后直接返回到/select查询页面以确定自己的代码是否被修改了。但是在我点击修改按钮后。并没有如我所愿跳转到查询页面,而是出现了405错误。(这里我修改了id为2的记录)


但是我再一次查询数据库所有数据时,竟然惊奇的发现我修改的数据修改成功了


可见至少我的sql语句那部分没有错

----------UpdateUserServlet代码--------------------------

package edu.sctu.javawebnewjdbc.Servlet;

import edu.sctu.javawebnewjdbc.Servlet.dao.UserDao;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.*;

public class UpdateUserServlet extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {


        int id = Integer.parseInt(req.getParameter("newId"));
        String name = req.getParameter("newName");
        int age = Integer.parseInt(req.getParameter("newAge"));




        try {

            UserDao userDao = new UserDao();

            userDao.updateUser(id,name,age);


        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }


        req.getRequestDispatcher("/select").forward(req,resp);
//        req.getRequestDispatcher("return.jsp").forward(req,resp);
//        resp.sendRedirect("/select");

    }
}

所以我把重心放在最后那个跳转语句,从错误中我们可以看见post方法不支持这个页面,然后我又看了跳转的select页面

----------selectUserServlet代码----------

package edu.sctu.javawebnewjdbc.Servlet;

import edu.sctu.javawebnewjdbc.Servlet.dao.UserDao;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class SelectUserServlet extends HttpServlet {


    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        List list = new ArrayList<>();

        try {

            list = new UserDao().selectUser();

        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }

        List listId = new ArrayList<>();
        List listName = new ArrayList<>();
        List listAge = new ArrayList<>();

        listId = (List) list.get(0);
        listName = (List) list.get(1);
        listAge = (List) list.get(2);

        req.setAttribute("listId",listId);
        req.setAttribute("listName",listName);
        req.setAttribute("listAge", listAge);

req.getRequestDispatcher("/select.jsp").forward(req,resp);

    }
}

这个页面是用的doGet方法。我想可能是这两个方法有问题。


二、

重点来了,我在网上搜了很多关于forward和direct的区别,发现forward是从服务器端直接传到下一个页面,不经过浏览器,信息共享。direct是把请求返回到客户端,客户端再次请求。所以,我大胆的猜想,我使用forward后,该页面的信息已经传到我想要跳转到的那个页面,而我的select页面是用的doGet方法,原页面是用的doPost方法自然报错,所以我最终把forward方法改为direct方法,就OK了!






PS: 小生才疏学浅,第一次写博客,不足之处,还望大神些指点一二








©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页