servlets - 向与数据库交互的 Servlet 提交表单会导致空白页面

标签 servlets database-connectivity

我有一个 servlet,可以从数据库检查用户名和密码。

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
    try {
        Class.forName("com.mysql.jdbc.Driver").newInstance();
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mvs_user", "root", "pass");
        if (req.getParameter("usrnm") != null && req.getParameter("pwd") != null) {
            String username = req.getParameter("usrnm");
            String userpass = req.getParameter("pwd");
            String strQuery = "select * from user where username='" + username + "' and  password='" + userpass + "'";
            System.out.println(strQuery);
            Statement st = conn.createStatement();
            ResultSet rs = st.executeQuery(strQuery);
            if (rs.next()) {
                req.getSession(true).setAttribute("username", rs.getString(2));
                res.sendRedirect("adminHome.jsp");
            } else {
                res.sendRedirect("index.jsp");
            }
        } else {
            res.sendRedirect("login.jsp");
        }
        conn.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

问题是浏览器只显示一个空白页面,但我希望它在重定向的页面中显示“Hello World”。问题可能出在哪里?请帮我解决问题。

最佳答案

您需要正确处理异常。您不仅应该打印它们,还应该真正它们。

替换

    } catch (Exception e) {
        e.printStackTrace(); // Or System.out.println(e);
    }

    } catch (Exception e) {
        throw new ServletException("Login failed", e);
    }

通过此更改,您现在将获得一个正常的错误页面,其中包含有关问题原因的完整堆栈跟踪。当然,您也可以在服务器日志中挖掘以查找您刚刚打印而不是重新抛出的堆栈跟踪。

导致您的问题的可能原因有多种。可能是 ClassNotFoundExceptionSQLException。所有这些都应该是不言自明的并且可以在谷歌上搜索到。

另请参阅:

<小时/>

与具体问题无关,您的 JDBC 代码很容易遭受资源泄漏和 SQL 注入(inject)攻击。对此也进行研究并进行相应的修复。

关于servlets - 向与数据库交互的 Servlet 提交表单会导致空白页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61967419/

相关文章:

java - 读取分块响应

java - ServletContextListener 中变量的使用

php - 使用 Windows 主机上的 ASP.Net 表单更新 Linux 主机上的 MySQL 数据库的最有效方法是什么?

java - 从数据库中提取数据到 Java 中的文本字段或文本区域

mysql - JBOSS 与多个数据库的连接(sql 集群)

javascript - 使用javascript调用Servlet post方法

java - 如何以指定的时间间隔自动定期调用 servlet

java - 从 war 文件提供文件

sql-server - 如何通过 Internet 远程连接和管理 SQL Server 数据库?

servlets - 将表单提交给与数据库交互的 Servlet 导致空白页面