使用Spring MVC显示图像和文本(来自数据库)

时间:2012-09-30 19:28:49

标签: java image spring jsp

我想使用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();
            }
        }

    }

我不想相信没有任何聪明的解决办法来实现这个目标....

3 个答案:

答案 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()注释