javaweb学习的第7天(2021-11-13)--------登录功能的实现

这篇博客介绍了JavaWeb中登录功能的实现,包括JS事件驱动、DOM操作,以及如何通过Ajax进行异步用户名校验,以提升用户体验。在注册功能中,遇到的问题是错误提示信息无法清除,解决方案是通过JS函数实现在输入错误后清空提示。此外,还探讨了使用jQuery简化Ajax操作,并展示了jQuery实现异步校验的示例。
摘要由CSDN通过智能技术生成

javaweb学习的第7天(2021-11-13)--------登录功能的实现

JS里面的事件驱动。
在这里插入图片描述
基本只研究用户事件。
在这里插入图片描述
这个函数需要写在这里:
在这里插入图片描述
在这里插入图片描述

例子:
jsp页面的body标签:
在这里插入图片描述
jsp页面的head标签:
在这里插入图片描述

相当于点击这个按钮会触发一个方法的调用,这个方法是定义在head标签里面。
效果:
在这里插入图片描述

常用的事件:
1、onload:加载完毕的事件
2、onclick:鼠标点击
3、obblur:失去焦点事件
4、onfocus:获取焦点事件
5、onmouseover:鼠标移进来
6、onmouseout:鼠标移出去

JS里面的BOM:
在这里插入图片描述
在这里插入图片描述
window对象:
在这里插入图片描述
alert()是window这个对象提供的。

用的最多的就是Window对象里面的子对象document
window.doucument里面的window可以省略。

BOM VS DOM

在这里插入图片描述

BOM就是DOM里面的其中一个对象document
使用document可以获取到当前这个jsp页面的每一个元素。

想实现的功能:
点击button,之前是alert弹窗信息,现在是更换一行话:

现在:
在这里插入图片描述
点了button之后:
在这里插入图片描述
代码:
body标签:
在这里插入图片描述
head标签:
在这里插入图片描述

升级难度:
实现的效果:
刚开始:
在这里插入图片描述
现在:
点击按钮后。
复杂事情这句话进入文本框,复杂事情被替换拼搏…
在这里插入图片描述

代码:
body标签:
在这里插入图片描述
在这里插入图片描述

粗略学习了以下js之后,重新回到之前的那个需求:
目前问题:
当我第一次输入密码输入错误的时候。第二次再准备去输入的时候,后面这个提示错误信息一直还在,希望后期我第二次输入的时候,这个信息可以没了。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

注册功能的实现:

在这里插入图片描述

注册失败的定义:
用户名已经在数据库里面存在了。

1、注册页面:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>regist</title>
    <style>
        span{
            color:red;
        }
    </style>
    <script type="text/javascript">
        function disappear(){
            var s1 = document.getElementById("s1");
            s1.innerHTML="";
        }
    </script>

</head>
<body>
<form action="regist" method="post">
    <h1>欢迎注册</h1>
    用户名称:<input id="text01" type="text" name="username" onclick="disappear();">
    <span id="s1">${requestScope.registFailMsg}</span>
    <br>
    用户密码:<input type="password" name="password">
    <br>
    确认密码:<input type="password" name="repassword">
    <br>
    <input type="submit" name="regist" value="注册">
</form>

</body>
</html>

2、RegistServlet代码:

package com.rtl.login.servlet;

import com.rtl.bean.User;
import com.rtl.dao.UserDao;
import com.rtl.daoImpl.UserDaoImpl;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;

public class RegistServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        UserDao userDao = new UserDaoImpl();
        User user = userDao.getUserByName(username);
        if(user!=null){
            //注册失败:
            request.setAttribute("registFailMsg","用户名已经存在!请重新注册");
            request.getRequestDispatcher("regist.jsp").forward(request,response);
        }else{
            user = new User();
            user.setUname(username);
            user.setUpwd(password);
            //注册成功:
            userDao.insert(user);
            response.sendRedirect("login.jsp");
        }

    }
}

3、接口:UserDao

package com.rtl.dao;

import com.rtl.bean.User;

public interface UserDao {
    User getUserByNameAndPwd(String uName,String uPwd);
    User getUserByName(String uName);
    void insert(User user);
}

4、接口的实现类:

package com.rtl.daoImpl;

import com.rtl.bean.User;
import com.rtl.dao.UserDao;
import com.rtl.utils.ConnectionUtils;

import java.sql.*;

public class UserDaoImpl implements UserDao {
    @Override
    public User getUserByNameAndPwd(String uName, String uPwd) {
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        User user = null;
        try{
            conn = ConnectionUtils.getConn();
            String sql = "SELECT id,uname,upwd FROM user WHERE uname=? AND upwd=?";
            ps = conn.prepareStatement(sql);
            ps.setString(1,uName);
            ps.setString(2,uPwd);
            rs = ps.executeQuery();
            if(rs.next()){
                user = new User();
                user.setId(rs.getInt(1));
                user.setUname(rs.getString(2));
                user.setUpwd(rs.getString(3));
                return user;
            }
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            if(conn!=null){
                try {
                    ConnectionUtils.closeConn();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if(ps!=null){
                try {
                    ps.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if(rs!=null){
                try {
                    rs.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
        return user;
    }

    @Override
    public User getUserByName(String uName) {
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        User user = null;
        try{
            conn = ConnectionUtils.getConn();
            String sql = "SELECT id,uname,upwd FROM user WHERE uname=?";
            ps = conn.prepareStatement(sql);
            ps.setString(1,uName);
            rs = ps.executeQuery();
            if(rs.next()){
                user = new User();
                user.setId(rs.getInt(1));
                user.setUname(rs.getString(2));
                user.setUpwd(rs.getString(3));
                return user;
            }
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            if(conn!=null){
                try {
//                    conn.close();
                    ConnectionUtils.closeConn();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if(ps!=null){
                try {
                    ps.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if(rs!=null){
                try {
                    rs.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
        return user;
    }

    @Override
    public void insert(User user) {
        try{
            Connection conn = ConnectionUtils.getConn();
            String sql ="INSERT INTO USER(uname,upwd) VALUES(?,?)";
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setString(1,user.getUname());
            ps.setString(2,user.getUpwd());
            ps.executeUpdate();
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            try {
                ConnectionUtils.closeConn();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

5、配置文件web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
         version="5.0">

    <servlet>
        <servlet-name>login</servlet-name>
        <servlet-class>com.rtl.login.servlet.LoginServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>login</servlet-name>
        <url-pattern>/login</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>regist</servlet-name>
        <servlet-class>com.rtl.login.servlet.RegistServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>regist</servlet-name>
        <url-pattern>/regist</url-pattern>
    </servlet-mapping>
</web-app>

现在就是: 如果我们注册时候,表单里面由很多个选项,如果注册失败了,全部要重新填写会非常的困难。所以我们希望我在每次只要填写的时候,就知道这个选项我填对了没? 这个技术叫做Ajax

异步的js和XML
在不发生页面跳转,实现异步载入内容并改变内容的技术。
Ajax里面最重要的对象:
XmlHttpRequest对象
1、XmlHttpRequest对象的获取
2、XmlHttpRequest对象的方法:
open,
send,
3、XmlHttpRequest对象的属性:
readyState=4的时候,代表请求已经处理完毕,且响应已经就绪。
但是还要判断i请求是否成功了。

Ajax校验用户名

获取异步请求对象XmlHttpRequest
这个方法直接抽象出来,写在js的代码里面
在jsp页面的head标签里面。
在这里插入图片描述
在这里插入图片描述

如何获取对象xhr?
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

现在准备使用Ajax技术实现,当你输完用户名之后,准备输入用户密码的时候,就已经把用户名拿到数据库进行校验。
使用失去焦点事件onblur()

在用户名称这个这里绑定onblur()

前端代码:
在这里插入图片描述
在这里插入图片描述

后端服务器代码:

package com.rtl.login.servlet;

import com.rtl.bean.User;
import com.rtl.dao.UserDao;
import com.rtl.daoImpl.UserDaoImpl;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;

public class CheckUserNameServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String username = request.getParameter("username");
        UserDao userDao = new UserDaoImpl();
        User user = userDao.getUserByName(username);
        String msg = "";
        if(user == null){
            //没有重名
            msg = "√";
        }else{
            //重名了
            msg = "已存在,请更换!";
        }
        response.setContentType("text/html;charset=utf-8");
        response.getWriter().println(msg);

    }
}

3、配置文件web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
         version="5.0">

    <servlet>
        <servlet-name>login</servlet-name>
        <servlet-class>com.rtl.login.servlet.LoginServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>login</servlet-name>
        <url-pattern>/login</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>regist</servlet-name>
        <servlet-class>com.rtl.login.servlet.RegistServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>regist</servlet-name>
        <url-pattern>/regist</url-pattern>
    </servlet-mapping>


    <servlet>
        <servlet-name>checkUserName</servlet-name>
        <servlet-class>com.rtl.login.servlet.CheckUserNameServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>checkUserName</servlet-name>
        <url-pattern>/checkUserName</url-pattern>
    </servlet-mapping>
</web-app>

之前使用的原生的Xhr对象去发送异步请求。现在使用jQuery框架来实现。

使用jQuery来实现所有js的操作。

介绍如何使用jQuery:

1、导入jQuery的库
https://www.jq22.com/jquery-info122#google_vignette
在这里插入图片描述
在web目录右键
new directory
在这里插入图片描述
新建目录scripts,将.js文件拷贝进去
在这里插入图片描述
在代码里面引入
head标签里面写上这样的代码:

<script type="text/javascript" src="scripts/jquery.min.js"></script>

在这里插入图片描述
一般这个代码在jsp页面的比较靠前的位置。

jQuery语法1:
在这里插入图片描述
在这里插入图片描述

$(function (){
        alert("页面加载完毕!!!");
      });

只要你这个页面加载完毕就会执行。
因为window.onload()就是这个功能。

<script src="https://ajax.aspnetcdn.com/ajax/jquery/jquery-3.5.1.min.js"></script>

使用jQuery来实现功能。
在这里插入图片描述
点击这个按钮,将这个文字显示在alert来。

body标签:

 <input type="button" name="测试jQuery" id="b1">

head的script标签:

 $(function (){
        // alert("页面加载完毕!!!");
        $("#b1").click(function (){
          var msg = $("#span01").html();
          alert(msg);
        });
      });

在这里插入图片描述

实现功能:
在这里插入图片描述
上面的文字进入文本框里面来
在这里插入图片描述
在这里插入图片描述

将jQuery对象转为DOM对象:
在这里插入图片描述
#s1里面 s1是id

DOM对象转为jQuery对象
在这里插入图片描述

使用jQuery之前:
在这里插入图片描述
click方法在这里:
在这里插入图片描述

使用jQuery之后
在这里插入图片描述
click方法定义在这里:
在这里插入图片描述

使用jQuery实现将HTML代码和js代码解耦合了。

使用jQuery完成用户名的异步校验。

之前使用Ajax里面原生的XMLHttpRequest对象实现的。
来看看之前的实现方式:
在这里插入图片描述
script标签:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

使用jQuery对Ajax的支持技术

$.get $.post都是对$.ajax的实现

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值