2

我想使用 Spring MVC 3 显示图像字符串。两者都是我使用 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 页面上显示图像并在其旁边显示字符串。目前我只能通过流式传输并将字符串打印到控制台来显示图片,但这不是我想要的。(当然我可以显示字符串,但如果我显示字符串,那么我就无法显示图像。)我想在同一页面上显示两者,彼此相邻。

@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();
            }
        }

    }

我不想相信没有任何聪明的解决方案可以实现这一目标......

4

3 回答 3

5

我认为您对 http 协议的工作方式有点误解。图像总是由网络浏览器在单独的请求中自动获取(这也适用于<script><style><img>其他一些标签)。所以基本上,您想要构建一个显示名称的 JSP 页面,以及

<img src="/viewimage?id=${theDocumentId}"/>.

viewimage 可能是您提供图像的 servlet。

于 2012-10-02T08:43:35.150 回答
1

我对您想要在这里完成的事情感到有些困惑,因为您的问题首先是指 JSP 页面,但您正在将图像直接写入控制器中的输出流。

我使用 Spring MVC 处理此类事情的方式是,在对该“文档”的主页请求时,将文档的属性添加到模型中,以便您的视图层可以输出它,并在其中包含一个链接将包含 documentID 的 HTML 传递给控制器​​,该控制器可以呈现图像以响应请求(因为您无法在 JSP 页面的输出中准确呈现图像 - HTML 文档)。

看起来你在这后半部分的正确轨道上,但没有足够的细节给你关于第一部分的建议。

于 2012-09-30T20:10:02.467 回答
0

你的代码是正确的。

在方法上添加@ResponseBody注释displayDocument()

于 2013-09-27T11:47:17.783 回答