0

2 つのサーブレット間でパラメーターを渡す方法を知りたいです。しかし、それはちょっと違います...もっと具体的にさせてください。DB にログイン ページとパスワードを持つユーザーがいます。管理者が作成したユーザーにパスワードがない場合。ユーザーはユーザー名のみを入力し、[ログイン] をクリックすると、パスワードの作成ページが表示されます。次に、パスワードを作成したばかりのユーザーが自動的に正常にログインします。(これが問題です。ユーザーが「作成したばかり」のユーザー名とパスワードをログインに再入力しないようにします。)パスワードの作成が完了すると、目的のページにリダイレクトできます。しかし、pageforwards サーブレットは最初のサーブレットです。もっとはっきりさせてください。

私のサーブレットは LoginServlet (loginPage.jsp からアクション)、CreatePassServlet (createPass.jsp からアクション) です。

ユーザーがユーザー名を入力すると、LoginServlet はパスワードをチェックし (存在するかどうか)、ユーザー名と共にそれを createPass.jsp ページに転送し、ユーザーがパスワードを入力すると、CreatePassServlet がパスワードを作成して DB に保存し、ユーザー名とパスワードを使用して戻ります。 LoginServletへの情報(これにより、彼は目的のページに誘導されます)

ここで私のクラス...

ログインサーブレット

public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

public LoginServlet() {
    super();
}

protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
    try {
        int pEmployeeId;
        String pName;
        String pSurname;
        String pUserName;
        String pUserType;
        String query;
        String home = "/login.jsp";
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        RequestDispatcher rd = request.getRequestDispatcher(home);
        mysqlCon con = new mysqlCon();
        LoginService ls = new LoginService();


        if((password==null) || (password=="")){

            Statement stmt = con.getConnection().createStatement();
            query = "SELECT password FROM employee WHERE username='"
                    + username + "';";
            stmt.executeQuery(query);
            ResultSet rs = stmt.getResultSet();
            if(rs.next()){

                String nextJSP = "createPassword.jsp";
                rd = request.getRequestDispatcher(nextJSP);
                rd.forward(request, response);      

                return;
            }

        }


        String getHashedPass = Md5HashPassword.Md5(password);

        Statement stmt = con.getConnection().createStatement();
        query = "SELECT employee_id, name, surname, usertype, username FROM employee WHERE username='"
                + username + "' AND password='" + getHashedPass + "';";
        stmt.executeQuery(query);
        ResultSet rs = stmt.getResultSet();

        if (rs.next()) {
            pEmployeeId = rs.getInt(1);
            pName = rs.getString(2);
            pSurname = rs.getString(3);
            pUserType = rs.getString(4);
            pUserName = rs.getString(5);

            if (ls.loginCheck(username, getHashedPass) != false) {
                Person tmp = new Person();

                tmp.setName(pName);
                tmp.setSurname(pSurname);
                tmp.setType(pUserType);
                tmp.setUsername(pUserName);
                tmp.setId((long) pEmployeeId);
                HttpSession session = request.getSession();
                session.setAttribute("person", tmp);

                if (pUserType.equals(UserType.MANAGER.toString())) {

                    String nextJSP = "managerHome.jsp";
                    rd = request.getRequestDispatcher(nextJSP);
                    rd.forward(request, response);
                }

                else if (pUserType.equals(UserType.ADMIN.toString())) {

                    String nextJSP = "adminHome.jsp";
                    rd = request.getRequestDispatcher(nextJSP);
                    rd.forward(request, response);

                }

                else if (pUserType.equals(UserType.USER.toString())) {

                    String nextJSP = "userHome.jsp";
                    rd = request.getRequestDispatcher(nextJSP);
                    rd.forward(request, response);
                } else {

                    String nextJSP = "login.jsp";
                    rd = request.getRequestDispatcher(nextJSP);
                    rd.forward(request, response);
                }

            }
        } else {
            request.setAttribute("errorMessage",
                    "Login Failed. Your username or password is incorrect. ");
            rd.forward(request, response);

        }

        con.getConnection().close();

    } catch (InstantiationException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (ClassNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();

    }

}

protected void doGet(HttpServletRequest request,
        HttpServletResponse response) throws ServletException, IOException {

}

}

CreatePassServlet...

public class CreatePassServlet extends HttpServlet {
private static final long serialVersionUID = 1L;


public CreatePassServlet() {
    super();    
}




protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    mysqlCon con=new mysqlCon();
    String password=request.getParameter("password");
    String passwordcheck=request.getParameter("passwordcheck");

    if(password.equals(passwordcheck)){

        try {
            String query;
            String hashedPass = Md5HashPassword.Md5(password);      
            String username=request.getParameter("username");

            Statement stmt = con.getConnection().createStatement();
            query = "UPDATE employee SET password='"+ hashedPass +"' WHERE username='"+ username +"';";
            stmt.executeUpdate(query);

            request.setAttribute("username", username);
            ServletContext sc = getServletContext();  
            RequestDispatcher rd = sc.getRequestDispatcher("/LoginServlet");  
            rd.forward(request, response);

        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

    else{
        RequestDispatcher rd=request.getRequestDispatcher("createPassword.jsp");
        request.setAttribute("errorMessage",
                "Creation failed. Your passwords did not match, please try again. ");
        rd.forward(request, response);
    }






}





protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

}

}

ページは正しいです...実行するとこれが表示されます...

続行するために loginservlet を戻そうとすると、CreatePassServlet はユーザー名を NULL としてリダイレクトし、パスワードをリダイレクトします。ポイントは、ユーザー名を LoginServlet に再度渡すことができないことだと思います。次に、ユーザー名がNULLであるため、loginServletからログインユーザー名-パスワードが間違っているというエラーが発生します。

ここで私を助けてください。前もって感謝します...

4

2 に答える 2