【问题标题】:HttpServletResponse shall send data without printing them to client screenHttpServletResponse 应发送数据而不将它们打印到客户端屏幕
【发布时间】:2017-06-20 17:42:14
【问题描述】:

我正在构建一个 Web 应用程序。

此 Web 应用程序的一部分是从客户端到服务器的 ajax 请求:

$.ajax({
      url: url,
      type: "get", 
      data: { 
        id: ID, 
      },
      success: function(response) {
        //parameter response contains the data sent back from the server
        //some stuff is done to this data in the rest of this function     
      },
      error: function() {
        alert("An error occurred.");
      }
  });

在服务器端,我使用 servlet 来处理请求。 一旦收到来自客户端的数据,并且已经应用​​了一些业务逻辑,我想发回一个简单的字符串。

然后,数据字符串将由上述 ajax 函数的以下部分处理:

 success: function(response) {
     //parameter response contains the data sent back from the server
     //some stuff is done to this data in the rest of this function     
 },

我的问题是这样的:

我知道如何向客户端的屏幕发送数据:

 PrintWriter out = response.getWriter();
 out.println(data);

但是,我不知道如何将数据(不是到屏幕,而是)发送到 ajax 函数,以便该 ajax 函数可以处理从服务器接收到的数据。

“HttpServletResponse”类的java对象“response”只提供“sendError()”等方法。

我想发送数据而不将它们打印到屏幕上。

我该怎么做?

******************************更新********************* ***********************

我尝试使用 PrintWriter 将字符串发送回 ajax 函数:

PrintWriter out = response.getWriter();
out.println("test");

...然后我想在警报消息中输出文本“test”:

$.ajax({
      url: url,
      type: "get", 
      data: { 
        latitude: location.lat(), 
        longitude: location.lng(), 
        radius: 10
      },
      success: function(response) {
        alert(response);
      },
      error: function() {
        alert("Ein Fehler beim Abfragen der Daten ist aufgetreten.");
      }
  });

但不是输出带有“测试”内容的警报消息,而是输出包含发送 ajax 调用的 JSP 页面的整个 html 代码!

【问题讨论】:

    标签: java servlets httpresponse


    【解决方案1】:

    没有任何东西被特别发送到“屏幕”,这完全是关于请求的来源。
    如果点击一个链接,浏览器发起请求,浏览器接收response并处理输出显示。

    在这种情况下,request 将来自您的 ajax 调用,因此 ajax 调用将处理请求,并且内容将在响应的.requestText 属性中接收。

    您可能希望确保 HttpServletResponse 对象的响应内容类型设置为“text/html”,但既然您要使用 ajax,您不妨考虑一个步骤也可以使用 JSON。

    【讨论】:

    • 所以,我只是使用 PrintWriter 将数据发回( PrintWriter out = response.getWriter(); out.println(data); )?
    • 我对此进行了测试(请参阅上面的更新问题)......但是,我只是获取 JSP 页面的 html 代码而不是数据
    • 您是否将请求转发到 JSP 页面?
    • 如果您正在编写一个 servlet 来为 ajax 调用提供服务,不涉及 JSP 页面,您正在编写原始内容,直接返回。跳过任何请求转发,因为您通过 .getWriter() 或 getOutputStream() 直接将内容发送回
    • 是的,传递给 ajax-request 的 url 是包含 html 代码的 JSP 页面......我想这不是一个好主意?
    猜你喜欢
    • 2011-11-09
    • 2012-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-27
    • 2012-05-22
    • 1970-01-01
    相关资源
    最近更新 更多