js请求servlet并获取返回值流程

servlet返回数据的方法

方法

js请求:

      $.ajax(
       {
          type: "post",
          url: "ctpicture.do?name="+name+"&password="+pwd+"&height="+height+"&age="+age,
          //data: "{'sLoginName':'123','sPassword':'3456'}",//
          contentType: "application/json; charset=utf-8",
          dataType: "text",
          success: function (result) {
                if('1'==result){
                alert(result+"22222");
                    $("#errorMesage").val("注册成功!");
                }else if('2'==result){
                alert(result+"333");
                    $("#errorMesage").val("该名称已被使用!");
                }
          },
          error: function (err) {
             $("#errorMesage").val("注册失败!");
          }
       }
     );
  }

1. RequestDispatcher.forward()界面跳转

    HttpSession  session =request.getSession();
        Object obj = session.getAttribute (LoginConstants.LOGIN_USER);
        if (null != obj)
        {
            session.removeAttribute (LoginConstants.LOGIN_USER);
        }
        /**
        * 方法一:数据放路径里(只有少量基本数据可用)
        */
        RequestDispatcher dispatcher = request.getRequestDispatcher("clearUserInfo.html?flag=1");
       /**
        * 方法二:数据放到request中
        */
        //我们要传到前台的实体
         Object result = new Object();
         //转换用的实体
        ObjectMapper mapper = new ObjectMapper();  
        //writeValueAsString就是把实体转换成了json字符串;
        request.setAttribute("returnMessage", mapper.writeValueAsString(result));
        dispatcher.forward(request, response); 
  •  

2. 以字符流或字节流输出返回值,前台在接收是要以字符串的形式,如Ajax的datatype需是“text”

,返回json字符串形式…

            PrintWriter out = response.getWriter();
            //或:ServletOutputStream out = response.getOutputStream();
            //但两个不要一起用!
            out.write("[{\"id\":1,\"name\":default}]");
            out.flush();
            out.close();       

PrintWriter与ServletOutputStream的区别如下:
1. PrintWriter是以字符为单位,对所有的信息进行处理,而ServletOutputStream仅对二进制的资料进行处理。
2. PrintWriter在输出字符文本时内部需要将字符串转换成某种字符集编码的字节数组,使用他的好处就是不需要自己来完成从字符串到字节数组的转换。 转换的字符集编码是通过设置setContentTpye或setCharacterEncoding或setLocale等方法实现的;使用ServletOutputStream对象直接从一个字节输入流中读取出来,然后再原封不动的输出到客服端。
3. 这两个方法相互排斥,只能调用其一,如果要用,则要在换方法之前调用flush(),将缓冲区数据冲掉。

3. ObjectMapper写返回值

    // 输出信息
    PrintWriter out = response.getWriter();
    Object result = new Object();
    // jackson核心对象
    ObjectMapper objectMap = new ObjectMapper();
    objectMap.writeValue(out, result );

4 如果后台返回乱码,则设置编码

  repose.setContentType("text/html;charset=UTF-8");
              out = repose.getWriter();

这样设置后前台就不会乱码了。

 

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值