У меня есть ситуация, когда мне нужно сгенерировать много HTML, а затем вернуть его в виде стиля JSONP. Таким образом, в конечном итоге ответ HTTP на самом деле будет Javascript текста так:Как связать ответ JSP с запросом сервлета
myglobaljavascriptcallbackfunction('
< HTML здесь > ');
Поскольку HTML является сложным, единственным разумным способом построить это с JSP. Поэтому я хотел бы сделать вывод HTML из JSP и передать его сервлету, который затем может обернуть HTML с необходимым javascript.
Ниже приведена моя лучшая догадка. Не повезло - HTTP-ответ от сервлета - myglobaljavascriptcallbackfunction('');
без какого-либо HTML-кода JSP.
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());
}
Это ближе, но сразу же выгружает HTML в ServletResponse. Мне нужно иметь возможность обрабатывать выходные данные JSP до того, как он будет записан в ответ, чтобы удалить пустое пространство и избежать определенных символов, поскольку HTML будет помещен в строку javascript (кстати, я использую JSONP здесь не XHR) – Lightbeard
Используйте «Фильтр» с промежуточным тримером или «Файл» или «URLConnection» в сервлет, чтобы открыть JSP локально. Прочтите «XHR» как «Клиент». На самом деле источник запроса не имеет значения. Я просто ожидал JS/ajax (XHR). – BalusC