我必须在转发的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
答案 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");
}
}
然后页面中可能只有常规的图像标记。