Javaweb实现简易注册与登录功能(与数据库连接)

Javaweb要实现一个较为完整的程序,要有前台页面、后台和数据库数据。

我们在写注册与登录界面之前先了解一下Javaweb中比较重要的MVC模式

一、MVC

1、示意图

Javaweb实现简易注册与登录功能(与数据库连接)_第1张图片

2、MVC作用

MVC本来是存在于Desktop程序中的,M(Model)是指数据模型,V(View)是指用户界面,C(Control)是控制器。

MVC是一个设计模式,它强制性的使应用程序的输入、处理和输出分开。使用MVC应用程序被分成三个核心部件:模型、视图、控制器。它们各自处理自己的任务。

了解完MVC模式之后就可以开始对我们要实现的登录和注册功能进行分析了。

在进行分析时,通常是从显示层(视图层)开始从上往下分析

首先我们应编写好登录与注册页面,接着实现登录与注册以及其他相关功能的方法,然后调用方法,最后连接数据库并将前台数据传入数据库。

分析好后开始正式实现功能,实现功能时通常是从数据库开始从下往上实现

二、注册与登录

1、建立数据库User表

Javaweb实现简易注册与登录功能(与数据库连接)_第2张图片Javaweb实现简易注册与登录功能(与数据库连接)_第3张图片

【字符集设为utf8】 

2、编写数据库相关的信息文件

                建立一个file文件

Javaweb实现简易注册与登录功能(与数据库连接)_第4张图片

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/db_user
user=root
password=123456

3、利用类加载器读取到刚才新建的文件

package com.xinhua.utils;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
/**
 * 使用普通java类读取外部资源文件
 *
 */

public class ReadFile {
    public static Properties readFile(String Path){
        //利用类加载器读取文件
     InputStream in = ReadFile.class.getClassLoader().getResourceAsStream(Path);
        Properties p = new Properties();
        try {
            p.load(in);
            String url = (String) p.get("url");
            System.out.println(url);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return p;
    }
}

 4、封装对数据库的连接等操作

import java.sql.*;
import java.util.Properties;

/**
 * 封装对数据库的连接等
 */
public class DButils {
    public static Connection getConnection(){
        Properties properties = ReadFile.readFile("File/db.properties");
        String driver = (String)properties.get("driver");
        String url = (String)properties.get("url");
        String user = (String)properties.get("user");
        String password = (String)properties.get("password");

        try {

            Class.forName(driver);
            Connection connection=DriverManager.getConnection(url,user,password);
            return  connection;
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }
    //关闭数据库连接
    public  static void closeDB(Connection conn, PreparedStatement ps, ResultSet rs){
        if (rs!=null){
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

        if (ps!=null){
            try {
                ps.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

        if (conn!=null){
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

    }

}

import com.xinhua.domain.User;
import com.xinhua.utils.DButils;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class DaoUser {
    //用户登录
    public boolean findUserByUsernameAndPassword(String username,String password){
        Connection connection =null;
        String sql =null;
        PreparedStatement ps =null;
        ResultSet rs =null;
        Boolean flag=false;
        try{
            connection = DButils.getConnection();
            sql = "SELECT id FROM USER WHERE username=? AND password=?";
            ps = connection.prepareStatement(sql);
            ps.setString(1,username);
            ps.setString(2,password);
            rs = ps.executeQuery();
            while (rs.next()){
                if (rs.getInt(1)>0){
                    flag=true;
                }
            }
        }catch (SQLException e){
            e.printStackTrace();
        }
        DButils.closeDB(connection,ps,rs);
        return flag;
    }

    //查询用户
    public  static Boolean foundUserByUsername(String username){
        Connection connection =null;
    String sql =null;
    PreparedStatement ps =null;
    ResultSet rs =null;
    Boolean flag=false;
        try {
        connection = DButils.getConnection();
        sql = "SELECT id FROM USER WHERE username=?";
        ps = connection.prepareStatement(sql);
        ps.setString(1,username);
        rs = ps.executeQuery();
        while (rs.next()){
            if (rs.getInt(1)>0){
                flag=true;
            }
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }
        DButils.closeDB(connection,ps,rs);
        return flag;
}

    public static int addUser(User user){
        //添加用户
        Connection conn = null;
        String sql = null;
        int i =0;
        PreparedStatement ps =null;
        try {
            conn = DButils.getConnection();
            sql="insert into user(username,password,gender,age,hobbies,remark) values(?,?,?,?,?,?)";
            ps = conn.prepareStatement(sql);
            ps.setString(1,user.getUsername());
            ps.setString(2,user.getPassword());
            ps.setString(3,user.getGender());
            ps.setInt(4,user.getAge());
            ps.setString(5,user.getHobbies());
            ps.setString(6,user.getRemark());
            i = ps.executeUpdate();
            return i;
        } catch (SQLException e) {
            e.printStackTrace();
        }
        DButils.closeDB(conn,ps,null);
        return i;
    }

}

 

5、封装用户登录与用户注册的相关方法

import com.xinhua.dao.DaoUser;
import com.xinhua.domain.User;



public class UserService {

    /**
     * 用户登录
     */
    public boolean login(String username,String password){
        DaoUser daoUser = new DaoUser();
        boolean flag = daoUser.findUserByUsernameAndPassword(username,password);

        return flag;
    }

    /**
     * 注册用户
     * 处理User对象的相关业务
     */
    public int register(User user){
/**
 * 注册用户
 * 0(表示没有注册成功),1(表示注册成功),2(表示该用户一存在)。
 */
        DaoUser daoUser = new DaoUser();
        boolean flag = DaoUser.foundUserByUsername(user.getUsername());
        int state=0;
        if (flag){
            state=2;
        }else {
            int i = DaoUser.addUser(user);
            if (i>0){
                state=1;
            }else {
               state=0;
            }
        }

        
        return state;
    }
}
import com.xinhua.domain.User;

import java.util.HashMap;
import java.util.Map;

/**
 * 用户注册验证
 */
public class ValidateDome {
    public static Map validateUser(User user){
        Map error = new HashMap<>();
        System.out.println(user.getUsername()+"11111");
        System.out.println(user.getUsername()==null||"".equals(user.getUsername().trim()));

        if (user.getUsername()==null||"".equals(user.getUsername().trim())){
            error.put("username","用户名不能为空");
        }else if (!(user.getUsername().matches("\\w{6,18}"))){
            error.put("username","用户名不合法");
        }


        if (user.getPassword()==null||"".equals(user.getPassword().trim())){
            error.put("password","密码不能为空");
        }else if (!(user.getPassword().matches("[a-zA-Z0-9]{6,18}"))){
            error.put("password","密码不合法");
        }


        return error;

    }
}
/**
 * 数组转字符串工具类
 */
public class ArrayToString {
    public static String arrayToString(String[] arr) {
        String arrayString = "";
        for (int i = 0; i

 

 

6、编写Conntroller层与前台相关网页

     封装User对象

import java.util.Date;
/**
 * 封装User对象
 */

public class User {
    private String username;
    private String password;
    private String gender;
    private String hobbies;
    private String remark;
    private int age;

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = 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 getGender() {
        return gender;
    }

    public String getHobbies() {
        return hobbies;
    }

    public void setHobbies(String hobbies) {
        this.hobbies = hobbies;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String getHobby() {
        return hobbies;
    }

    public void setHobby(String hobbies) {
        this.hobbies = hobbies;
    }

    public String getRemark() {
        return remark;
    }

    public void setRemark(String remark) {
        this.remark = remark;
    }


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

        注册界面(register.jsp)

<%@ page import="java.util.HashMap" %>
<%@ page import="java.util.Map" %>
<%--
  Created by IntelliJ IDEA.
  User: jinyj
  Date: 2023/9/21
  Time: 11:47
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title



<%--
String registerfail = request.getParameter("registerfail");
--%>

<%
    HashMap error = ((HashMap)request. getAttribute("error"));
    String registerfail = request.getParameter("registerfail");
%>
<%=registerfail==null?"":registerfail%>
注册
用户名 <%=error==null?"":error.get("username")==null?"":error.get("username")%>
密码 <%=error==null?"":error.get("password")==null?"":error.get("password")%>
年龄
性别
爱好 篮球 足球 羽毛球
备注

         注册失败界面(registerfail.jsp)

<%--
  Created by IntelliJ IDEA.
  User: jinyj
  Date: 2023/9/21
  Time: 15:24
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title


注册失败

返回重新注册

         注册成功界面(success.jsp)

<%--
  Created by IntelliJ IDEA.
  User: jinyj
  Date: 2023/9/21
  Time: 15:38
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title


注册成功

点击登录

         登录界面(login2.jsp)

<%@ page import="java.util.HashMap" %><%--
  Created by IntelliJ IDEA.
  User: jinyj
  Date: 2023/9/27
  Time: 10:39
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title



<%
    HashMap error = ((HashMap)request. getAttribute("error"));
    String fail = (String) request.getParameter("fail");
%>

登录
账号:<%=fail==null?"":fail%> <%=error==null?"":error.get("username")==null?"":error.get("username")%>
密码: <%=error==null?"":error.get("password")==null?"":error.get("password")%>

        登录成功界面(index01.jsp) 

<%--
  Created by IntelliJ IDEA.
  User: jinyj
  Date: 2023/9/19
  Time: 10:29
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title



 <%=request. getParameter("username")%>登录成功! Welcome to javaweb!

        最后调用service层的方法发布项目即可 

import com.xinhua.domain.User;
import com.xinhua.service.UserService;
import com.xinhua.utils.ArrayToString;
import com.xinhua.validate.ValidateDome;
import org.apache.commons.beanutils.BeanUtils;

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.lang.reflect.InvocationTargetException;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;

@WebServlet("/UserController")
public class UserController extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String action = req.getParameter("userAction");
        //处理中文乱码
        resp.setContentType("text/html;charset=utf-8");
        req.setCharacterEncoding("utf-8");

        //登录
        if ("login".equals(action)){
            User user = new User();

            try {
                BeanUtils.populate(user,req.getParameterMap());
                Map error = ValidateDome.validateUser(user);
                if (error.isEmpty()){
                    UserService userService = new UserService();
                    boolean flag = userService.login(user.getUsername(),user.getPassword());
                    if (flag){
                        resp.sendRedirect("index01.jsp?username="+ URLEncoder. encode(user.getUsername(),"utf-8"));
                    }else {
                        req.setAttribute("fail","登录失败");
                        req.getRequestDispatcher("login2.jsp").forward(req,resp);
                    }
                }else {
                    req. setAttribute( "error", error);
                    req.getRequestDispatcher( "login2.jsp").forward(req,resp);
                }
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                e.printStackTrace();
            }


        }
        //注册
        if ("register".equals(action)){
            User user = new User();
            try {
                BeanUtils.populate(user,req.getParameterMap());
                user.setHobbies(ArrayToString.arrayToString(req.getParameterValues("hobbies")));
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                e.printStackTrace();
            }
            Map error = new HashMap<>();
            if (error.isEmpty()){

                //调用service
                UserService userService = new UserService();
                int state = userService.register(user);
                if (state==0){
                    resp.sendRedirect("registerfail.jsp");
                }
                if (state==1){
                    resp.sendRedirect("success.jsp");
                }
                if (state==2){
                    resp.sendRedirect("register.jsp?registerfail="+ URLEncoder. encode( "该用户已经存在!", "utf-8"));
                }
            }else {
                req. setAttribute( "error", error);
                req.getRequestDispatcher( "/register.jsp").forward(req, resp);
            }
        }

    }
}

最后给大家附上部分结果截图,谢谢观看

        运行结果 

Javaweb实现简易注册与登录功能(与数据库连接)_第5张图片

Javaweb实现简易注册与登录功能(与数据库连接)_第6张图片 Javaweb实现简易注册与登录功能(与数据库连接)_第7张图片 

Javaweb实现简易注册与登录功能(与数据库连接)_第8张图片 

你可能感兴趣的:(数据库,mysql,java,servlet)