【发布时间】:2020-12-07 17:41:01
【问题描述】:
我对如何进行有疑问。 用户输入电子邮件并单击忘记密码。 然后 servlet 会调用 Dao 来检查 email 是否存在,如果存在 Dao 会重置密码。 我希望 Dao 将重置密码发送回 servlet 并重定向另一个 servlet 以将电子邮件发送回具有重置密码的用户。谁能解释一下我该怎么做?
下面是我的 CheckEmailForgotDao
public class CheckEmailForgotDao{
String url = "jdbc:mysql://localhost:3308/mywebapp";
String username = "root";
String password = "root";
String sql = "SELECT * FROM users WHERE email=?";
public boolean check(String uname) {
try {
Class.forName("com.mysql.cj.jdbc.Driver");
Connection con = DriverManager.getConnection(url, username, password);
PreparedStatement st = con.prepareStatement(sql);
st.setString(1, uname);
ResultSet rs = st.executeQuery();
if (rs.next()) {
String randomPassword = RandomStringUtils.randomAlphanumeric(10);
String resetsql = "UPDATE users SET password = ? WHERE email = ?";
PreparedStatement resetst = con.prepareStatement(resetsql);
resetst.setString(1, randomPassword);
resetst.setString(2, uname);
System.out.println(resetst);
resetst.executeUpdate();
}
return true;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return false;
}
}
下面是我的 Servlet
@WebServlet("/forgotpassword")
public class ResetPasswordServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public ResetPasswordServlet() {
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String recipient = request.getParameter("email");
String uname = recipient;
CheckEmailForgotDao dao = new CheckEmailForgotDao();
response.setContentType("text/html");
PrintWriter out = response.getWriter();
if (dao.check(uname)) {
request.getRequestDispatcher("/SendEmailResetPassword").include(request, response);
} else {
request.getRequestDispatcher("index.html").include(request, response);
out.println("<script>document.getElementById('err-forgot').innerHTML= 'Email does not exist!'; </script>");
}
}
}
【问题讨论】: