2010-10-24 66 views
1

我有一种情况,必须生成大量HTML,然后将其作为字符串JSONP样式返回。所以,最终的HTTP响应实际上是JavaScript的文字是这样的:如何将JSP响应链接到Servlet请求

myglobaljavascriptcallbackfunction(' < HTML这里> ');

由于HTML是复杂的,唯一明智的方法来构建它是一个JSP。所以我想要做的就是获取JSP的HTML输出并将其传递给一个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()); 
}

回答

3

使用<jsp:include>如果你想包括JSP Servlet的响应。

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


注意:您与getBytes()呼叫时使用隐式平台默认的字符编码一个潜在的字符编码的问题。

+0

这更接近,但它立即将HTML转储到ServletResponse。我需要能够处理JSP的输出之前,它被写入到响应删除空白和转义某些字符,因为HTML将被放入一个JavaScript字符串(顺便说一句,我在这里使用JSONP而不是XHR) – Lightbeard 2010-10-25 00:56:32

+1

在Servlet中使用带有空白三元素或者File或URLConnection的'Filter'来在本地打开JSP。阅读“XHR”作为“客户”。请求源实际上并不重要。我只是期待JS/ajax(XHR)。 – BalusC 2010-10-25 01:05:28

相关问题