Of course! Here’s a comprehensive guide on how to use FusionCharts with Java, covering the most common integration methods.

What is FusionCharts?
FusionCharts is a powerful, interactive, and responsive JavaScript charting library. It allows you to create stunning charts and dashboards for your web applications. While the charts are rendered on the client-side (in the browser), your Java application serves as the backend, providing the data that the charts will display.
Core Concepts
Before we dive into the code, let's understand the two main components:
-
Java Backend (Server-Side):
- Responsibility: Fetch or calculate data, format it into a specific structure, and send it to the frontend.
- Output: The Java code will produce a JSON (or XML) string. This JSON is the "data source" for the chart.
-
JavaScript Frontend (Client-Side):
(图片来源网络,侵删)- Responsibility: Receive the JSON data from the Java backend, initialize the FusionCharts library, and render the chart using the provided data.
- Key: The FusionCharts JavaScript library needs to be included in your HTML/JavaScript page.
Method 1: The Classic Approach (Servlet + JSP)
This is the traditional and most straightforward way to integrate Java with a JavaScript library. We'll create a simple web application.
Step 1: Set up your Java Web Project
-
Use an IDE like Eclipse or IntelliJ IDEA.
-
Create a Dynamic Web Project.
-
You will need a Servlet API (e.g.,
jakarta.servlet-apiorjavax.servlet-api). If you're using Maven, add this to yourpom.xml:
(图片来源网络,侵删)<dependency> <groupId>jakarta.servlet</groupId> <artifactId>jakarta.servlet-api</artifactId> <version>6.0.0</version> <scope>provided</scope> </dependency>
Step 2: Get FusionCharts
-
Go to the FusionCharts download page.
-
Download the "FusionCharts Suite XT".
-
Extract the downloaded ZIP file. You will find a
jsfolder. This is the most important part for the frontend. -
Copy the
fusioncharts.jsandthemesfolder from thejsdirectory into your web project'sWebContent(orwebapp) folder. A good structure would be:WebContent/ ├── js/ │ ├── fusioncharts.js │ └── fusioncharts.theme.fusion.js (or another theme) └── index.jsp
Step 3: Create the Java Servlet (The Data Provider)
This servlet will generate the JSON data for our chart.
ChartDataProviderServlet.java
import java.io.IOException;
import java.io.PrintWriter;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
@WebServlet("/data")
public class ChartDataProviderServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// Set the content type to JSON
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
// Create the JSON data for a single-series chart
// The structure is: {"chart": {...}, "data": [...]}
String jsonData = "{"
+ "\"chart\": {"
+ " \"caption\": \"Monthly Revenue Analysis\","
+ " \"xaxisname\": \"Month\","
+ " \"yaxisname\": \"Revenue (in USD)\","
+ " \"theme\": \"fusion\""
+ "},"
+ "\"data\": ["
+ " {\"label\": \"Jan\", \"value\": \"12000\"},"
+ " {\"label\": \"Feb\", \"value\": \"15000\"},"
+ " {\"label\": \"Mar\", \"value\": \"18000\"},"
+ " {\"label\": \"Apr\", \"value\": \"22000\"},"
+ " {\"label\": \"May\", \"value\": \"25000\"},"
+ " {\"label\": \"Jun\", \"value\": \"30000\"}"
+ "]"
+ "}";
// Write the JSON data to the response
PrintWriter out = response.getWriter();
out.print(jsonData);
out.flush();
}
}
Step 4: Create the JSP Page (The View)
This JSP page will call the servlet, get the JSON data, and render the chart using FusionCharts.
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">FusionCharts with Java Servlet</title>
<!-- 1. Include FusionCharts library -->
<script src="js/fusioncharts.js"></script>
<script src="js/fusioncharts.theme.fusion.js"></script>
</head>
<body>
<h1>Monthly Revenue</h1>
<div id="chart-container">Chart will be rendered here.</div>
<script>
// 2. Define the chart configuration
const dataSource = {
"chart": {
"caption": "Monthly Revenue Analysis",
"xaxisname": "Month",
"yaxisname": "Revenue (in USD)",
"theme": "fusion"
},
"data": [] // Data will be fetched from the server
};
// 3. Fetch data from the Java Servlet
fetch('data')
.then(response => response.json())
.then(data => {
// 4. Update the dataSource with the fetched data
dataSource.data = data.data;
// 5. Render the chart
new FusionCharts({
type: 'column2d', // Chart type
renderAt: 'chart-container', // Container ID
width: '700',
height: '400',
dataFormat: 'json',
dataSource: dataSource
}).render();
})
.catch(error => console.error('Error fetching data:', error));
</script>
</body>
</html>
Step 5: Run the Application
Deploy your web application to a server like Apache Tomcat. Access the index.jsp page (e.g., http://localhost:8080/YourAppName/index.jsp). You should see the chart rendered with the data from your Java servlet.
Method 2: Using a Modern Framework (Spring Boot with Thymeleaf)
This approach is more modern and suitable for building RESTful APIs. The Spring Boot app provides a REST endpoint for the data, and Thymeleaf helps render the page.
Step 1: Create a Spring Boot Project
- Use Spring Initializr.
- Add dependencies:
Spring Web,Thymeleaf.
Step 2: Project Structure
src/main/java/
└── com/example/demo/
├── DemoApplication.java
├── controller/
│ └── ChartController.java
└── model/
└── RevenueData.java
src/main/resources/
└── templates/
└── chart.html
Step 3: Create the REST Controller (The Data Provider)
ChartController.java
package com.example.demo.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.*;
@RestController
public class ChartController {
@GetMapping("/api/revenue")
public Map<String, Object> getRevenueData() {
Map<String, Object> chartData = new HashMap<>();
// Chart configuration
Map<String, String> chartConfig = new HashMap<>();
chartConfig.put("caption", "Monthly Revenue Analysis");
chartConfig.put("xaxisname", "Month");
chartConfig.put("yaxisname", "Revenue (in USD)");
chartConfig.put("theme", "fusion");
chartData.put("chart", chartConfig);
// Data points
List<Map<String, String>> dataPoints = new ArrayList<>();
dataPoints.add(createDataPoint("Jan", "12000"));
dataPoints.add(createDataPoint("Feb", "15000"));
dataPoints.add(createDataPoint("Mar", "18000"));
dataPoints.add(createDataPoint("Apr", "22000"));
dataPoints.add(createDataPoint("May", "25000"));
dataPoints.add(createDataPoint("Jun", "30000"));
chartData.put("data", dataPoints);
return chartData;
}
private Map<String, String> createDataPoint(String label, String value) {
Map<String, String> point = new HashMap<>();
point.put("label", label);
point.put("value", value);
return point;
}
}
Step 4: Create the HTML Template
src/main/resources/templates/chart.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>FusionCharts with Spring Boot</title>
<!-- Include FusionCharts library -->
<script src="/js/fusioncharts.js"></script>
<script src="/js/fusioncharts.theme.fusion.js"></script>
</head>
<body>
<h1>Monthly Revenue</h1>
<div id="chart-container">Chart will be rendered here.</div>
<script>
// Define the chart configuration
const dataSource = {
"chart": {
"caption": "Monthly Revenue Analysis",
"xaxisname": "Month",
"yaxisname": "Revenue (in USD)",
"theme": "fusion"
},
"data": [] // Data will be fetched from the Spring Boot API
};
// Fetch data from the Spring Boot REST endpoint
fetch('/api/revenue')
.then(response => response.json())
.then(data => {
// Update the dataSource with the fetched data
dataSource.data = data.data;
// Render the chart
new FusionCharts({
type: 'column2d',
renderAt: 'chart-container',
width: '700',
height: '400',
dataFormat: 'json',
dataSource: dataSource
}).render();
})
.catch(error => console.error('Error fetching data:', error));
</script>
</body>
</html>
Step 5: Add FusionCharts Static Files
- Copy the
fusioncharts.jsand thethemesfolder from your FusionCharts download intosrc/main/resources/static/js/. - Your Spring Boot application will automatically serve files from the
staticdirectory.
Step 6: Run the Application
Run your DemoApplication.java and navigate to http://localhost:8080/chart.html. The result will be the same interactive chart.
Best Practices and Advanced Topics
-
Use a JSON Library: Manually building JSON strings (as in the first example) is error-prone. For production, always use a robust JSON library like Jackson or Gson.
-
With Jackson in a Servlet:
// Add Jackson dependency // com.fasterxml.jackson.core:jackson-databind ObjectMapper objectMapper = new ObjectMapper(); String jsonData = objectMapper.writeValueAsString(chartDataMap); out.print(jsonData);
-
-
Data from a Database: In a real application, your Java code will query a database (MySQL, PostgreSQL, etc.) to get the data before formatting it as JSON.
-
Handling Multiple Charts: You can create multiple REST endpoints (e.g.,
/api/sales,/api/users) or pass a chart type as a parameter to a single endpoint to serve different charts. -
Server-Side Error Handling: Your backend should handle potential errors (e.g., database connection failure) and return a meaningful error message in the JSON response, which the frontend can then display to the user.
-
Authentication: If your charts show sensitive data, protect your data endpoints (e.g.,
/api/revenue) with authentication mechanisms like Spring Security or basic HTTP authentication.
