JavaWeb实现表单注册登录

项目结构

controller:调用方法实现操作

dao:对数据库的相关操作

domain:实体类存放数据

service:业务逻辑

utils:工具

validate:用于数据验证

file:配置文件

lib:存放jar包(注意放入文件夹后需右键点击Add as Libray加入工作环境)

Dao层

新建数据库(MySQL)

使用可视化工具建表

新建1个User类用于存放数据(domain目录下)

package com.org.domain;

import java.util.Date;

/**
* 用户类
* */
public class User {
    private String username;
    private String password;
    private String gender;
    private String hobby;
    private String address;
    private String remark;



    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 void setGender(String gender) {
        this.gender = gender;
    }

    public String getHobby() {
        return hobby;
    }

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

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getRemark() {
        return remark;
    }

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


    public User(String username, String password, String gender, String hobby, String address, String remark) {
        this.username = username;
        this.password = password;
        this.gender = gender;
        this.hobby = hobby;
        this.address = address;
        this.remark = remark;
    }

    public User() {
    }

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

DBUser类:连接数据库(utils目录下) 

package com.org.utils;

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

/**
 * 连接数据库
 */
public class DBUtils {
    private static String driver;
    private static String url;
    private static String user;
    private static String password;
    //优化:只需连接一次数据库
    static {
        //获取配置信息
        Properties properties = ReadFileDemo.readFilef("file/db.properties");
        driver = (String) properties.get("driver");
        url = (String) properties.get("url");
        user = (String) properties.get("user");
        password = (String) properties.get("password");
        try {
            Class.forName(driver);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }


    //连接数据库
    public static Connection getConnection(){
        //加载驱动
        try {

            Connection connection = DriverManager.getConnection(url, user, password);
            return connection;

        }
         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();
            }
        }

    }
}

UserDao类 :User对数据库的操作(dao目录下)

package com.org.dao;

import com.org.domain.User;
import com.org.utils.DBUtils;
import com.org.utils.ReadFileDemo;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;

/**
 * 处理User的数据存放
 */
public class UserDao {
    //根据用户名和密码查询用户
    public boolean findUserByNamePassword(String username,String password){
        Connection conn = null;
        PreparedStatement ps = null;
        String sql=null;
        ResultSet rs = null;
        boolean flag = false;
        try {
            conn = DBUtils.getConnection();
            sql = "select id from user where username=? and password=?";
            ps = conn.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(conn,ps,rs);
        return flag;
    }


    //根据用户名查询用户
    public boolean findUserByName(String username){
        Connection conn = null;
        PreparedStatement ps = null;
        String sql=null;
        ResultSet rs = null;
        boolean flag = false;
        try {
            conn = DBUtils.getConnection();
            sql = "select id from user where username=?";
            ps = conn.prepareStatement(sql);
            ps.setString(1,username);
            rs = ps.executeQuery();
            while (rs.next()){
                if (rs.getInt(1)>0){
                    flag = true;
                    return flag;
                }
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        DBUtils.closeDB(conn,ps,rs);
        return flag;
    }


    //添加用户
    public int addUser(User user){
        Connection conn = null;
        PreparedStatement ps = null;
        String sql=null;
        int flag = 0;
        try {
            conn = DBUtils.getConnection();
            sql="insert into user(username,password,gender,hobby,address,remark)value(?,?,?,?,?,?)";
            ps = conn.prepareStatement(sql);
            ps.setString(1, user.getUsername());
            ps.setString(2, user.getPassword());
            ps.setString(3, user.getGender());
            ps.setString(4, user.getHobby());
            ps.setString(5, user.getAddress());
            ps.setString(6, user.getRemark());
            flag = ps.executeUpdate();
            return flag;
        } catch (SQLException e) {
            e.printStackTrace();
        }
        DBUtils.closeDB(conn,ps,null);
        return 0;
    }
}

Service层 

UserService类:User的业务逻辑(Service目录下)

package com.org.service;

import com.org.dao.UserDao;
import com.org.domain.User;

import java.util.List;

/**
 * 处理User的业务
 */
public class UserService {
    /**
     * 用户登录
     */
    public boolean login(String username,String password){
        UserDao userDao = new UserDao();
        boolean flag = userDao.findUserByNamePassword(username, password);
        return flag;
    }


    /**
     * 注册用户
     * (0代表注册失败,1代表注册成功,2代表用户已存在)
     * @param user
     * @return
     */
    public int register(User user){
        UserDao userDao = new UserDao();
        boolean flag = userDao.findUserByName(user.getUsername());
        int start = 0;
        if (flag){
            //用户存在
            start = 2;
        }else {
            int i = userDao.addUser(user);
            //注册成功
            if (i>0){
                start = 1;
            }
            //注册失败
            else {
                start = 0;
            }
        }
        return start;
    }
}

Controller层

UserController类:调用方法实现业务(controller目录下)

package com.org.controller;

import com.org.dao.UserDao;
import com.org.domain.User;
import com.org.service.UserService;
import com.org.utils.ArrayToString;
import com.org.validate.ValidateDemo;
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.List;
import java.util.Map;

/**
 * 用户操作
 */
@WebServlet("/UserController")
public class UserController extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        resp.setContentType("text/html;charset=utf-8");
        //获取隐藏域的值
        String userAction = req.getParameter("userAction");
        //登录
        if ("login".equals(userAction)){
            User user = new User();
            try {
                BeanUtils.populate(user,req.getParameterMap());
                Map<String, String> error = ValidateDemo.validate(user);
                if (error.isEmpty()){
                    UserService userService = new UserService();
                    boolean flag = userService.login(user.getUsername(), user.getPassword());
                    List userinfor = userService.showUser();
                    if (flag){
                        //登录成功
                        String username = URLEncoder.encode(user.getUsername(),"utf-8");
                        resp.sendRedirect("/formdemo/index.jsp?username="+username);
                    }else {
                        //登录失败
                        req.setAttribute("fail","登录失败!");
                        req.getRequestDispatcher("/login1.jsp").forward(req,resp);
                    }
                }else {
                    req.setAttribute("error",error);
                    req.getRequestDispatcher("/login1.jsp").forward(req,resp);
                }

            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                e.printStackTrace();
            }
        }
        //注册
        if ("register".equals(userAction)){
            User user = new User();
            try {
                BeanUtils.populate(user,req.getParameterMap());
                user.setHobby(ArrayToString.arrayToString(req.getParameterValues("hobby")));
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                e.printStackTrace();
            }
            //验证数据
            Map<String, String> error = ValidateDemo.validate(user);
            //如果没有数据跳转到注册成功页面
            if (error.isEmpty()){
                UserService userService = new UserService();
                int register = userService.register(user);
                if (register == 0) {
                    resp.sendRedirect("/formdemo/fail.jsp");
                }
                if (register == 1){
                    resp.sendRedirect("/formdemo/success.jsp");
                }
                if (register == 2){
                    resp.sendRedirect("/formdemo/register.jsp?register=" + URLEncoder.encode("该用户已存在","utf-8"));
                }
            }else {
                //如果有数据就携带数据跳转回到注册页面
                req.setAttribute("error",error);
                req.getRequestDispatcher("/register.jsp").forward(req,resp);
            }
        }

    }
}

创建网页界面 

fail:注册失败页面

index:主页

login1:登录页面

<%@ page import="java.util.HashMap" %><%--
  Created by IntelliJ IDEA.
  User: Asus
  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.getAttribute("fail");
%>
//获取验证数据
<div style="width:100%;  text-align: center"><%=fail==null?"":fail%></div>
<form action="UserController" method="post">
    <input type="hidden" value="login" name="userAction">
    <table border="1" cellspacing="0" cellpadding="0" align="center">
        <tr>
            <th colspan="2">登录</th>
        </tr>
        <tr>
            <td>用户名:</td>
            <td><input type="text" name="username"><%=error==null?"":error.get("username")==null?"":error.get("username")%></td>
        </tr>
        <tr>
            <td>密码:</td>
            <td><input type="password" name="password"><%=error==null?"":error.get("password")==null?"":error.get("password")%></td>
        </tr>
        <tr>
            <td colspan="2" align="center">
                <input type="submit" value="登录">
                <input type="reset" value="重置">
            </td>
        </tr>
    </table>
</form>

</body>
</html>

register:注册页面

<%@ page import="java.util.HashMap" %><%--
  Created by IntelliJ IDEA.
  User: Asus
  Date: 2023/9/21
  Time: 11:25
  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 register = request.getParameter("register");
%>
<div>
    //获取验证提示
    <div style="width:100%;  text-align: center"><%=register==null?"":register%></div>
    <form action="UserController" method="post">
        <input type="hidden" value="register" name="userAction">
        <table border="1" cellpadding="0" cellspacing="0" width="50%" height="500px" align="center">
            <tr>
                <td colspan="2" align="center">用户注册</td>
            </tr>
            <tr>
                <td>用户名:</td>
                <td><input type="text" value="" name="username"></td>
                <%=error==null?"":error.get("username")==null?"":error.get("username")%>
            </tr>
            <tr>
                <td>密码:</td>
                <td><input type="password" value="" name="password"></td>
                <%=error==null?"":error.get("password")==null?"":error.get("password")%>
            </tr>
            <tr>
                <td>性别:</td>
                <td>
                    <input type="radio" value="男" name="gender">男
                    <input type="radio" value="女" name="gender">女
                </td>
            </tr>
            <tr>
                <td>爱好:</td>
                <td>
                    <input type="checkbox" value="篮球" name="hobby">篮球
                    <input type="checkbox" value="唱" name="hobby">唱
                    <input type="checkbox" value="跳" name="hobby">跳
                    <input type="checkbox" value="rap" name="hobby">rap
                </td>
            </tr>
            <tr>
                <td>地址:</td>
                <td>
                    <select name="address">
                        <option value="北京">北京</option>
                        <option value="四川">四川</option>
                        <option value="广州">广州</option>
                        <option value="上海">上海</option>
                    </select>
                </td>
            </tr>
            <tr>
                <td>备注:</td>
                <td>
                    <textarea cols="80" rows="20" name="remark">

                    </textarea>
                </td>
            </tr>
            <tr>
                <td colspan="2" align="center">
                    <input type="submit" value="注册">
                    <input type="reset" value="重置">
                </td>
            </tr>
        </table>
    </form>
</div>
</body>
</html>

success:注册成功页面

运行结果

输入数据

 

数据已存入数据库 

 

显示注册成功后前往登录

点击登录

最后出现欢迎的字幕成功登录 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值