0

データベースからユーザー名とパスワードをチェックするサーブレットがあります。

@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」が表示されることを期待しています。問題はどこにあるのでしょうか? トラブルシューティングを手伝ってください。

4

1 に答える 1

4

例外を適切に処理する必要があります。それらを印刷するだけでなく、実際に印刷する必要がありthrowます。

交換

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

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

この変更により、問題の原因に関する完全なスタック トレースを含む通常のエラー ページが表示されるようになりました。もちろん、サーバーログを掘り下げて、再スローする代わりに印刷したスタックトレースを見つけることもできます。

問題の原因はいくつか考えられます。多分 aClassNotFoundExceptionまたは a SQLException. これらはすべて自明であり、Google で検索できる必要があります。

以下も参照してください。


具体的な問題とは関係ありませんが、JDBC コードはリソース リークや SQL インジェクション攻撃を受けやすくなっています。それについても調査を行い、それに応じて修正します。

于 2011-05-18T12:01:39.317 に答える