gpt4 book ai didi

java - 在 AEM 的 Servlet 中获取 JSP 输出

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:09:33 24 4
gpt4 key购买 nike

在 CQ 中,我们需要在 servlet 中处理 jsp,然后将结果与我们从服务器获得的其他结果组合起来,然后再写回浏览器。

下面的代码几乎就是我们所需要的,只是它在jsp处理后将结果写回浏览器。

RequestDispatcher dispatcher = request.getRequestDispatcher(resource);
dispatcher.forward(request, response);

我们尝试使用模拟响应如下:

RequestData requestData = new RequestData(slingRequestProcessor, request, mockResponse);
SlingHttpServletRequest slingRequest = requestData.getSlingRequest();
SlingHttpServletResponse slingResponse = requestData.getSlingResponse();
RequestDispatcher dispatcher = request.getRequestDispatcher(resource);
dispatcher.forward(slingRequest, slingResponse);

但我们遇到了问题。

最佳答案

首先 - 根据您的描述,听起来您想使用 requestDispatcher.include 而不是 requestDispatcher.forward

关于响应内容的包含,您传递给 requestDispatcher.include 调用的响应可能是您自己创建的对象,它将其输出写入字符串而不是将其返回到浏览器。以下内容可能是合适的:

final ServletOutputStream outputStream = new ServletOutputStream() {
public void write(int b) throws IOException {
outputBuffer.append((char) b);
}
};

SlingHttpServletResponseWrapper responseWrapper = new SlingHttpServletResponseWrapper(response) {
public ServletOutputStream getOutputStream() {
return outputStream;
}

public PrintWriter getWriter() throws IOException {
return new PrintWriter(outputBuffer);
}

public SlingHttpServletResponse getSlingResponse() {
return super.getSlingResponse();
}
};

在包含 outputStream.toString() 之后应该提供资源请求的执行结果。

关于java - 在 AEM 的 Servlet 中获取 JSP 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30749596/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com