美文网首页
AJAX在JSP和Servlet中的原理

AJAX在JSP和Servlet中的原理

作者: 尽人事听天命_6c6b | 来源:发表于2019-06-21 15:38 被阅读0次

    jsp中的代码:
    <script src="js/jquery-3.3.1.min.js" type="text/javascript"></script>
    <script type="text/javascript">
    (function() { //需求:判断用户名是否可用,采用原生ajax实现 //1.添加失去焦点事件 var req;("#username").blur(
    function() {
    //2.创建XMLHttpRequest对象
    if (window.XMLHttpRequest) {
    //如果XMLHttmRequest为true 为非ie浏览器
    req = new XMLHttpRequest();
    } else {
    //如果XMLHttmRequest为false 为ie浏览器
    req = new ActiveXObject("Microsoft.XMLHTTP");
    }
    //3.要发送的地址
    var url = "loginServlet?flag=validate";
    //4.调用XMLHttpRequest对象的open方法
    /** open有三个常用的参数
    参数1:请求的方式(get、post)
    参数2:请求的路径(url)
    参数3:同步(false)异步(true)
    /
    req.open("post", url, false);
    //设定一个请求头信息
    req.setRequestHeader("Content-Type",
    "application/x-www-form-urlencoded");
    //5.设定回调函数
    req.onreadystatechange = updatePage;
    //6.发送请求
    /
    *send方法参数可有可无
    如果没有参数则代表没有值发往后台
    如果有参数则代表有值传递到后台进行处理
    */
    req.send("username="+("#username").val()); }); //回调函数,接收后台的值,页面产生对应的变化 function updatePage() { if (req.readyState == 4) { if (req.status == 200){ var result = req.responseText; if(result=="true"){("#sp1").html("用户名重复");
    }else{
    $("#sp1").html("用户名不重复");
    }
    }
    }
    }
    });
    </script>
    <body>

    <form action="loginServlet" method="post">
        用户名:<input type="text" name="username" id="username"> 
        <span id="sp1"></span>
        <br />      
        密码 :<input type="password" name="password"> 
        <br /> 
        <input type="submit" value="提交">
    </form>
    

    </body>

    Servlet中的代码:
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    request.setCharacterEncoding("utf-8");
    response.setCharacterEncoding("utf-8");
    //获取标志位flag
    String flag = request.getParameter("flag");
    if ("validate".equals(flag)) {
    // ajax唯一性校验
    String username = request.getParameter("username");
    boolean val = LoginServiceImpl.getInstance().vali(username);
    /**
    * ajax请求的数据类型
    * 1.text(存文本)
    * 2.xml
    * 3.json格式
    */
    //设置文本类型
    response.setContentType("text/html");
    PrintWriter writer = response.getWriter();
    writer.print(val);
    writer.close();
    } else {
    //正常form表单登录
    // 获取表单参数
    String username = request.getParameter("username");
    String password = request.getParameter("password");
    User u = LoginServiceImpl.getInstance().doLogin(username, password);
    if (u != null) {
    // 证明有用户
    } else {
    }
    }
    load()方法提供三个参数:
    1.url地址 (必须存在)
    2.data:要发送的数据( 用来发送key/value的值 可有可无)
    3.callback:回调函数(可有可无)
    load作用:通过ajax请求从服务器加载数据,把返回的数据放到指定的元素中
    代码
    (1)load只写一个参数 NewFile.html代表一个静态页面中的内容
    <script type="text/javascript">
    (function() {("#btn").click(function() {
    ("#text").load("NewFile.html"); //获取页面所有内容("#text").load("NewFile.html #demo") //获取页面部分内容
    });
    });
    <body>
    <input type="button" value="ajax获取" id="btn">
    <div id="text"></div>
    </body>
    (2)load写三个参数
    <script type="text/javascript">
    (function(){("#btn").click(function(){
    $("#box1").load("text.jsp",{"username":"张三"},function(responseTest,status,xhr){
    alert(responseTest); //返回的文本内容
    alert(status); //响应的Http状态(返回是scuess还是error)
    alert(xhr.responseText) //返回的文本内容
    alert(xhr.readyState);//(4)判断服务器是否完全接收到请求
    alert(xhr.status) //(200)代表服务器返回的状态码,完全正确响应
    alert.(xhr.statusText)
    })
    });
    });
    </script>

    <body>
    用户:<input type="button" value="ajax获取" id="btn">
    <div id="box1"></div>
    </body>

    (3)ajax最终版本
    (post写法)
    <script type="text/javascript">
    (function() {("#username").blur(function() {
    .post("loginServlet?flag=validate&username="+("#username").val(),
    function(data){//data接收来自后台相应的数据 data是变量
    if(data == "true"){
    ("#sp1").html("重复"); }else{("#sp1").html("不重复");
    }
    })
    });
    });
    </script>
    (ajax写法)
    <script type="text/javascript">
    (function() {("#username").blur(function() {
    //method传递方式,url地址必须要有
    .ajax({ type:"post", url:"loginServlet?flag=validate", data:"username="+("#username").val(),
    success:function(data){
    if(data=="true"){
    ("#sp1").html("重复"); }else{("#sp1").html("不重复");
    }
    /* for(var i = 0 ;i<data.length ; i++){
    alert(data[i].username)
    alert(data[i].age)
    } */
    }
    })
    });
    });
    </script>

    <body>
    <form action="loginServlet" method="post">
    用户名:<input type="text" name="username" id="username">
    <span id="sp1"></span>
    <br />
    密码 :<input type="password" name="password">
    <br />
    <input type="submit" value="提交">
    </form>
    </body>
    (ajax 中JSON请求数据类型的形式最常用)
    /**
    * ajax请求的数据类型
    * 1.text(存文本)
    * 2.xml
    * 3.json格式
    */
    response.setContentType("text/html");
    PrintWriter writer = response.getWriter();
    writer.print(val);
    writer.close();
    //反一个json格式
    response.setContentType("application/json");
    PrintWriter writer = response.getWriter();
    writer.print("[{"username":"xc","age":12},{"username":"xsdd","age":15},{"username":"xdsad","age":22}]");

    相关文章

      网友评论

          本文标题:AJAX在JSP和Servlet中的原理

          本文链接:https://www.haomeiwen.com/subject/lgzjqctx.html