使用tomcat与selvlet制作一个简易登陆界面

本文演示了使用Java Web实现用户登录验证的过程,包括HTML登录界面、JDBC工具类、登录Servlet以及用户类的详细代码。通过Druid连接池与PreparedStatement防止SQL注入,登录成功跳转到成功页面,失败则跳转到失败页面。
摘要由CSDN通过智能技术生成

一.需求

用户输入账号密码提交,服务器从数据库中查询,如果正确跳转到登陆成功的界面,如果失败,跳转到登陆失败的界面

二.代码

代码一切从简,后期一个一个完善

项目结构:

 

 使用到的库:

 

1.登录界面login.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登录</title>
</head>
<body>
<form action="/login">
  账号:
  <input type="text" name="username" ><br>
  密码:
  <input type="password" name="password" ><br>
  <input type="submit" value="登录">
</form>
</body>
</html>

2.数据库相关代码

1.jdbc工具类

用于定义数据库连接池,读取配置文件等

package com.web.jdbc;

import javax.sql.DataSource;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
import com.alibaba.druid.pool.DruidDataSourceFactory;
public class JDBCUtlis {
    private static DataSource ds;

    static{

        try {
            //        加载资源
            Properties pro=new Properties();
            ClassLoader classLoader=JDBCUtlis.class.getClassLoader();
            InputStream path = classLoader.getResourceAsStream("druid.properties");
            pro.load(path);
            ds= DruidDataSourceFactory.createDataSource(pro);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static Connection getConnection() throws SQLException {
        return ds.getConnection();
    }
    public static DataSource getDataSource(){
        return ds;
    }
    public static void close(Statement stmt, Connection coon, ResultSet res){
        try {
            if (stmt!=null){
                stmt.close();
            }
            if (coon!=null){
                coon.close();
            }
            if (res!=null){
                res.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }


}

2.登陆类

用于判断传入的user对象是否是符合条件的

package com.web.jdbc;

import java.sql.*;

public class loginServlet {
    public static boolean login(Users user){
        //        使用PreparedStatement防止注入攻击
        PreparedStatement pstmt;
        ResultSet res;
        try (Connection coon = JDBCUtlis.getConnection()) {
            //        创建一个数据库接口对象
            String sql = "select * from user where username=? and password=?";
            //        创建执行语句的对象
            pstmt = coon.prepareStatement(sql);
            pstmt.setString(1, user.getUsername());
            pstmt.setString(2, user.getPassword());
            res = pstmt.executeQuery();
            if (res.next()) {
                return true;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }


        return false;
    }

}

3.用户类

 封装一个用户对象

package com.web.jdbc;

public class Users {
    private String username;
    private String password;
    private String age;

    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 getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Users{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", age='" + age + '\'' +
                '}';
    }
}

3.servlet相关代码

1.用于处理用户登录数据时调用

 

package com.web.servlet;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.apache.commons.beanutils.BeanUtils;
import java.io.BufferedReader;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.Enumeration;
import java.util.Map;
import com.web.jdbc.*;

@WebServlet("/login")
public class ServletLogin extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        1.设置流的编码
        req.setCharacterEncoding("utf-8");
//        2.获取用户传来的键值对
        Map<String, String[]> map = req.getParameterMap();
//        3.封装user对象
        Users user=new Users();
        try {
            BeanUtils.populate(user,map);
        } catch (IllegalAccessException | InvocationTargetException e) {
            e.printStackTrace();
        }
        if(loginServlet.login(user)){
//            跳转登陆成功页面
            req.setAttribute("user",user.getUsername());
            req.getRequestDispatcher("/login_success").forward(req,resp);
        }else {
//            跳转登陆失败页面
            req.getRequestDispatcher("/login_defeated").forward(req,resp);
        }

    }
}

2.登陆失败时调用

 

package com.web.servlet;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;

@WebServlet("/login_defeated")
public class ServletLogin_defeated extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html;charset=UTF-8");
        resp.getWriter().write("登陆失败,"+"<a href=\"login.html\">点击重新登陆......</a>");
    }
}

3.登陆成功时调用

 

package com.web.servlet;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;

@WebServlet("/login_success")
public class ServletLogin_success extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html;charset=UTF-8");
        resp.getWriter().write("登陆成功,"+req.getAttribute("user")+",欢迎您!");
    }
}

三.成果展示

1.使用错误密码进行登录

 

 2.点击重新登陆后输入正确的账号与密码

 完成

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

豪豪喜欢吃猪肉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值