在同一个jsp页面中显示错误消息(无效的名称或密码)无效

时间:2015-07-09 05:50:15

标签: java jsp jdbc requestdispatcher

我有两个jsp文件 index.jsp login.jsp profile.jsp 。 这里index.jsp有两个文本字段名和密码。

当我提供正确的名称和密码登录显示成功并转到 success.jsp 但是当我提供错误的密码或名称时,我希望错误消息将显示在同一索引页面中“无效”姓名或通过“。我的代码无效 login.jsp 用于用户名和密码验证。请帮我解决此问题。

我搜索过RequestDispatcher,但它在servlet类中使用。但我想在我的jsp文件中执行。我的代码

的index.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Example</title>
</head>
<body>
   <form method="post" action="login.jsp">
        <center>
        <table border="1" width="30%" cellpadding="3">
            <thead>
                <tr>
                    <th colspan="2" align ="left">Login Here</th><h5><%=request.getAttribute("errorMessage") %></h5>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td>User Name</td>
                    <td><input type="text" name="uname" value="" /></td>
                </tr>
                <tr>
                    <td>Password</td>
                    <td><input type="password" name="pass" value="" /></td>
                </tr>
                <tr>
                    <td><input type="submit" value="Login" /></td>
                    <td><input type="reset" value="Reset" /></td>
                </tr>
                <tr>
                    <td colspan="2">Yet Not Registered!! <a href="reg.jsp">Register Here</a></td>
                </tr>
            </tbody>
        </table>
        </center>
    </form>
</body>

的login.jsp

<%@ page import ="java.sql.*" %>
    <%
    String userid = request.getParameter("uname");    
    String pwd = request.getParameter("pass");
    Class.forName("org.postgresql.Driver");
    Connection con = DriverManager.getConnection("jdbc:postgresql://localhost:5432/test", "postgres", "root");
    Statement st = con.createStatement();
    ResultSet rs;
    rs = st.executeQuery("select * from member where uname='" + userid + "' and pass='" + pwd + "'");
    if (rs.next()) {
        session.setAttribute("userid", userid);
        //out.println("welcome " + userid);
        //out.println("<a href='logout.jsp'>Log out</a>");
        response.sendRedirect("success.jsp");
    } else {
        //out.println("Invalid password <a href='index.jsp'>try again</a>");
        request.setAttribute("errorMessage", "Invalid user or password");
        response.sendRedirect("index.jsp");
             }
    %>

3 个答案:

答案 0 :(得分:0)

在您的其他声明中,请勿使用response.sendRedirect()因为所有已保存的属性都会丢失,因为它是新请求,请改用requestDispatcher.forward()

req.setAttribute("errorMessage", "Invalid user or password");
req.getRequestDispatcher("/index.jsp").forward(req, res);

答案 1 :(得分:0)

答案在你的代码本身。为了成功你已经使用了session.setAttribute以便它正常工作,并且对于登录失败“你使用了request.setAttribute这就是为什么它无法正常工作。转到会话而不是请求或用户requestDispatcher转发你的请求。你有你使用的豪宅RequestDispatcher但它不起作用,除非你编写完整的语句,比如调用requestDispatcher的forward方法,否则它将无效。

答案 2 :(得分:0)

你可以在索引页面中以表格

进行
  <div style="color:red">${errorMessage}</div>