Ajax案例

1. 完善brand-demo1中的注册功能

目标:当输入完用户名之后,光标离开文本框,就会去校验数据库是否存在用户名

在这里插入图片描述

1.1 修改register静态页面

采用前后端分离,将响应事件绑定到register.html中

<body>

<div class="form-div">
    <div class="reg-content">
        <h1>欢迎注册</h1>
        <span>已有帐号?</span> <a href="login.jsp">登录</a>
    </div>
    <form id="reg-form" action="/brand-demo1/registerServlet" method="post">

        <table>

            <tr>
                <td>用户名</td>
                <td class="inputs">
                    <input name="username" type="text" id="username">
                    <br>
                    <span id="username_err" class="err_msg" style="display: none">用户名已存在</span>
                </td>

            </tr>

            <tr>
                <td>密码</td>
                <td class="inputs">
                    <input name="password" type="password" id="password">
                    <br>
                    <span id="password_err" class="err_msg" style="display: none">密码格式有误</span>
                </td>
            </tr>
            
            <tr>
                <td>验证码</td>
                <td class="inputs">
                    <input name="checkCode" type="text" id="checkCode">
                    <img id="checkCodeImg"src="/brand-demo1/checkCodeServlet">
                    <a href="#" id="changeImg" >看不清?</a>
                </td>
            </tr>

        </table>

        <div class="buttons">
            <input value="注 册" type="submit" id="reg_btn">
        </div>
        <br class="clear">
    </form>

</div>

<script>
    document.getElementById("changeImg").onclick = function (){
        document.getElementById("checkCodeImg").src="/brand-demo1/checkCodeServlet?" + new Date().getMilliseconds();
    }
    document.getElementById("checkCodeImg").onclick = function (){
        document.getElementById("checkCodeImg").src="/brand-demo1/checkCodeServlet?" + new Date().getMilliseconds();
    }
    //1. 给用户名输入框绑定一个失去焦点事件
    document.getElementById("username").onblur=function () {
        //2. 发送ajax请求
        // 获取用户名的值
        var username = this.value;

        //2.1 创建核心对象
        var xhttp;
        if (window.XMLHttpRequest) {
            xhttp = new XMLHttpRequest();
        } else {
            // code for IE6, IE5
            xhttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
        //2.2 发送请求
        xhttp.open("GET", "http://localhost:8080/brand-demo1/selectUserServlet?username="+username);
        xhttp.send();

        //2.3 获取响应
        xhttp.onreadystatechange = function() {
            if (this.readyState == 4 && this.status == 200) {
                // 判断是true还是false
                if(this.responseText == "true"){
                    // 用户名存在
                    document.getElementById("username_err").style.display = "";
                }else {
                    // 用户名不存在,清除提示信息,也就是设置style属性
                    document.getElementById("username_err").style.display = null;
                }
            }
        };
    }
</script>
</body>

2. 后端代码修改

2.1 修改LoginFilter过滤器

在urls访问路径中添加"/register.html""/selectUserServlet",避免被过滤器拦截

// 判断访问资源路径是否和登录注册相关
	String[] urls = {"/login.jsp", "/imgs/", "/css/", "/loginServlet", "/register.jsp", "/registerServlet", "/checkCodeServlet", "/selectUserServlet", "/register.html"};
2.2 创建SelectUserServlet

接收request传来的username,创建service对象调用selectByName(username)方法,返回一个布尔值

@WebServlet("/selectUserServlet")
public class SelectUserServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1. 接收用户名
        String username = req.getParameter("username");

        //2. 调用service查询User对象
        boolean flag = new UserService().selectByName(username);

        //3. 响应一个标记
        resp.getWriter().write("" +flag);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req, resp);
    }
}
2.3 service层
    public boolean selectByName(String username){
        //2. 获取SqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();

        //3. 获取UserMapper
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);

        //4. 判断用户名是否存在
        User u = mapper.selectByUsername(username);

        sqlSession.close();

        return u == null;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值