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();

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