0

再び私の質問は、「userloginmid.jsp」にリダイレクトされるログインページにアクセスした後、Tomcat ログで以下のエラーを取得するレポート追跡システムに対して行っている同じプロジェクトに関連しています。同じウィンドウに以下に示すコード。

可能であれば、同じ解決策を提供してください。

<%@ page import="java.sql.*,java.util.*,java.text.*,java.text.SimpleDateFormat" %>
<%

  String userName = request.getParameter("userName");
  String password = request.getParameter("password");

    System.out.println("MySQL Connect Example.");
    Connection conn = null;
    String url = "jdbc:mysql://localhost:3306/";
    String dbName = "report_tracking";
    String driver = "com.mysql.jdbc.Driver";
    String username = "root"; 
    String userPassword = "root";

      java.util.Date now = new java.util.Date();
      String DATE_FORMAT = "yyyy-MM-dd hh:mm:ss";
      SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);

    String strDateNew = sdf.format(now) ;


    try {
      Class.forName(driver).newInstance();
      conn = DriverManager.getConnection(url+dbName,username,userPassword);
      Statement st = conn.createStatement();
      String strQuery = "select * from userregister where username='"+userName+"' and password='"+password+"'"; 
      out.println(strQuery);
      ResultSet rs = st.executeQuery(strQuery);

       if(rs.next())
        {

            int userid=rs.getInt(1);
            String user=rs.getString(2);

            session.setAttribute("userid",userid);
            session.setAttribute("username",user);
            session.setAttribute("intime",strDateNew);

            String queryString = "INSERT INTO admin set userid="+userid+",intime='"+strDateNew+"'";
            int i = st.executeUpdate(queryString);

            if(i>0)
            {
                response.sendRedirect("welcome.jsp");
            }

        }

        response.sendRedirect("login.jsp");
        conn.close();

    } catch (Exception e) {
      e.printStackTrace();
    }
 %> 
4

2 に答える 2

0

loopholesすべてが言ったように、あなたのコードにはたくさんあります。

しかし、あなたの質問への答えは

sendRedirect requires a return statement

したがって、コード行を次のように変更します

response.sendRedirect( "welcome.jsp"); return;

response.sendRedirect("login.jsp"); return;

これも読んでください。

于 2013-03-11T10:12:07.583 に答える
0

あなたのコードには多くの問題があります。

まず、応答をコミットした後にリダイレクトする、あなたが述べた問題の説明:

HTTP ヘッダーが既にクライアントに送信されている場合 (まだわからない場合は、HTTP プロトコルについて読んでください)、ヘッダーは送信されており、元に戻すことはできません。アーキテクチャの VIEW 部分である jsp でサンプルをコーディングしています。少なくとも「ページのインポート」とコード部分の間には、サーバーがバッファーをクライアントにフラッシュするようにトリガーする可能性のある改行があります。これが完了すると、HTTP ヘッダーがなくなり、リダイレクトできなくなります。

回避策: このルーチンを jsp ではなく、サーブレットで実装します (または、この問題を処理する適切なフレームワークを使用します。現在のもので十分です)。

あなたのコードにあるいくつかの問題について:

  • SQL インジェクションについてお読みください。似たようなユーザー名を投稿している誰かを考えてみてくださいsomeone'; someone' OR '0' = '0(私が行っているときにそれらを作成するだけです)。
  • 接続を取得してエラーが発生すると、接続をクリーンアップしません (たとえば、例外で接続をリークします)。
  • 平文のパスワードを保存しているようです。あなた以外の誰かがアカウントを持っているとすぐに絶対に行きません
于 2013-03-11T08:43:10.113 に答える