【Java实习】Day 05

该博客介绍了如何使用Servlet和Ajax实现用户注册与登录功能。通过在后台创建一个静态ArrayList来模拟数据库,存储User对象。用户注册时,前端通过Ajax异步提交数据,验证并添加到集合中。登录功能则遍历集合,比较用户名和密码,返回登录结果。整个过程涉及到前端Ajax请求、后端Servlet处理以及简单的数据验证。

1、使用集合模拟数据库,利用ajax异步提交数据,实现用户注册功能
2、将用户登录功能和用户注册功能结合起来

  • LoginServlet类:
public class LoginServlet extends HttpServlet {
    //继承的目的就是要请求对象和响应对象

    //创建一个公共的集合对象
    static ArrayList<User> users = new ArrayList<>();
    //现在是类级别地址,存放在方法区内存当中

    /**
     *
     * @param req       请求对象
     * @param resp      响应对象
     * @throws ServletException
     * @throws IOException
     */
    @Override
    public void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String method = req.getParameter("method");

        //获取到集合中的用户数据
        getUsers();
        //空指针异常错误避免方法:非空校验
        if(method==null){
            System.out.println("method值不存在");
        }
        else{
            if(method.equals("login")){
                toLogin(req,resp);
            }
            else if(method.equals("register")){
                toRegister(req,resp);
            }
        }
    }

    /**
     * 注册的方法
     * @param req
     * @param resp
     */
    public void toRegister(HttpServletRequest req, HttpServletResponse resp) {
        String username = req.getParameter("username");
        String password = req.getParameter("password");

        //测试数据
        System.out.println("用户名的值为:"+username);
        System.out.println("密码的值为:"+password);

        //创建用户对象
        User user = new User();
        user.setUsername(username);
        user.setPassword(password);

        //获取集合长度
        int size = users.size();

        //添加数据
        users.add(user);

        //获取集合长度
        int size2 = users.size();

        //校验
        if(size2 == size + 1){
            try {
                resp.getWriter().print("true");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        else{
            try {
                resp.getWriter().print("false");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        for(User user1 : users){
            System.out.println(user1);
        }

    }

//    /**
//     * 执行登录的方法
//     * @param req
//     * @param resp
//     */
//    public void toLogin(HttpServletRequest req, HttpServletResponse resp) {
//        //一定是阿贾克斯的data部分,根据属性接收属性值
//        String username = req.getParameter("username");
//        String password = req.getParameter("password");
//        System.out.println("用户名的值为:"+username+";密码的值为:"+password);
//        //不用考虑中文乱码问题
//    }

    /**
     * 用户登录功能
     */
    public void toLogin(HttpServletRequest req, HttpServletResponse resp) {
        //记得修改访问权限标识符 private -> public

        //接收前端传的用户名的值
        String username = req.getParameter("username");
        //接收前端传的密码的值
        String password = req.getParameter("password");

        System.out.println("用户名的值为:"+username+";密码的值为:"+password);

        //获取容器对象,把相关数据存放在集合当中
//        getUsers();       //现放到service函数当中

        //定义一个标识,判断输入的用户名和密码是否合法
        boolean flag = false;

        //遍历集合对象
        for(User user:users){
            if(user.getUsername().equals(username) && user.getPassword().equals(password)){
                //用户名和密码必须都相等才可以登录成功
                flag=true;
            }
        }
        if(flag==true){
            try {
                resp.getWriter().print("true");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        else{
            try {
                resp.getWriter().print("false");
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * 用集合模拟一个容器
     */
    public ArrayList<User> getUsers(){//写ArrayList<User>不用强转,写List需要
        /*这样写不太规范,因为功能很多,都写在一个方法里不规范。
         * 不要把所有功能写在一个方法里
         */

        //创建用户对象
        User user1 = new User();
        user1.setUsername("张三");
        user1.setPassword("123456");

        User user2 = new User("韩信","qwe123");
        User user3 = new User("百里守约","qwe123");
        User user4 = new User("百里玄策","434544");
        User user5 = new User("李白","ssddd");
        User user6 = new User("貂蝉","www111");
        User user7 = new User("吕布","30222");

        //把用户对象装进容器
        users.add(user1);
        users.add(user2);
        users.add(user3);
        users.add(user4);
        users.add(user5);
        users.add(user6);
        users.add(user7);

        return users;//测试用
    }
}
  • register.jsp
<%--
  Created by IntelliJ IDEA.
  User: nosteglic
  Date: 2021/1/3
  Time: 16:23
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<%
    //写java代码,因为js底层是java

    //定义绝对路径地址
    String contextPath = request.getContextPath();
%>
<html>
<head>
    <title>注册界面</title>
</head>
<!-- 引入jquery控件 -->
<script src="<%=contextPath%>/jquery/jquery-1.7.2.js"></script>
<script>
    function register(){
        //判断两次输入的密码是否相同
        var password = $("[name='password']").val()
        var password2 = $("[name='password2']").val()

        if(password == password2){
            $.ajax({
                //提交到后端的地址
                url : "http://localhost:8080/login?method=register",
                //提交到后端,实现注册功能
                //提交的类型
                type : "post",
                //提交到后端的数据
                data : {
                    //属性过滤选择器
                    username:$("[name='username']").val(),
                    password:$("[name='password']").val(),
                },
                //回调函数,obj接收参数
                success : function (obj){
                    if(obj){
                        alert("注册成功");
                        location.href="http://localhost:8080/jsp/login.jsp"
                    }
                    else{
                        alert("注册失败!有问题请联系管理员!!!")
                    }
                },
                //返回的数据类型
                dataType : "json"
            })
        }
        else{
            alert("两次输入的密码不一致")
        }


    }
</script>

<body>
<h1 align="center">用户注册界面</h1>

<!-- 通过问号?拼接一个method属性-->
<!-- 表格标签 -->
<table border="1px" bgcolor="pink" align="center">
    <tr>
        <td>用户名:</td>
        <td><input type="text" id="username" name="username"></td>
    </tr>

    <tr>
        <td>密码:</td>
        <td><input type="password" name="password"></td>
    </tr>

    <tr>
        <td>确认密码:</td>
        <td><input type="password" name="password2"></td>
    </tr>

    <tr>
        <td colspan="5" align="center">
            <input type="button" value="注册" onclick="register()">
        </td>
    </tr>
</table>
</body>
</html>

  • 其他不变
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

社恐患者

赚钱不易呜呜呜

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

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

打赏作者

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

抵扣说明:

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

余额充值