登录校验由最简单的例子,到能够应用到实际项目,一步一步学习和实现。
总共分几个目标,这一篇实现目标2,这次要用数据库中的真数据来校验。
目标2:输入用户名和密码,如果输入的用户名和密码在数据库内,则显示输出结果“登录成功”,如果数据表中没用该正确的用户名密码,则显示“用户名或密码有误”,其它情况提示“系统异常”。
实现(代码经过测试通过):
测试发现这次代码有个缺陷,就是不区分大小写。
一、数据表login结构:
CREATE TABLE `login` (
`id` int(11) DEFAULT NULL,
`uname` varchar(10) DEFAULT NULL,
`upwd` varchar(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
二、源代码文件说明
共3个文件:
1.login2.jsp :用于输入用户名和密码
2.check2.jsp:从login2那里获取用户输入的用户名密码,调用LoginDao校验用户名和密码,并根据LoginDao的返回值输出显示对应的结果。
3.LoginDao.java:连接数据库,查询数据库中是否有输入的用户名密码记录,如果有返回1,如果没有返回0,如果中途有异常返回-1。
三、源代码
1.login2.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>登录界面</title>
</head>
<body>
<form action="check2.jsp" method="post">
用户名:<input type="text" name="uname" /> <br/>
密码:<input type="password" name="upwd" /><br/>
<input type="submit" value="登录"/><br/>
</form>
</body>
</html>
2.check2.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.sql.*"%>
<%@ page import="org.login.dao.LoginDao" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>检验界面</title>
</head>
<body>
<%
String name=request.getParameter("uname");
String pwd=request.getParameter("upwd");
LoginDao dao=new LoginDao();
int result=dao.login(name,pwd);
if (result>0) {
out.println("登录成功!");
}
else if (result==0){
out.println("用户名或密码有误!");
}else{
out.println("系统异常!");
}
%>
</body>
</html>
3.LoginDao.java
package org.login.dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class LoginDao {
public int login(String name,String pwd) //1:登录成功,0:登录失败(用户名密码错误);-1:出现异常
{
String URL="jdbc:mysql://localhost:3306/lds?serverTimezone=UTC";
String USERNAME="root";
String PWD="prolific";
Connection connection = null;
PreparedStatement pstmt =null;
ResultSet rs=null;
try {
// a.导入驱动,加载具体的驱动类
Class.forName("com.mysql.cj.jdbc.Driver");//加载具体的驱动类
// b.与数据库建立连接
connection = DriverManager.getConnection(URL,USERNAME,PWD);
//c.发送sql,执行(增、删、改、查)
String sql="select count(*)from login where uname=? and upwd=?";
pstmt=connection.prepareStatement(sql);
//String name=request.getParameter("uname");
//String pwd=request.getParameter("upwd");
pstmt.setString(1,name);
pstmt.setString(2,pwd);
//String sql="select count(*)from login where uname='"+name+"' and upwd='"+pwd+"'";
rs=pstmt.executeQuery();
int count =-1;
if(rs.next()) {
count=rs.getInt(1);
}
return count;
} catch (ClassNotFoundException e) {
e.printStackTrace();
return -1;
} catch (SQLException e) {
e.printStackTrace();
return -1;
}catch(Exception e){
e.printStackTrace();
}
finally{
try {
if(rs!=null) rs.close();
if (pstmt!=null) pstmt.close(); //对象.方法
if (connection!=null) connection.close();
}catch(SQLException e) {
e.printStackTrace();
return -1;
}
}
return 0;
}
}