Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 复杂的Servlet关系。。。可能吗?_Java_Jsp_Servlets_Parameter Passing - Fatal编程技术网

Java 复杂的Servlet关系。。。可能吗?

Java 复杂的Servlet关系。。。可能吗?,java,jsp,servlets,parameter-passing,Java,Jsp,Servlets,Parameter Passing,我想知道如何在两个servlet之间传递参数。但是有点不同。。。让我更具体一点。我有一个登录页面,数据库中的用户有他们的密码。如果manager创建的用户没有密码。用户只输入用户名,然后单击登录,然后将出现creationpassword页面。然后,刚刚创建密码的用户将自动成功登录。(事情是这样的。我不想让用户再次键入他的用户名和密码“刚刚创建”以登录。)当他完成创建密码后,他可以重定向到所需页面。但pageforwards servlet是第一个servlet。让我更清楚一点 我的servle

我想知道如何在两个servlet之间传递参数。但是有点不同。。。让我更具体一点。我有一个登录页面,数据库中的用户有他们的密码。如果manager创建的用户没有密码。用户只输入用户名,然后单击登录,然后将出现creationpassword页面。然后,刚刚创建密码的用户将自动成功登录。(事情是这样的。我不想让用户再次键入他的用户名和密码“刚刚创建”以登录。)当他完成创建密码后,他可以重定向到所需页面。但pageforwards servlet是第一个servlet。让我更清楚一点

我的servlet是LoginServlet(从loginPage.jsp执行操作)、CreatePassServlet(从createPass.jsp执行操作)

当用户输入用户名LoginServlet时,检查其密码(是否存在),如果不存在,则将其与用户名一起转发到createPass.jsp页面,然后用户输入其密码,然后CreatePassServlet创建其密码并存储在数据库中,然后将其用户名和密码信息返回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了。然后,我从loginServlet获得了登录用户名-密码错误错误,因为用户名为空


请帮帮我。提前感谢…

我刚才看到您可能没有在请求对象中设置
hashedPass

您可以在许多地方保存信息。其中一个地方就是您的httpsession

session.setAttribute("newPassword", param);
在Servlets中,您有3个可以存储数据的作用域

应用

会议

请求

此外,JSP还有
page
范围来保存数据


有关如何使用这些作用域保存数据并传递给其他servlet的快速概述,请参阅。

如果我正确理解了您的代码,当您在CreatePassServlet之后执行LoginServlet时,您必须使用request.getAttribute(“username”).toString()查找用户名

尝试以下方法:

        String username = (request.getAttribute("username")==null)?
request.getParameter("b"):request.getAttribute("username").toString();
而不是:

        String username = request.getParameter("username");

在继续servlet编码之前:永远不要将JAVA中的字符串与==进行比较,谢谢你的回答…如果这个答案解决了你的问题,你可能会想接受这个答案。事实上,我找不到我该如何解决。。。我试图再次重新输入用户的用户名和密码,但这次密码无法存储在数据库中,所以获取用户名和传递错误在保存到数据库时有什么异常?