我有一个数据库,其中包含一些用户,其中包含用户名和密码。 我想在JSP中创建一个登录表单,其中包含2个字段“login”和“password”,如果用户的输入与我希望它重定向到主页的数据库相同。 我知道如何在PHP中做到这一点,但我对jsp全新,所以我真的不知道从哪里开始,我认为需要javascript才能实现这一目标。 我已经看到了一些与我相似的问题,但似乎没有答案对我有用。
这是我的JSP页面:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" href="<c:url value="/resources/css/style.css"/>">
<title>login</title>
</head>
<body>
<div class="login-block">
<h1>Login Page</h1>
<div class="inlog-block">
<form action="" method="post">
<p>Enter Username: </p>
<input type="text" name="username" required="required" /> <br>
<p>Enter password: </p>
<input type="password" name="password" required="required"/><br><br>
<input type="submit" name="loginbutton" value="Login"/>
</form>
</div>
</div>
</body>
</html>
此外,我已经能够在我的模型中的arraylist中从数据库中获取用户,所以也许我需要在我的JSP中使用它?
我的员工班:
public class EmployeeList {
private ArrayList<Employee> employees = new ArrayList<>();
public EmployeeList()
{
loadEmployees();
}
public void loadEmployees(){
DAOEmployee DAOE = new DAOEmployee();
employees = DAOE.LoadAllEmployees();
}
public ArrayList<Employee> getEmployees() {
return employees;
}
public void setEmployees(ArrayList<Employee> employees) {
this.employees = employees;
}
}
我的DAOEmployee类:
public class DAOEmployee extends DAObject{
public ArrayList<Employee> LoadAllEmployees(){
String sql = "SELECT * FROM EMPLOYEE";
Employee e = null;
ArrayList<Employee> employees = new ArrayList<>();
try {
ResultSet rs;
Statement stmt = openConnection().createStatement();
rs = stmt.executeQuery(sql);
while(rs.next()){
int ide = rs.getInt("id");
String first = rs.getString(2);
String last = rs.getString(3);
String mail = rs.getString(4);
String adres = rs.getString(5);
String zip = rs.getString(6);
String funct = rs.getString(7);
String user = rs.getString(8);
String pass = rs.getString(9);
e = new Employee(ide,first, last, mail, adres, zip, funct, user, pass);
employees.add(e);
}
}
catch (SQLException x) {
// TODO Auto-generated catch block
x.printStackTrace();
}
return employees;
}
}
我的DAObject类:
public class DAObject {
private String url = "jdbc:mysql://127.0.0.1/mydatabase";
private String user = "root";
private String password = "root";
public Connection conn = null;
public DAObject(){
}
public Connection openConnection(){
try{
conn = DriverManager.getConnection(url, user, password);
System.out.println("Connection succesfull");
}
catch(SQLException e){
e.printStackTrace();
}
return conn;
}
public void CloseConnection(){
try{
conn.close();
}
catch(SQLException e){
e.printStackTrace();
System.out.println("");
}
}
}
答案 0 :(得分:0)
您需要一种方法来搜索具有不同SQL指令的特定用户,并从中返回一个对象Employee或boolean w / e:
String sql = "SELECT * FROM EMPLOYEE WHERE USER=? AND PASS=?";
在servlet中调用它,并使用表单中的输入值检查该用户是否有注册表。
String userName = req.getParameter("username");
编辑:
a)您需要一种搜索此用户的方法,如下所示(DAO图层示例):
public User search(String userName, String password, Connection con) throws Exception{
User user = null;
String sql = "SELECT USERNAME, PASSWORD FROM T_USERS WHERE USERNAME=? AND PASSWORD=?";
PreparedStatement pStmt = con.prepareStatement(sql);
pStmt.setString(1, userName);
pStmt.setString(2, password);
ResultSet rS = pStmt.executeQuery();
if(rS.next()){
user = new User(rS.getString("USERNAME"), rS.getString("PASSWORD"));
}
rS.close();
pStmt.close();
return user;
}
b)在你的Servlet中,你用doPost方法检查它:
String user = req.getParameter("username");
String pass = req.getParameter("password");
Connection con = null;
try {
con = ConexaoFactory.getInst().getConnection("", "");
User user = BOClass.search(user, pass, con);
if(user == null){
//not found;
}else{
//found;
}
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
if(con != null)
con.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
这只是一个如何做到的例子。