美文网首页
J2EE Ajax servlet 前后端数据交互

J2EE Ajax servlet 前后端数据交互

作者: robtomb_ | 来源:发表于2019-03-18 15:51 被阅读0次

    前端使用Ajax发送数据到servlet

     $.ajax({
            type:"post"//规定请求的类型(GET 或 POST),
            url:"urlservlet"//规定发送请求的 URL。默认是当前页面,
            success:fun(result,status,xhr) //当请求成功时运行的函数,
            error:fun(xhr,status,error) //如果请求失败要运行的函数。
            dataType:"json"预期的服务器响应的数据类型,
            contentType:""//发送数据到服务器时所使用的内容类型。默认是:"application/x-www-form-urlencoded"。
            beforeSend:fun(xhr) //发送请求前运行的函数。
            async:"true"//布尔值,表示请求是否异步处理。默认是 true。
        })
    
    
    

    contentType

    application/x-www-form-urlencoded
    这应该是最常见的 POST 提交数据的方式了。浏览器的原生 form 表单,如果不设置 enctype 属性,那么最终就会以 application/x-www-form-urlencoded 方式提交数据。请求类似于下面这样(无关的请求头在本文中都省略掉了):

    POST http://www.example.com HTTP/1.1
    Content-Type: application/x-www-form-urlencoded;charset=utf-8
    title=test&sub%5B%5D=1&sub%5B%5D=2&sub%5B%5D=3
    

    multipart/form-data
    这又是一个常见的 POST 数据提交的方式。我们使用表单上传文件时,必须让 form 的 enctyped 等于这个值。

    application/json

    POST http://www.example.com HTTP/1.1
    Content-Type: application/json;charset=utf-8
     
    {"title":"test","sub":[1,2,3]}
    

    text/xml

    POST http://www.example.com HTTP/1.1
    Content-Type: text/xml
     
    <?xml version="1.0"?>
    <methodCall>
        <methodName>examples.getStateName</methodName>
        <params>
            <param>
                <value><i4>41</i4></value>
            </param>
        </params>
    </methodCall>
    
    

    datatype

    类型:String
    预期服务器返回的数据类型。如果不指定,jQuery 将自动根据 HTTP 包 MIME 信息来智能判断,比如 XML MIME 类型就被识别为 XML。在 1.4 中,JSON 就会生成一个 JavaScript 对象,而 script 则会执行这个脚本。随后服务器端返回的数据会根据这个值解析后,传递给回调函数。
    可用值:

    • "xml": 返回 XML 文档,可用 jQuery 处理。
    • "html": 返回纯文本 HTML 信息;包含的 script 标签会在插入 dom 时执行。
    • "script": 返回纯文本 JavaScript 代码。不会自动缓存结果。除非设置了 - "cache" 参数。注意:在远程请求时(不在同一个域下),所有 POST 请求都将转为 GET 请求。(因为将使用 DOM 的 script标签来加载)
    • "json": 返回 JSON 数据 。
    • "jsonp": JSONP 格式。使用 JSONP 形式调用函数时,
      如 "myurl?callback=?" jQuery 将自动替换 ? 为正确的函数名,以执行回调函数。
    • "text": 返回纯文本字符串

    servlet使用out内置对象,实现sucess接受数据

    datatype = text

             response.setCharacterEncoding("utf-8");
             response.setContentType("text;charset=utf-8");
             PrintWriter out = response.getWriter();
            out.print(1);
            out.flush();
            out.close();
    

    datatype = json

            response.setCharacterEncoding("utf-8");
            response.setContentType("application/json;charset=utf-8");
    
            JSONObject jobj = new JSONObject();
            jobj.put("result",true);
            PrintWriter out = response.getWriter();
            out.append(jobj.toString());
            out.close();
            //sucess回调函数 alert(data.result);
    

    HTML

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>test</title>
        <script type="text/javascript" src="js/jquery-3.3.1/jquery-3.3.1.js"></script>
        <script type="text/javascript" src="js/test.js"></script>
    </head>
    <body>
    <form >
        邮件:<input type="text" name="email" id="email">
        密码:<input type="password" name="pwd" id="pwd">
        <input type="button" onclick="regsiter()" value="register">
    </form>
    </body>
    </html>
    

    JS

    function regsiter() {
        $.ajax({
            type:"post",
            url:"/BM/RegisterServlet",
            data:{
                email:$("#email").val(),
                pwd:$("#pwd").val()
            },
            success:function (data) {
                if( '1' == data ){
                    alert("注册成功,即将跳转登陆页面");
                    window.location.href="login.html";
                }else if( '0' == data ){
                    alert("邮箱已存在,请重新注册!");
                }
            },
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                console.log(XMLHttpRequest.status);
                console.log(XMLHttpRequest.readyState);
                console.log(textStatus);
            }
        })
    }
    

    Servlet

    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.io.PrintWriter;
    
    @WebServlet("/TestServlet")
    public class TestServlet extends HttpServlet {
      protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
          System.out.println(request.getParameter("email"));
          response.setCharacterEncoding("utf-8");
          response.setContentType("text;charset=utf-8");
          PrintWriter out = response.getWriter();
          out.print(1);
          out.flush();
          out.close();
      }
    
      protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
      }
    }
    
    
    

    相关文章

      网友评论

          本文标题:J2EE Ajax servlet 前后端数据交互

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