0

我有一个带有表单的 index.JSP 和一个 img 标签。表单指的是构建图表的 servlet,将其设置在会话中并重定向回index.jsp(因此可以将其作为 ServletOutputStream 读取BytesFromSession)。图片未显示。在 web.xml 中,我映射了 ControllerURL 的 urlPattern。

index.jsp:


...
<img src = "/BytesFromSession" > </img>

控制器.java


public class Controller extends HttpServlet {
...

private HttpSession session;

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

outputStream = response.getOutputStream();

JFreeChart c = buildChart(); // builds the JFreeChart

session = request.getSession(true);
session.setAttribute("tbl", c);

response.sendRedirect( "index.jsp" );
}

BytesFromSession.java


public class BytesFromSession extends HttpServlet {

private ServletOutputStream outputStream;

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

response.setContentType("image/jpeg");

try {

    outputStream = response.getOutputStream();

    JFreeChart c = (JFreeChart) request.getSession().getAttribute("tbl");
    ChartUtilities.writeChartAsJPEG(outputStream, c, 300, 400); // <---- writing table as JPEG to outputStream

} finally {
 outputStream.close();
  }
 }

}

编辑

将图表保存到文件并重定向回 index.jsp 有帮助。仍然不确定为什么没有将其保存在会话中。

4

1 回答 1

0

Use

RequestDispatcher view = request.getRequestDispatcher("index.jsp");
view.forward(request,response);

instead of

response.sendRedirect( "index.jsp" );

Edit

I changed the method name processRequest to doGet in BytesFromSession.java and simply removed the / from img tag like <img src="BytesFromSession">

BytesFromSession is mapped in web.xml

<servlet>
      <servlet-name>BytesFromSession</servlet-name>
      <servlet-class>com.test.BytesFromSession</servlet-class>
    </servlet>

    <servlet-mapping>
      <servlet-name>BytesFromSession</servlet-name> 
      <url-pattern>/BytesFromSession</url-pattern> 
  </servlet-mapping>

I could get the image from chart stored in session that way without having it to be saved to a path. Hope that helps you too.

于 2012-11-05T19:46:05.390 回答