如何将图表从我的 servlet 转发到 jp



我构建了一个servlet,它使一些对数据库的查询获取一些信息并将其转发到jsp页面。

除了这些信息之外,现在我想包括一个请求,一个在 servlet 中创建的图表。

Servlet 代码:

 public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 . More Servlet code..
 .
 .
 . 
 case "Charts": {
            String QueryStatus = "select distinct NodeStatus from nodes;";
            Operations oper = new Operations();

            ArrayList<?> ListStatus = oper.getList(QueryStatus);              

            request.setAttribute("ListStatus", ListStatus);

到目前为止,一切正常,但是一旦我添加了以下代码:

            JFreeChart Chart = null;
            BACENGQueryDatabases DataChart = new BACENGQueryDatabases();
            Chart = DataChart.GetChart("select Name, StNode from controls;");
            if (Chart != null) {
                int width = 500;
                int height = 350;
                final ChartRenderingInfo info = new ChartRenderingInfo(new    StandardEntityCollection());
                response.setContentType("image/png");
                OutputStream out = response.getOutputStream();
                ChartUtilities.writeChartAsPNG(out, Chart, width, height, info);
            }

图表已打印,但不会打印其他内容。请求调度程序被截断。

          RequestDispatcher rd = request.getRequestDispatcher("/WEB-INF/Charts.jsp"); //Set page to redirect data
            rd.forward(request, response);// Forward data to the next page
            break;
        }

有没有办法转发图表,就像我正在使用(request.setAttribute("ListStatus",ListStatus(;)将在同一 JSP 页面上使用。

我拒绝使用将图表打印到文件然后在jsp上使用它,因为I/O性能,因为将创建许多图表。

单个响应只能具有一种内容类型。它要么是普通的HTML页面(类型= text/html(要么是图表(类型=image/png(,但不能两者兼而有之。

当你转发到一个JSP时,我假设你想建立一个包含图表(实际上是png图像(的HTML页面。您将图像包含在带有 <img> 标记的 HTML 文件中。此时您有两种可能性:

  • 一个简单而经典的<img>,其中源是 URL。浏览器将在您提供的网址上发出第二个请求,然后您直接发送图像。简单而强大,但需要 2 个请求。
  • Base 64 嵌入映像。src属性包含 base64 编码的图像,类似于

    src="data:image/png;base64,__base64 encoded image__"
    

    您保存了一个请求,但如果图像很大,则编码的大小将增加 30% 到 40%。而且并非所有浏览器都能正确理解它。您应该查看另一篇文章 嵌入 Base64 图像 了解更多细节。

相关内容

  • 没有找到相关文章

最新更新