Java Servlet 图表

来源:这里教程网 时间:2026-02-17 21:37:15 作者:

Java Servlet 图表教程展示了如何使用 JFreeChart 创建图表并将其提供给 Servlet。 该示例生成一个饼图。

Servlet是 Java 类,可响应特定类型的网络请求-最常见的是 HTTP 请求。 Servlet 用于以 Java 实现 Web 应用。 它们在 Tomcat 或 Jetty 之类的 servlet 容器中运行。 如今,Java Web 程序员使用基于 Servlet 构建的框架来开发应用。

Jetty 是 HTTP 服务器和 Servlet 容器,能够通过独立或嵌入式实例提供静态和动态内容。

JFreeChart 是流行的 Java 图表库。 它允许创建各种交互式和非交互式图表。

Java Servlet 图表示例

下面的示例使用 JFreeChart 库创建一个饼图,并将其提供给 Java Servlet。

pom.xml

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0"         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0         http://maven.apache.org/xsd/maven-4.0.0.xsd">    <modelVersion>4.0.0</modelVersion>    <groupId>com.zetcode</groupId>    <artifactId>servletchart</artifactId>    <version>1.0-SNAPSHOT</version>    <packaging>war</packaging>    <properties>        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>        <maven.compiler.source>12</maven.compiler.source>        <maven.compiler.target>12</maven.compiler.target>    </properties>    <dependencies>        <dependency>            <groupId>javax.servlet</groupId>            <artifactId>javax.servlet-api</artifactId>            <version>4.0.1</version>            <scope>provided</scope>        </dependency>        <dependency>            <groupId>org.jfree</groupId>            <artifactId>jfreechart</artifactId>            <version>1.5.0</version>        </dependency>    </dependencies>    <build>        <plugins>            <plugin>                <groupId>org.apache.maven.plugins</groupId>                <artifactId>maven-war-plugin</artifactId>                <version>3.2.2</version>            </plugin>            <plugin>                <groupId>org.eclipse.jetty</groupId>                <artifactId>jetty-maven-plugin</artifactId>                <version>9.4.14.v20181114</version>            </plugin>        </plugins>    </build></project>

javax.servlet-api依赖性是用于构建 Java Servlet 的库。 jfreechart是 JFreeChart 库的依赖项。

maven-war-plugin收集 Web 应用的所有工件依赖项,类和资源,并将它们打包到 Web 应用存档(WAR)中。 jetty-maven-plugin允许我们与mvn jetty:run一起运行嵌入式 Jetty 服务器。

pom.xmlsrc├───main│   ├───java│   │   └───com│   │       └───zetcode│   │           └───web│   │                   DoChart.java│   ├───resources│   └───webapp│           index.html└───test    └───java

这是项目结构。

webapp/index.html

<!DOCTYPE html><html>    <head>        <title>Chart</title>        <meta name="viewport" content="width=device-width, initial-scale=1.0">        <meta charset="UTF-8">    </head>    <body>        <a href="showChart">Show chart</a>    </body></html>

在index.html文件中,我们有一个调用 servlet 的链接,该 servlet 服务于饼图。

com/zetcode/web/DoChart.java

package com.zetcode.web;import org.jfree.chart.ChartFactory;import org.jfree.chart.ChartUtils;import org.jfree.chart.JFreeChart;import org.jfree.data.general.DefaultPieDataset;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;import java.io.OutputStream;@WebServlet(name = "DoChart", urlPatterns = {"/showChart"})public class DoChart extends HttpServlet {    @Override    protected void doGet(HttpServletRequest request, HttpServletResponse response)            throws IOException {        response.setContentType("image/png");        OutputStream os = response.getOutputStream();        JFreeChart chart = getChart();        int width = 500;        int height = 350;        ChartUtils.writeChartAsPNG(os, chart, width, height);    }    public JFreeChart getChart() {        var dataset = new DefaultPieDataset();        dataset.setValue("Croatia", 22);        dataset.setValue("Bohemia", 34);        dataset.setValue("Bulgaria", 18);        dataset.setValue("Spain", 5);        dataset.setValue("Others", 21);        JFreeChart chart = ChartFactory.createPieChart("Popular destinations",                dataset, true, false, false);        chart.setBorderVisible(false);        return chart;    }}

DoChart Servlet 将饼图返回给客户端。

@WebServlet(name = "DoChart", urlPatterns = {"/showChart"})

@WebServlet批注将具有showChart URL 模式的请求映射到DoChart servlet。

@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response)        throws IOException {

该请求是一个 GET 请求,因此我们以doGet()方法为其提供服务。

response.setContentType("image/png");

该图表用作 PNG 格式的图像; 因此,我们将响应的内容类型设置为image/png。

OutputStream os = response.getOutputStream();

从response对象获得OutputStream。 我们通过写 servlet 的OutputStream将图表提供给客户端。

ChartUtils.writeChartAsPNG(os, chart, width, height);

ChartUtils.writeChartAsPNG()将图表转换为 PNG 文件,并将其写入输出流。

public JFreeChart getChart() {    var dataset = new DefaultPieDataset();    dataset.setValue("Croatia", 22);    dataset.setValue("Bohemia", 34);    dataset.setValue("Bulgaria", 18);    dataset.setValue("Spain", 5);    dataset.setValue("Others", 21);    JFreeChart chart = ChartFactory.createPieChart("Popular destinations",            dataset, true, false, false);    chart.setBorderVisible(false);    return chart;}

在getChart()方法中,我们生成图表。 DefaultPieDataset包含饼图的数据。

JFreeChart chart = ChartFactory.createPieChart("Popular destinations",        dataset, true, false, false);

使用ChartFactory.createPieChart()创建饼图。

条形图

以下代码是发送条形图的替代解决方案。

public JFreeChart getChart() {    DefaultCategoryDataset dataset = new DefaultCategoryDataset();    dataset.setValue(46, "Gold medals", "USA");    dataset.setValue(38, "Gold medals", "China");    dataset.setValue(29, "Gold medals", "UK");    dataset.setValue(22, "Gold medals", "Russia");    dataset.setValue(13, "Gold medals", "South Korea");    dataset.setValue(11, "Gold medals", "Germany");    JFreeChart barChart = ChartFactory.createBarChart(            "Olympic gold medals in London",            "",            "Gold medals",            dataset,            PlotOrientation.VERTICAL,            false, true, false);    return barChart;}

使用ChartFactory.createBarChart()创建条形图。

$ mvn jetty:run

运行 Jetty 服务器并导航到localhost:8080。

在本教程中,我们使用了 Java Servlet 中的 JFreeChart 库创建饼图并将其提供给客户端。

您可能也对以下相关教程感兴趣: Java Log4j 教程Java Servlet RESTful 客户端Java Servlet 上传文件Java Servlet 复选框教程Java Servlet 图表教程Java Servlet HTTP 标头Java 教程

相关推荐