Как связать ответ JSP на запрос сервлета - PullRequest
1 голос
/ 25 октября 2010

У меня есть ситуация, когда мне приходится генерировать много HTML, а затем возвращать его в виде строкового стиля JSONP. Таким образом, возможный HTTP-ответ на самом деле будет текстом javascript следующим образом:

myglobaljavascriptcallbackfunction(' ');

Поскольку HTML сложен, единственный разумный способ его создания - это JSP. Поэтому я хотел бы взять вывод HTML JSP и передать его сервлету, который затем может обернуть HTML необходимым JavaScript.

Ниже мое лучшее предположение на данный момент. Не повезло - HTTP-ответ сервлета - myglobaljavascriptcallbackfunction(''); без HTML-кода JSP.

* JSP 1013 *


<%@ 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());
}

1 Ответ

3 голосов
/ 25 октября 2010

Используйте <jsp:include>, если хотите включить Ответ сервлета в JSP.

Используйте RequestDispatcher#include(), если хотите include JSP-ответ в сервлете.Это то, что вы хотите.Однако вам нужно всего лишь изменить URL-адрес запроса XHR, чтобы он указывал на сервлет вместо JSP.


Примечание: у вас есть потенциальная проблема с кодировкой символов при вызове getBytes(), который неявно используеткодировка символов по умолчанию для платформы.

...