【入门学习-用Servlet和Ajax技术,校验用户名是否存在】

最近在学web前端,发现有些东西特别容易忘。学vue之前想把js(包括一些前端框架)搞熟悉了。

原理就是用户在注册界面输入用户名,当文本框失去焦点后,触发post请求,把文本框里的内容传到服务器,服务器进行校验,将结果返回给前端页面。没有用数据库的知识,username的值直接随便在servlet里定义了一个,就是作为一个新手熟悉前后端数据交互。(其实是把csdn当作笔记本用了hahahahahahaha-------)

在IDEA里,启动了tomcat服务器,把前端页面命名为:“03_用户名校验.html”,后端用的servlet,在com.example.learning_tomcat包下创建个servlet类,类名为UserServlet,话不多说,上代码,注释都在里面。(所有的代码都在下面了)

前端部分:

<!DOCTYPE html>
<html lang="ch">
<head>
    <meta charset="utf-8">
    <title>注册-个人中心</title>
    //要引入jquery
    <script src="js/jquery-3.3.1.min.js"></script>
    <script>
        $(function(){
                //当用户名框失去焦点时,提交post请求
                $("#username").blur(function(){
                    //获取文本框里面的值
                    var username = $(this).val();
                    //post请求
                    $.post("userservlet",{username:username},function(data){
               
                   //期望服务器返回的是{"userExist":true,"msg":"这个用户已经存在了"}这种
                        if(data.userExist){
                            $("span").css("color","red");
                            $("span").html(data.msg);
                        }else{
                            $("span").css("color","green");
                            $("span").html(data.msg);
                        }
                    },"json");//这里要注意,最后一个type值是响应结果的类型json
                });


        });

    </script>
</head>
<body>
    <!--用了内联的样式随便美化了一下-->
    <div style="background-color: pink; margin: 0 auto; height: 200px; width: 420px; padding-top: 70px; border-radius: 20px 20px 20px">
        <div style="background-color: peachpuff; height: 120px; width:250px; margin: 0 auto;padding-top: 20px; border-radius: 15px 15px 15px">
            <!--就不提交表单了-->
            <form >
                用名:<input id="username" type="text" name="username" placeholder="请输入用户名"><br>
                密码:<input type="password" name="password" placeholder="请输入密码"><br>
                <input type="submit" value="注册"><span></span>
            </form>
        </div>

    </div>

</body>
</html>

后端部分:

在com.example.learning_tomcat包下创建个servlet类,类名为UserServlet,不在web.xml中配置,servlet3之后都能用注解@WebServlet("/userservlet")

package com.example.learning_tomcat;

//用的jackson的json解析器
import com.fasterxml.jackson.databind.ObjectMapper;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

@WebServlet("/userservlet")
public class UserServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request,response);
    }

    @Override
        //重写了post和get方法这里只用post,上面那个get方法不写了,直接调用这里的doGet方法
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取请求到的数据
        String username_json = request.getParameter("username");
        //设置响应数据的格式
        response.setContentType("text/html;charset=utf-8");
        //创建自定map,可以自定义对应关系的集合
        Map<String,Object> map = new HashMap<String,Object>();


        /*
            这里就不用数据库了,我们主要来学习ajax
            判断用户名是否是pcc
        */
        if("pcc".equals(username_json)){
            //注册用户名是pcc
            map.put("userExist",true);
            map.put("msg","这个用户已经存在了");
        }else {
            //注册用户名不是pcc
            map.put("userExist",false);
            map.put("msg","用户名可以使用");
        }

        //创建jackson的核心对象
        ObjectMapper mapper = new ObjectMapper();
        //将Map转换为json字符串
        mapper.writeValue(response.getWriter(),map);

//也可以用下面的方法
//        String json = mapper.writeValueAsString(map);
//        //将转换好的json响应到客户端浏览器
//        response.getWriter().write(json);

    }
}

启动tomcat服务器,运行结果示例:

 

 

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是基于 AJAX 技术,在用户注册校验用户名是否已存在的示例代码,仅供参考: register.html: ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>注册</title> <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js"></script> <script> $(document).ready(function(){ $("#username").blur(function(){ var username = $(this).val(); $.get("check_username.jsp", {"username":username}, function(result){ if(result.isExist){ $("#username-tip").html("该用户名已被注册"); $("#login-btn").attr("disabled", false); $("#register-btn").attr("disabled", true); }else{ $("#username-tip").html("该用户名可以使用"); $("#login-btn").attr("disabled", true); $("#register-btn").attr("disabled", false); } }, "json"); }); }); </script> </head> <body> <form> <label>用户名:</label> <input type="text" name="username" id="username"/> <span id="username-tip"></span><br/> <label>密码:</label> <input type="password" name="password" id="password"/><br/> <label>确认密码:</label> <input type="password" name="confirm-password" id="confirm-password"/><br/> <button type="submit" id="login-btn" disabled>登录</button> <button type="submit" id="register-btn" disabled>注册</button> </form> </body> </html> ``` check_username.jsp: ```jsp <%@ page language="java" contentType="application/json; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.io.*,java.util.*"%> <%@ page import="javax.servlet.*,javax.servlet.http.*"%> <%@ page import="java.sql.*"%> <% String username = request.getParameter("username"); boolean isExist = false; Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; try{ Class.forName("com.mysql.cj.jdbc.Driver"); String url = "jdbc:mysql://localhost:3306/db_name?useSSL=false&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai"; String user = "username"; String password = "password"; conn = DriverManager.getConnection(url, user, password); String sql = "SELECT * FROM user WHERE username=?"; pstmt = conn.prepareStatement(sql); pstmt.setString(1, username); rs = pstmt.executeQuery(); if(rs.next()){ isExist = true; } }catch(Exception e){ e.printStackTrace(); }finally{ try{ if(rs != null){ rs.close(); } if(pstmt != null){ pstmt.close(); } if(conn != null){ conn.close(); } }catch(Exception e){ e.printStackTrace(); } } Map<String, Object> resultMap = new HashMap<String, Object>(); resultMap.put("isExist", isExist); String resultJson = new com.alibaba.fastjson.JSONObject(resultMap).toJSONString(); out.print(resultJson); %> ``` 说明: - register.html 页面中,使用 jQuery 库实现了用户名输入框失去焦点事件的监听。当输入框失去焦点时,会向后端发送一个 GET 请求,请求地址为 check_username.jsp,携带的参数为用户名。 - check_username.jsp 页面中,接收到请求后,查询数据库中是否已存在该用户名。如果存在,则将 isExist 字段设置为 true,否则为 false,并将结果封装成 JSON 格式返回给前端。 - register.html 页面接收到后端返回的结果后,根据 isExist 字段更新页面提示信息,并设置登录和注册按钮的状态。如果用户名已存在,则启用登录按钮,禁用注册按钮;否则启用注册按钮,禁用登录按钮。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值