原因是我表单请求的是post,第一个servlet重写了doPost,并且转发请求给第二个servlet,但是重写的是doGet,所以产生了冲突,改成doPost即可
因此如果服务器只支持GET和POST方法,而客户端尝试使用PUT或DELETE方法访问资源,服务器将返回405状态码。即你尝试使用PUT或DELETE方法访问一个只支持GET和POST方法的资源,服务器将返回一个405错误页面
<form action="first" method="post">
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String sno = request.getParameter("student_id");
String name = request.getParameter("name");
// 创建Student对象
Student student = new Student(sno, name);
// 将Student对象存储在ServletContext中
ServletContext servletContext = getServletContext();
servletContext.setAttribute("student", student);
// 请求转发到SecondServlet
RequestDispatcher dispatcher = request.getRequestDispatcher("/SecondServlet");
dispatcher.forward(request, response);
}
public class SecondServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 从ServletContext中取出Student对象
ServletContext servletContext = getServletContext();
Student student = (Student) servletContext.getAttribute("student");
response.setContentType("text/html");
PrintWriter out = response.getWriter();
// 输出学生的学号和姓名
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet FirstServlet</title>");
out.println("</head>");
out.println("<body>");
out.println("<p>学号: " + student.getSno() + "</p>");
out.println("<p>姓名: " + student.getName() + "</p>");
out.println("</body>");
out.println("</html>");
// 输出返回链接
out.println("<a href='input.html'>返回</a>");
}
}