一个简单的利用数据库的查找实现网页的登录。话不多说,上代码。
目录
1.项目结构
2.数据库的设计
3.pojo编写
实现对项目对象的封装。
package com.xiaoye.pojo;
public class User {
private String username;
private String password;
private String sex;
private int note;
public User() {
}
public User(String username, String password, String sex, int note) {
this.username = username;
this.password = password;
this.sex = sex;
this.note = note;
}
@Override
public String toString() {
return "User{" +
"username='" + username + '\'' +
", password=" + password +
", sex='" + sex + '\'' +
", note=" + note +
'}';
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getNote() {
return note;
}
public void setNote(int note) {
this.note = note;
}
}
4.数据库(BaseDao)的实现
用于数据库的连接,并定义基本方法(增删改查),本文只实现了查询方法。
(1)rescources
用于存放项目需要的资源文件。(3306之后是你自己的数据库,下面还有密码)
(2)BaseDao编写
package com.xiaoye.dao;
import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;
public class BaseDao1 {
private static String driver;
private static String url;
private static String pwd;
private static String username;
public Connection connection ;
// public PreparedStatement preparedStatement=null;
// public ResultSet resultSet =null;
static {
InputStream resourceAsStream = BaseDao1.class.getClassLoader().getResourceAsStream("db.properties");
// Properties properties = new Properties();
Properties properties = new Properties();
try {
properties.load(resourceAsStream);//properties配置文件的读取
} catch (IOException e) {
e.printStackTrace();
}
driver=properties.getProperty("driver");
url= properties.getProperty("url");
pwd= properties.getProperty("pwd");
username= properties.getProperty("username");
}
//建立连接
public Connection getConnection() throws ClassNotFoundException, SQLException {
Class.forName(driver);//加载驱动
connection = DriverManager.getConnection(url, username, pwd);
return connection;
}
/*
* Connection对象:连接数据库
* Statement对象:执行sql语句
* Statement statement = conn.createStatement(); //不用传入参数
* PreparedStatement pre = conn.prepareStatement(sql); //这里必须传入参数
*PrepareStatement是Statement的子类:执行sql语句也可处理数据库的保留关键字
*
*ResultSet对象:结果集
* */
// 关闭连接
public void closeConnection(Connection connection,PreparedStatement preparedStatement, ResultSet resultSet) throws SQLException {
if (resultSet != null){
resultSet.close();
}
if(preparedStatement != null){
preparedStatement.close();
}
if(connection != null)
{
connection.close();
}
}
//查询功能
/*
* sql语句编写的不同,Statement 对象用executeQuery 方法或者executeUpdate方法执行sql 时 sql语句是一定的,
* 而 PreparedStatement对象是先预编译sql语句,其中需要的参数用 ? 代替,之后在用方法对 ’?’ 进行赋值 ,
* PreparedStatement对象对 ’?’ 进行赋值的方法
*/
public ResultSet query(PreparedStatement preparedStatement, String sql,ResultSet resultSet,Object[] param,Connection connection) throws SQLException {
if (connection != null) {
System.out.println("--------7");
preparedStatement = connection.prepareStatement(sql);
if (param != null) {
for (int i = 0; i < param.length; i++) {
//为预编译sql设置参数
preparedStatement.setObject(i + 1, param[i]);//赋值
}
}
resultSet = preparedStatement.executeQuery();
System.out.println("------6"+resultSet);
}
return resultSet;
}
}
4.编写一个接口实现查询功能
package com.xiaoye.dao;
import com.xiaoye.pojo.User;
import java.sql.SQLException;
public interface UserDao {
public User queryUser(String username,String password) throws SQLException, ClassNotFoundException;//查询功能
}
(1)实现这个接口(查询功能)
package com.xiaoye.dao.Impl;
import com.xiaoye.dao.BaseDao1;
import com.xiaoye.dao.UserDao;
import com.xiaoye.pojo.User;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class UserDaoImpl implements UserDao {
Connection connection ;
PreparedStatement preparedStatement ;
ResultSet resultSet ;
BaseDao1 baseDao = new BaseDao1();
@Override
public User queryUser(String username, String password) throws SQLException, ClassNotFoundException {
connection = baseDao.getConnection();
String sql = "select username,password from testdb where username=? and password = ?";
Object[] param = {username, password};
User user = new User();
String user_name = null;
String pass_word = null;
if (baseDao != null) {
resultSet = baseDao.query(preparedStatement,sql,resultSet,param,connection);
System.out.println("------5"+resultSet);
if (resultSet != null) {
while (resultSet.next()) {
user_name = resultSet.getString("username");
pass_word = resultSet.getString("password");
System.out.println("----3" + user_name + pass_word);
}
if (user_name != null && !user_name.equals("") && pass_word != null && !pass_word.equals("")) {
if (user != null) {
user.setUsername(user_name);
user.setPassword(pass_word);
System.out.println("----4" + user_name + pass_word);
}
}
}
}
System.out.println("--------2"+user);
return user;
}
}
5.编写一个测试登录功能的接口
package com.xiaoye.service;
import com.xiaoye.pojo.User;
import java.sql.SQLException;
public interface UesrService {
public User userLogin(String username,String password) throws SQLException, ClassNotFoundException;
}
(1)实现这个接口(返回查询值)
package com.xiaoye.service.Impl;
import com.xiaoye.dao.Impl.UserDaoImpl;
import com.xiaoye.dao.UserDao;
import com.xiaoye.pojo.User;
import com.xiaoye.service.UesrService;
import java.sql.SQLException;
public class UserServiceImpl implements UesrService {
@Override
public User userLogin(String username, String password) throws SQLException, ClassNotFoundException {
UserDao userDao = new UserDaoImpl();
User user = userDao.queryUser(username,password);
System.out.println("------1"+user);
return user;
}
}
6.编写登录服务
实现在网面上输入账号密码,并判断是否登录成功。
package com.xiaoye.controller;
import com.xiaoye.pojo.User;
import com.xiaoye.service.Impl.UserServiceImpl;
import com.xiaoye.service.UesrService;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.SQLException;
//@WebServlet("/login")
public class LoginServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setCharacterEncoding("utf-8");
UesrService uesrService = new UserServiceImpl();
String username = req.getParameter("username");
String pwd = req.getParameter("password");
User user = new User();
req.setAttribute("1","监听");
try {
user = uesrService.userLogin(username,pwd);
System.out.println("------------------0"+user);
} catch (SQLException throwables) {
throwables.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
if (user != null) {
if (user.getUsername() != null && !user.getUsername().equals("")) {
req.getRequestDispatcher("result.jsp").forward(req, resp);
} else {
req.setAttribute("error", "用户名或密码错误");
req.getRequestDispatcher("/login.jsp").forward(req,resp);
System.out.println(user.getUsername()+" "+user.getPassword()+" 1");
}
}else {
req.setAttribute("error", "用户名或密码错误");
req.getRequestDispatcher("login.jsp").forward(req,resp);
// if (user != null) {
// System.out.println(user.getUsername() + " " + user.getPassword() + " 2");
// }
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req,resp);
}
}
7.网页实现
1.登录页面
<%--
Created by IntelliJ IDEA.
User: Windows10
Date: 2022/7/23
Time: 15:41
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>login</title>
</head>
<body>
<form action="login" method="post">
账号: <input type="text" name="username">
<br>
密码: <input type="password" name="password" >
<br>
<input type="submit" value="登录">
${ requestScope.error}
</form>
</body>
</html>
2.登录成功页面
<%--
Created by IntelliJ IDEA.
User: Windows10
Date: 2022/7/23
Time: 15:48
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>你好</title>
</head>
<body>
恭喜你,登录成功!
</body>
</html>
3.登录失败页面
<%--
Created by IntelliJ IDEA.
User: Windows10
Date: 2022/7/24
Time: 22:42
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>error</title>
</head>
<body>
登录失败
</body>
</html>
8.过滤器(Filter)
防止不经过登录页面直接跳到登录成功页面。
package com.xiaoye.filter;
import org.apache.logging.log4j.core.script.Script;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpFilter;
import java.io.IOException;
public class FBase1 extends HttpFilter {
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
req.setCharacterEncoding("utf-8");
res.setCharacterEncoding("utf-8");
res.setContentType("text/html;charset=utf-8");
String f =(String) req.getAttribute("123");
if (f != null && !f.equals(" ")){
chain.doFilter(req,res);
req.getRequestDispatcher("/result.jsp").forward(req,res);
}else {
req.setAttribute("error","请先登录");
req.getRequestDispatcher("/login.jsp").forward(req,res);
}
}
}
9.映射(web.xml)
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<servlet>
<servlet-name>login</servlet-name>
<servlet-class>com.xiaoye.controller.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>login</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>login.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>file</filter-name>
<filter-class>com.xiaoye.filter.FBase1</filter-class>
</filter>
<filter-mapping>
<filter-name>file</filter-name>
<url-pattern>/result.jsp</url-pattern>
</filter-mapping>
</web-app>
十.成功演示
1.登录页面
2.登录失败页面
3.不经过登录页面直接进入登录成功页面
4.登录成功页面