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

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

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

一、MVC

1、示意图

2、MVC作用

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

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

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

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

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

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

二、注册与登录

1、建立数据库User表

【字符集设为utf8】 

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

                建立一个file文件

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<String,String> validateUser(User user){
        Map<String,String> 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<arr.length;i++){
            if (i!=arr.length-1){
                arrayString = arrayString + arr[i] + ",";
            }else {
                arrayString = arrayString + arr[i];
            }
        }
        return arrayString;
    }

}

 

 

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" %>
<html>
<head>
    <title>Title</title>
</head>
<body>

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

<%
    HashMap<String, String> error = ((HashMap<String, String>)request. getAttribute("error"));
    String registerfail = request.getParameter("registerfail");
%>
<%=registerfail==null?"":registerfail%>
<form name="form1" method="post" action="UserController">
    <input type="hidden" value="register" name="userAction">
    <table width="30%" heighe="300px"border="1" id="table1">
        <tr align="center"><td colspan="2">注册</td></tr>
        <tr><td>用户名</td><td><input type="text" id="username" name="username"/><span style="color:red"> <%=error==null?"":error.get("username")==null?"":error.get("username")%></span></td></tr>
        <tr><td>密码</td><td><input type="password" id="password" name="password" /><span style="color:red"> <%=error==null?"":error.get("password")==null?"":error.get("password")%></span></td></tr>
        <tr><td>年龄</td><td><input type="text" id="age" name="age" /></td></tr>
        <tr><td>性别</td>
            <td>
                <input type="radio" value="female" name="gender">女
                <input type="radio" value="male" name="gender">男
            </td></tr>
        <tr>
            <td>爱好</td>
            <td>
                <input type="checkbox"value="篮球" name="hobbies" >篮球
                <input type="checkbox"value="足球" name="hobbies" >足球
                <input type="checkbox"value="羽毛球" name="hobbies" >羽毛球
            </td>
        </tr>
        <tr><td>备注</td>
            <td>
                <input id="comments" name="remark" rows="4" cols="50">
            </td>
        </tr>
        <tr>
            <td colspan="2" align="center">
                <input type="submit" value="提交">
                <input type="reset" value="重置">
            </td>
        </tr>
    </table>
</form>
</body>
</html>

         注册失败界面(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" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h1>注册失败</h1>请<a href="register.jsp">返回</a>重新注册
</body>
</html>

         注册成功界面(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" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h1>注册成功</h1><a href="login2.jsp">点击登录</a>
</body>
</html>

         登录界面(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" %>
<html>
<head>
    <title>Title</title>
</head>
<body>

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

<form action="UserController" method="post">
    <input type="hidden" value="login" name="userAction">
    <table border="1" align="center" bgcolor="#7fffd4">
        <tr align="center"><th colspan="2">登录</th></tr>
        <tr><td>账号:<input type="text" name="username"><%=fail==null?"":fail%><span style="color:red"> <%=error==null?"":error.get("username")==null?"":error.get("username")%></span></td></tr>
        <tr><td>密码:<input type="text" name="password"><span style="color:red"> <%=error==null?"":error.get("password")==null?"":error.get("password")%></span></td></tr>
        <tr align="center"><td colspan="2"><input type="submit" value="登录"><input type="reset" value="重置"></td></tr>
    </table>
</form>
</body>
</html>

        登录成功界面(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" %>
<html>
<head>
    <title>Title</title>
</head>
<body>

<span style="color: red"> <%=request. getParameter("username")%></span>登录成功! Welcome to javaweb!
</body>
</html>

        最后调用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<String,String> 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<String,String> 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);
            }
        }

    }
}

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

        运行结果 

  

 

  • 11
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值