jsp - 删除条目并将结果集从 servlet 发送到 jsp 页面时出错

标签 jsp tomcat servlets

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.ws.Response;

import com.sun.corba.se.spi.activation.Repository;

/**
 * Servlet implementation class DeleteControl
 */
public class DeleteControl extends HttpServlet {
    private static final long serialVersionUID = 1L;

    ResultSet rs = null;
    Statement st = null;
    /**
     * @see HttpServlet#HttpServlet()
     */
    public DeleteControl() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        String str = request.getParameter("hiddenValue");
        try{
            Class.forName("com.mysql.jdbc.Driver");

            Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/Student","root","root");
            //here sonoo is the database name, root is the username and root is the password

            PreparedStatement ps = con.prepareStatement("delete from login where studentId= ? ;");
            ps.setString(1, str);
            ps.executeUpdate();
            st = con.createStatement();
            rs= st.executeQuery("select * from login");
            con.close();
            }catch(Exception e){ System.out.println(e);}
            request.setAttribute("resultset", rs);
            RequestDispatcher rd = request.getRequestDispatcher("userHome.jsp");
            rd.forward(request, response);
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
    }

}

它给出了这样的错误

HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

org.apache.jasper.JasperException: javax.servlet.ServletException: java.sql.SQLException: Operation not allowed after ResultSet closed
  org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:502)
  org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:412)
  org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
  org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
  javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
  DeleteControl.doGet(DeleteControl.java:57)
  javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
  javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
root cause

javax.servlet.ServletException: java.sql.SQLException: Operation not allowed after ResultSet closed
  org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:865)

org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:794) org.apache.jsp.userHome_jsp._jspService(userHome_jsp.java:106) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:388) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) DeleteControl.doGet(DeleteControl.java:57) javax.servlet.http.HttpServlet.service(HttpServlet.java:617) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) root cause

java.sql.SQLException: Operation not allowed after ResultSet closed com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1078) com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989) com.mysql.jdbc.SQLError.createSQLException(SQLError.java:975) com.mysql.jdbc.SQLError.createSQLException(SQLError.java:920) com.mysql.jdbc.ResultSetImpl.checkClosed(ResultSetImpl.java:804) com.mysql.jdbc.ResultSetImpl.next(ResultSetImpl.java:6986) org.apache.jsp.userHome_jsp._jspService(userHome_jsp.java:81) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:388) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) DeleteControl.doGet(DeleteControl.java:57) javax.servlet.http.HttpServlet.service(HttpServlet.java:617) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) note The full stack trace of the root cause is available in the Apache Tomcat/6.0.35 logs.

Apache Tomcat/6.0.35

最佳答案

您的代码一团糟,并且您在此处造成了多次内存泄漏。使用 Tomcat JDBC Pool 和 Apache Commmons DbUtils 等 DataSource 工厂来专注于您的问题。

此外,您不会在删除后执行 conn.commit()。您处于自动提交模式。你不应该在自动提交模式下工作。

您传递的结果集已被连接关闭。

关于jsp - 删除条目并将结果集从 servlet 发送到 jsp 页面时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17876043/

相关文章:

java - JSPServlet : URI remains that of controller servlet

java - 警报 JSP 后保持输入的详细信息不变

ajax - Spring Boot - 外部 Tomcat 服务器 Ajax 身份验证失败消息

java - 带有 TOMCAT 的 Windows 2008 服务器的 Amazon ec2

java - Servlet 异常

java - 如何在Java中实现 session 压缩?

jsp - 如何在 jsp 文件中使用从 servlet 传递的 bean 值

java - 覆盖 JSTL 中的变量

Tomcat --> Glassfish/lib 目录

java - 如何在不知道列类型的情况下获取列的值