📜  JSP中的登录表单

📅  最后修改于: 2021-01-05 01:18:43             🧑  作者: Mango

JSP中的登录和注销示例

在创建登录表单的示例中,我们使用了DAO(数据访问对象),Factory方法和DTO(数据传输对象)设计模式。文件很多:index.jsp,它提供用于登录,注销和配置文件login.jsp的三个链接,用于从用户loginprocess.jsp获取值,这是一个处理请求并调用方法的jsp文件。 LoginBean.java,一个具有属性以及setter和getter方法的bean类。 Provider.java,一个包含许多常量的接口,例如DRIVER_CLASS,CONNECTION_URL,USERNAME和PASSWORD ConnectionProvider.java,一个负责返回Connection对象的类。它使用Singleton和工厂方法设计模式。 LoginDao.java,DAO类,用于验证数据库中的emailId和密码。 logout.jsp会使会话无效。 profile.jsp,如果用户已登录,它将提供简单消息,否则将请求转发到login.jsp页面。

在此示例中,我们使用Oracle10g数据库将emailId和密码与数据库进行匹配。表名称为user432,其中包含许多字段,如名称,电子邮件,密码等。您可以使用此查询来创建表:


CREATE TABLE  "USER432" 
   (    "NAME" VARCHAR2(4000), 
    "EMAIL" VARCHAR2(4000), 
    "PASS" VARCHAR2(4000)
   )
/

我们假设此表中有许多记录。

index.jsp

它只是提供了三个用于登录,注销和配置文件的链接。

login.jsp

该文件为两个输入字段名称和密码创建一个登录表单。这是简单的登录表单,您可以更改它以获得更好的外观。我们仅关注概念。

<%@ include file="index.jsp" %>

Login Form

<% String profile_msg=(String)request.getAttribute("profile_msg"); if(profile_msg!=null){ out.print(profile_msg); } String login_msg=(String)request.getAttribute("login_msg"); if(login_msg!=null){ out.print(login_msg); } %>
Email:

Password:

"

loginprocess.jsp

这个jsp文件包含所有到bean类的对象的输入值,该类作为参数传递给LoginDao类的validate方法。如果emailid和密码正确,则会显示一条消息,说明您已成功登录!并保持会话状态,以便我们识别用户。


<%@page import="bean.LoginDao"%>




<%
boolean status=LoginDao.validate(obj);
if(status){
out.println("You r successfully logged in");
session.setAttribute("session","TRUE");
}
else
{
out.print("Sorry, email or password error");
%>

<%
}
%>

LoginBean.java

该bean类具有2个属性,并通过其setter和getter方法传递电子邮件。


package bean;

public class LoginBean {
private String email,pass;

public String getEmail() {
    return email;
}

public void setEmail(String email) {
    this.email = email;
}

public String getPass() {
    return pass;
}

public void setPass(String pass) {
    this.pass = pass;
}


}


Provider.java

此接口包含四个常量,每个数据库的常量可能不同。


package bean;

public interface Provider {
String DRIVER="oracle.jdbc.driver.OracleDriver";
String CONNECTION_URL="jdbc:oracle:thin:@localhost:1521:xe";
String USERNAME="system";
String PASSWORD="oracle";

}

ConnectionProvider.java

此类提供了一个工厂方法,该方法返回Connection的对象。在这里,驱动程序类仅加载一次,并且连接对象仅获得一次内存,因为它是静态的。


package bean;
import java.sql.*;
import static bean.Provider.*;

public class ConnectionProvider {
private static Connection con=null;
static{
try{
Class.forName(DRIVER);
con=DriverManager.getConnection(CONNECTION_URL,USERNAME,PASSWORD);
}catch(Exception e){}
}

public static Connection getCon(){
    return con;
}

}

LoginDao.java

此类会更改emailid和密码。


package bean;
import java.sql.*;
public class LoginDao {

public static boolean validate(LoginBean bean){
boolean status=false;
try{
Connection con=ConnectionProvider.getCon();
            
PreparedStatement ps=con.prepareStatement(
    "select * from user432 where email=? and pass=?");

ps.setString(1,bean.getEmail());
ps.setString(2, bean.getPass());
            
ResultSet rs=ps.executeQuery();
status=rs.next();
            
}catch(Exception e){}

return status;

}
}