Servlet管理系统,删除或新增数据到数据库时报错500

纯Servlet管理系统,删除或新增数据到数据库时报错500,但成功删除或保存数据。报错内容如下:

img

img


list页面java代码

package Servlet;

import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import util.DButil;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

//编写DeplistServlet类继承HttpServlet类
public class DeplistServlet extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request,response);
    }

    //Ctrl + O 快捷键重写doGet方法
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        //获取webapp根路径
        String contextPath = request.getContextPath();

        //设置相应的内容类型以及字符集
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        out.print("<!DOCTYPE html>");
        out.print("<html lang='en'>");
        out.print("<head>");
        out.print("    <meta charset='UTF-8'>");
        out.print("    <meta http-equiv='X-UA-Compatible' content='IE=edge'>");
        out.print("    <meta name='viewport' content='width=device-width, initial-scale=1.0'>");
        out.print("    <title>部门列表页面</title>");

        //一段js脚本,写del函数
        out.print("<script type='text/javascript'> ");
        out.print("function del(dno){ ");
        out.print("if(window.confirm('确认删除?')){ ");
        out.print("document.location.href ='"+contextPath+"/dept/delete?deptno='+dno");
        out.print("} ");
        out.print("} ");
        out.print("</script> ");

        out.print("</head>");
        out.print("<body>");
        out.print("    <h1 align='center'>部门列表</h1>");
        out.print("    <hr>");
        out.print("    <table border='=1px' align='center' width='50%'>");
        out.print("        <tr>");
        out.print("            <th>序号</th>");
        out.print("            <th>部门编号</th>");
        out.print("            <th>部门名称</th>");
        out.print("            <th>操作</th>");
        out.print("        </tr>");

        //连接数据库,查询所有的部门
        Connection coon = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            //获取链接
            coon = DButil.getConnection();
            //获取预编译的数据库操作对象
            String sql = "select deptno,dname,loc from dept";
            ps = coon.prepareStatement(sql);
            //执行sql语句
            rs = ps.executeQuery();
            //处理结果集
            int i = 0;  //用来递增
            while (rs.next()) {
                String deptno = rs.getString("deptno");
                String dname = rs.getString("dname");
                String loc = rs.getString("loc");
                out.print("        <tr>");
                out.print("            <td>"+(++i)+"</td>");
                out.print("            <td>"+deptno+"</td>");
                out.print("            <td>"+dname+"</td>");
                out.print("            <td><a href='javascript:void(0)' onclick='del("+deptno+")'>删除</a>");
                out.print("                <a href='edit.html'>修改</a>");
                out.print("                <a href='"+contextPath+"/dept/detail?deptno="+deptno+"'>详情</a></td>");
                out.print("        </tr>");
            }
        } catch (SQLException e) {
            throw new RuntimeException(e);
        } finally {
            //释放资源
            DButil.close(coon,ps,rs);
        }

        out.print("    </table>");
        out.print("    <hr>");
        out.print("    <a href='"+contextPath+"/add.html'>新增部门</a>");
        out.print("</body>");
        out.print("</html>");
    }
}

del页面java代码

package Servlet;

import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import util.DButil;

import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class DepDelServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //根据部门编号删除部门
        //获取部门编号
        String deptno = request.getParameter("deptno");
        //连接数据库删除数据
        Connection coon = null;
        PreparedStatement ps = null;
        int count = 0;
        try {
            coon = DButil.getConnection();
            //开启事务(自动提交机制关闭)
            coon.setAutoCommit(false);
            String sql = "delete from dept where deptno = ?";
            ps = coon.prepareStatement(sql);
            ps.setString(1,deptno);
            //返回值是:影响了数据库表中多少条记录
            count = ps.executeUpdate();
            //事务提交
            coon.commit();
        } catch (SQLException e) {
            //遇到异常要回滚
            if(coon != null){
                try {
                    coon.rollback();
                } catch (SQLException ex) {
                    throw new RuntimeException(ex);
                }
            }
            throw new RuntimeException(e);
        }finally {
            DButil.close(coon,ps,null);
        }
        //判断删除成功还是失败
        if (count == 1) {
            //删除成功,仍然跳回到部门列表页面,他的显示需要执行另一个servlet,怎么办?用转发或重定向
            request.getRequestDispatcher("/dept/list").forward(request,response);
        }else{
            //删除失败
        }
    }
}


save页面java代码

package Servlet;

import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import util.DButil;

import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class DepSaveServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //获取部门信息
        String deptno = request.getParameter("deptno");
        String dname = request.getParameter("dname");
        String loc = request.getParameter("loc");
        //连接数据库
        Connection coon = null;
        PreparedStatement ps = null;
        int count = 0;
        try {
            coon = DButil.getConnection();
            String sql = "insert into dept(deptno,dname,loc) values(?,?,?)";
            ps = coon.prepareStatement(sql);
            ps.setString(1,deptno);
            ps.setString(2,dname);
            ps.setString(3,loc);
            count = ps.executeUpdate();
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }finally {
            DButil.close(coon,ps,null);
        }
        //保存成功跳转到列表页面
        if (count == 1) {
            request.getRequestDispatcher("/dept/list").forward(request,response);
        }
    }
}