0

数週間かけて見つけたものをいじって、ログインが必要な小さな Java Web アプリケーションをまとめることにしました。ログインの詳細は、mysql データベースから取得されます。これはすべて netbeans を介して行われます。アプリケーションに mysql ドライバーを追加し、Web サーバー (glassfish) でデータベースに接続しました。しかし、私が取得し続ける問題は、ログインを押すと、「ReadLogin.jsp」に移動し、そこから移動しないことです。ユーザー名とパスワードは正しいので、問題はわかりません。

私の3つのページのコードは次のとおりです

ログイン.jsp

    <%
      String error = request.getParameter("error");
      if (error == null || error == "null") {
          error = "";
      }
    %>
    <html>
    <head>
    <script>
        function trim(s) {
            return s.replace( /^\s*/, "" ).replace( /\s*$/, "" );
        }

        function validate() {
            if (trim(document.frmLogin.UserName.value) == "") {
              alert("Login empty");
              document.frmLogin.UserName.focus();
              return false;
            } else if(trim(document.frmLogin.Pwd.value)=="") {
              alert("password empty");
              document.frmLogin.Pwd.focus();
              return false;
            }
        }
    </script>
    </head>

    <body>
    <div><%=error%></div>
    <form name="frmLogin" onSubmit="return validate();" action="ReadLogin.jsp" method="post"> <%--return validate prompts script above to check if any text boxes are left empty--%>
    User Name <input type="text" name="UserName" /><br />
    Password <input type="password" name="Pwd" /><br />
    <input type="submit" name="Submit" value="Submit" />
    </form>
    </body>
    </html>

次のページは「ReadLogin.jsp」

<%
    Connection conn = null;
    Class.forName("com.mysql.jdbc.Driver");
    conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/project","root", "nbuser");

    ResultSet rsdoLogin = null;
    PreparedStatement psReadLogin = null;

    String sUserID = request.getParameter("UserName");
    String sPassword = request.getParameter("Pwd");
    String message = "User login successfully ";

    try {
   String sqlOption="SELECT * FROM USERS where"
                +" user_id='"+sUserID+"' and password'"+sPassword+"'";

    psReadLogin = conn.prepareStatement(sqlOption);
    psReadLogin.setString(1, sUserID);
    psReadLogin.setString(2, sPassword);

    rsdoLogin=psReadLogin.executeQuery();

    if(rsdoLogin.next()) {
      response.sendRedirect("success.jsp?error="+message);
    } else {
      message="No user or password matched" ;
      response.sendRedirect("login.jsp?error="+message);
    }
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }


    /// close object and connection
    try{
         if(psReadLogin!=null){
             psReadLogin.close();
         }
         if(rsdoLogin!=null){
             rsdoLogin.close();
         }

         if(conn!=null){
          conn.close();
         }
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }

%>

出力ページは単純な「success.jsp」である必要があります

<html>
    <body>
        <h1>Hello World!</h1>
    </body>
</html>

別のバージョンで遊んだので、readlogig ファイルに何か問題があるはずです。jsp フォームからデータベースにデータを入れることはできますが、メイン機能となるログイン機能を実行させることはできません。私が開発しようとしている小さなツールに

4

1 に答える 1

1
String sqlOption="SELECT * FROM USERS where"
            +" user_id='"+sUserID+"' and password'"+sPassword+"'";

psReadLogin = conn.prepareStatement(sqlOption);
psReadLogin.setString(1, sUserID);
psReadLogin.setString(2, sPassword);

醜い文字列を連結してリクエストを作成するか、PreparedStatement. ただし、両方を行わないでください。これは次のようになります。

String sqlOption="SELECT * FROM USERS where user_id = ? and password = ?";

psReadLogin = conn.prepareStatement(sqlOption);
psReadLogin.setString(1, sUserID);
psReadLogin.setString(2, sPassword);

それとは別に、これをゼロから作成したように見えるので、それらのスクリプトレットの使用をやめて、Bean、サーブレット、JSP、および JSTL について読み始めることを強くお勧めします。

も参照してください。

于 2013-01-10T02:29:00.610 に答える