如何编写java中的登录自定义异常

时间:2014-02-12 06:33:02

标签: java jsp servlets login

我正在构建一个Web应用程序,我有一个登录jsp表单,它将被重定向到一个servlet ......

我的servlet代码:

Login login=new Login();
        login.setUserName(request.getParameter("txtUsername"));
        login.setPassWord(request.getParameter("txtPassword"));

        LoginService ls=new LoginService();
        ls.loginValidate(login);
        RequestDispatcher rd=request.getRequestDispatcher("/Login.jsp");
        rd.forward(request, response);
 }

从他们到服务类: 我的服务类代码:

public class LoginService {
    Login login=null;

    public Login loginValidate(Login login) {
        validateLogin(login);
        return login;
    }

    private void validateLogin(Login login) {
        this.login=login;
         if(login!=null){
       LoginDAO ld=new LoginDAO();
       DataSource dataSource=new DataSource();
       ld.setDataSource(dataSource);
        ld.validate(login);

    }
    }
}


    }

从他们到DAO

我的LoginDAO:

public class LoginDAO {
    private DataSource dataSource;
    public void setDataSource(DataSource dataSource) {
    this.dataSource = dataSource;
    }

    public  boolean validate(Login login){
        boolean status=true;
        String sql="select * from Login where UserName=? and PassWord=?";

        Connection conn = null;
        try{
        conn = dataSource.createConnection();
        PreparedStatement ps = conn.prepareStatement(sql);
        ps.setString(1,login.getUserName());
        ps.setString(2,login.getPassWord());
        ResultSet rs=ps.executeQuery();
        status=rs.next();
        }

        catch (SQLException e) {
            throw new RuntimeException(e);

        } finally {
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {}
            }
        }
        return status;
}
}

但是当我键入正确的用户名和密码时,它会重定向到成功页面(在此上下文中为Login.jsp),即使我输入错误的un和pw重定向,我也明白为什么因为在servlet中调用方法之后我已经调度了它登录到login.jsp所以在任何情况下它都会重定向我。但我的一个朋友解决这个问题建议我在un和pw输入错误时添加自定义异常类..现在我想知道如何为这个应用程序编写这个自定义异常类。所以请有人在这方面帮助我......提前致谢...

2 个答案:

答案 0 :(得分:0)

try{
    boolean status=true;
    stmt=con.createStatement();
    res=stmt.executeQuery("select count(*) from user where USER_NAME='"+strUsername+"'and PASSWORD='"+strPassword+"'");
    res.next();
    count=res.getInt(1);
    if(count==1){
      return status;
    }
    else{
       return false;
    }
}
  • 查询执行零结果
  • 您的状态设置为true
  • 所以它总是返回

答案 1 :(得分:0)

ls.loginValidate(login)可以返回登录状态,如true或false boolean,如果登录成功则登录用户对象。取决于loginVlidate的返回类型,您可以将消息设置为jsp pag,如:

    if(login){
    setAttribute("LoginMsg","Login Successfull.")
    RequestDispatcher rd=request.getRequestDispatcher("/Login.jsp");
    rd.forward(request, response);
    }else{
    setAttribute("LoginMsg","Login fails.")
    RequestDispatcher rd=request.getRequestDispatcher("may be another page    (error)");
    rd.forward(request, response);
    }

你可以在jsp中获得attriubte。