在转发的JSP中显示图像和数据

时间:2012-12-05 16:33:28

标签: java jsp servlets

我必须在转发的JSP中显示一些数据和图像

要显示数据,我已在属性部分

中设置了值
request.setAttribute("data", mydata);

我有流中的图像(InputStream),我也可以将其保存为文件,但想知道是否有更好的方法将其直接流式传输到JSP页面。

如果我使用servlet临时目录“javax.servlet.context.tempdir”保存它,那么我无法通过

访问它
<img src="location of the file set in attribute section"/>

其他人尝试过的首选方法是什么?

使用Tomcat 7.0.33 / Java 7

1 个答案:

答案 0 :(得分:1)

HTTP本身并不允许您流式传输图像,但您可以通过将数据从InputStream传输到HttpServletResponse.getOutputStream()来实现此目的。

你可以有一个映射到图像文件的servlet,比如......

<servlet>
    <servlet-name>ImgServlet</servlet-name>
    <servlet-class>ImgServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>ImgServlet</servlet-name>
    <url-pattern>*.jpg</url-pattern>
</servlet-mapping>

然后servlet类本身可以处理图像数据流而无需将其保存到文件中。有点像...

class ImgServlet extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String imageName = request.getRequestURI();
        InputStream data = service.lookUpImage(imageName); //whatever
        IOUtils.copy(data, response.getOutputStream()); // Apache Commons IO
        response.setContentType("image/jpeg");
    }
}

然后页面中可能只有常规的图像标记。