我正在努力在页面上显示PDF文档的要求。该文档以字节数组的形式从后端服务中提取。我将此字节数组转换为outputstream,然后将其写入Sling Servlet中的响应中。 Servlet从OSGi服务获取字节数组。我想知道是否可以使用Sling模型而不是Sling Servlet。 Sling模型将调用OSGi服务来获取字节数组,但我不确定下一步如何。我使用
将响应对象注入了Sling模型@SlingObject
private SlingHttpServletResponse response;
但是不会成功。任何指导都会有所帮助。
预先感谢
答案 0 :(得分:1)
免责声明
在不知道您的特定要求的情况下,我建议您使用servlet而不是Sling模型。 Sling模型旨在表示存储库中的JCR资源,不能被滥用为servlet。
Sling模型与servlet具有不同的“生命周期”。虽然将Servlet实例化为OSGi服务/组件(在大多数情况下是单例),但可以在单个请求中多次实例化Sling模型。因此,请注意这种差异及其后果。
也就是说,您有两个选择可以将PDF编写为带有Sling模型的响应:
示例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()
。