我想使用Spring MVC 3显示图像 AND 一个字符串。 两者都是我使用Hibernate从数据库中检索到的POJO的实例变量。
@Entity
@Table(name = "document")
public class Document {
//id
@Column(name = "name")
private String name; // the String
@Basic(fetch = FetchType.LAZY)
@Column(name="content")
private byte [] image;
//getters setters
我想使用Spring MVC 3在<.jsp页面上显示图像 AND 显示它旁边的字符串。 目前我可以通过流式传输显示 ONLY 图片并将字符串打印到控制台,但这不是我想要的。 (当然我可以显示字符串,但如果我显示字符串,那么我无法显示图像。)我想在同一页面上显示两者,,彼此相邻。< / p>
@RequestMapping(value = "/displayDocument", method = RequestMethod.POST)
public void displayDocument(@RequestParam("documentId") String documentId, HttpServletResponse response) {
Document doc = documentService.get(Long.valueOf(documentId));
System.out.println(doc.getName());
if (doc.getImage() != null) {
response.setContentType("image/jpg");
try {
response.getOutputStream().write(doc.getImage());
response.getOutputStream().flush();
response.getOutputStream().close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
我不想相信没有任何聪明的解决办法来实现这个目标....
答案 0 :(得分:5)
我认为你对http协议的工作原理有点误解。 Web浏览器始终会在单独的请求中自动提取图像(这也适用于<script>
,<style>
,<img>
和其他一些标记。
所以基本上,你想构建一个JSP页面,你可以在其中显示名称和
<img src="/viewimage?id=${theDocumentId}"/>
。
viewimage可能是您提供图像的servlet。
答案 1 :(得分:1)
我对你想要在这里完成的事情感到有点困惑,因为你的问题首先是指一个JSP页面,但你是将图像直接写入Controller中的输出流。
我使用Spring MVC处理类似这样的事情的方法是,在对该“文档”的主页面的请求中,将文档的属性添加到模型中,以便您的视图层可以输出它,并包括包含documentID的HTML链接到控制器,该控制器可以响应请求呈现图像(因为您无法在JSP页面的输出中精确呈现图像 - HTML文档)。
看起来你正走在正确的轨道上,但是没有足够的细节给你第一部分的建议。
答案 2 :(得分:0)
您的代码是正确的。
在@ResponseBody
方法
displayDocument()
注释