AEM::Writing 输出流到响应对象
AEM::Writing outputstream to response object
我正在处理在页面上显示 PDF 文档的要求。该文档以字节数组的形式从后端服务中拉取。我将此字节数组转换为输出流,然后将其写入 Sling Servlet 中的响应。 Servlet 从 OSGi 服务获取字节数组。我想知道我是否可以使用 Sling 模型而不是 Sling Servlet。 Sling 模型会调用 OSGi 服务来获取字节数组,但我不确定接下来的步骤。我使用
在 Sling 模型中注入了响应对象
@SlingObject
private SlingHttpServletResponse response;
但这行不通。任何指导都会有所帮助。
提前致谢
免责声明
在不知道您的具体要求的情况下,我建议您使用 servlet 而不是使用 Sling 模型。 Sling 模型是存储库中 JCR 资源的表示,不能被滥用为 servlet。
Sling 模型与 servlet 有不同的"life cycle"。虽然 servlet 被实例化为 OSGi service/component(在大多数情况下是单例),但 Sling 模型可以在单个请求期间实例化多次。所以请注意这种差异和后果。
也就是说,您有两种选择可以使用 Sling 模型将 PDF 写入响应:
- 吊索模型初始化期间
- 调用特定方法时
示例 1:
@Model(adaptables = SlingHttpServletRequest.class)
public class MyModel {
@SlingObject
private SlingHttpServletResponse response;
@OSGiService
private PDFService pdfService;
@PostConstruct
public void init() {
response.setContentType("application/pdf");
[... code to write PDF to response ...]
}
}
注解为@PostConstruct
的方法在注入所有注解字段后调用,这样您就可以运行您的初始化代码。
2 的示例:
@Model(adaptables = SlingHttpServletRequest.class)
public class MyModel {
@SlingObject
private SlingHttpServletResponse response;
@OSGiService
private PDFService pdfService;
public void writePDFtoResponse() {
response.setContentType("application/pdf");
[... code to write PDF to response ...]
}
}
显然,对于第二个示例,您必须使用某种代码来实例化模型并调用 writePDFtoResponse()
.
我正在处理在页面上显示 PDF 文档的要求。该文档以字节数组的形式从后端服务中拉取。我将此字节数组转换为输出流,然后将其写入 Sling Servlet 中的响应。 Servlet 从 OSGi 服务获取字节数组。我想知道我是否可以使用 Sling 模型而不是 Sling Servlet。 Sling 模型会调用 OSGi 服务来获取字节数组,但我不确定接下来的步骤。我使用
在 Sling 模型中注入了响应对象@SlingObject
private SlingHttpServletResponse response;
但这行不通。任何指导都会有所帮助。
提前致谢
免责声明
在不知道您的具体要求的情况下,我建议您使用 servlet 而不是使用 Sling 模型。 Sling 模型是存储库中 JCR 资源的表示,不能被滥用为 servlet。
Sling 模型与 servlet 有不同的"life cycle"。虽然 servlet 被实例化为 OSGi service/component(在大多数情况下是单例),但 Sling 模型可以在单个请求期间实例化多次。所以请注意这种差异和后果。
也就是说,您有两种选择可以使用 Sling 模型将 PDF 写入响应:
- 吊索模型初始化期间
- 调用特定方法时
示例 1:
@Model(adaptables = SlingHttpServletRequest.class)
public class MyModel {
@SlingObject
private SlingHttpServletResponse response;
@OSGiService
private PDFService pdfService;
@PostConstruct
public void init() {
response.setContentType("application/pdf");
[... code to write PDF to response ...]
}
}
注解为@PostConstruct
的方法在注入所有注解字段后调用,这样您就可以运行您的初始化代码。
2 的示例:
@Model(adaptables = SlingHttpServletRequest.class)
public class MyModel {
@SlingObject
private SlingHttpServletResponse response;
@OSGiService
private PDFService pdfService;
public void writePDFtoResponse() {
response.setContentType("application/pdf");
[... code to write PDF to response ...]
}
}
显然,对于第二个示例,您必须使用某种代码来实例化模型并调用 writePDFtoResponse()
.