最近在做老师布置的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:
小生才疏学浅,第一次写博客,不足之处,还望大神些指点一二