【问题标题】:How to chain JSP response to Servlet request如何将 JSP 响应链接到 Servlet 请求
【发布时间】:2011-04-29 23:42:24
【问题描述】:

我有一种情况,我必须生成大量 HTML,然后将其作为字符串 JSONP 样式返回。所以最终的 HTTP 响应实际上是这样的 javascript 文本:

myglobaljavascriptcallbackfunction('');

由于 HTML 很复杂,构建它的唯一合理方法是使用 JSP。所以我想做的是获取 JSP 的 HTML 输出并将其通过管道传送到一个 servlet,然后该 servlet 可以用必要的 javascript 包装 HTML。

以下是我迄今为止的最佳猜测。不走运 - 来自 Servlet 的 HTTP 响应是 myglobaljavascriptcallbackfunction('');,没有任何 JSP 的 HTML。

JSP


<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<jsp:forward page="/MyServlet" />
<div>
   <span>Imagine some really complicated stuff here</span>
<div>

Servlet

protected void doGet(...) {

    String pre = "myglobaljavascriptcallbackfunction('";
    String post = "');";

    OutputStream out = response.getOutputStream();
    out.write(pre.getBytes());

    // transfer request to response
    InputStream in = request.getInputStream();
    byte[] buf = new byte[1024]; 
    int count = 0; 
    while ((count = in.read(buf)) > 0) { 
        out.write(buf, 0, count);
        // TODO: escape single quote chars
    }

    out.write(post.getBytes());
}

【问题讨论】:

    标签: java jsp servlets jsonp


    【解决方案1】:

    如果您想在 JSP 中包含 Servlet 响应,请使用 &lt;jsp:include&gt;

    如果您想在 Servlet 中包含 JSP 响应,请使用RequestDispatcher#include()。这就是你想要的。但是,您应该只需将 XHR 请求 URL 更改为指向 Servlet 而不是 JSP。


    注意:getBytes() 调用存在潜在的字符编码问题,该调用隐式使用平台默认字符编码。

    【讨论】:

    • 这更接近,但它会立即将 HTML 转储到 ServletResponse。我需要能够在将 JSP 的输出写入响应之前处理它以删除空格并转义某些字符,因为 HTML 将全部放入 javascript 字符串中(顺便说一句,我在这里使用的是 JSONP 而不是 XHR)
    • 在 servlet 中使用带空格的 FilterFileURLConnection 在本地打开 JSP。将“XHR”读作“客户端”。请求的来源实际上并不重要。我只是期待 JS/ajax (XHR)。
    猜你喜欢
    • 2018-07-11
    • 2022-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-25
    • 1970-01-01
    相关资源
    最近更新 更多