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 プロトコルの仕組みについて少し誤解していると思います。画像は常に、Web ブラウザによる別のリクエストで自動的に取得されます (これは<script><style><img>およびその他のタグにも当てはまります)。したがって、基本的には、名前を表示する JSP ページを構築する必要があります。

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

viewimage は、画像を提供するサーブレットである可能性があります。

于 2012-10-02T08:43:35.150 に答える
1

あなたの質問は最初にJSPページに言及しているので、ここで達成したいことには少し混乱していますが、コントローラーの出力ストリームに直接画像を書き込んでいます。

Spring MVCでこのような処理を行う方法は、この「ドキュメント」のメインページへのリクエストに応じて、ドキュメントの属性をモデルに追加して、ビューレイヤーが出力できるようにし、リンクを含めることです。リクエストに応じて画像をレンダリングできるコントローラーへのdocumentIDを含むHTML(JSPページの出力内で画像を正確にレンダリングできないため)-HTMLドキュメント。

後半は順調に進んでいるようですが、前半のアドバイスが足りません。

于 2012-09-30T20:10:02.467 に答える