超详细超简单的登录页面实现(MVC实现)

        一个简单的利用数据库的查找实现网页的登录。话不多说,上代码。

目录

1.项目结构

2.数据库的设计

3.pojo编写

4.数据库(BaseDao)的实现

4.编写一个接口实现查询功能

5.编写一个测试登录功能的接口

6.编写登录服务

7.网页实现

8.过滤器(Filter)

9.映射(web.xml)

十.成功演示


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.登录成功页面

 

 

 

  • 7
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值