2010-10-24 65 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

相關問題