Istogramma

index.html

<!DOCTYPE html>
<html>
    <head>
        <title>Istogramma</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
    </head>
    <body>
        <h1>Istogramma</h1>
        <p>JSP<br /><img src="istogramma.jsp?v=60&v=120&v=180&v=240&v=300&v=360" /></p>
        <p>Servlet<br /><img src="istogramma?v=60&v=120&v=180&v=240&v=300&v=360" /></p>
    </body>
</html>

istogramma.jsp

<%@page import="javax.imageio.ImageIO"%>
<%@page import="java.io.OutputStream"%>
<%@page import="java.awt.Color"%>
<%@page import="java.awt.Graphics"%>
<%@page import="java.awt.image.BufferedImage"%>
<%@page contentType="image/png"%>
<%  // legge i parametri
    String[] v = request.getParameterValues("v");
    // crea l'immagine
    BufferedImage img = new BufferedImage(600, 200, BufferedImage.TYPE_INT_RGB);
    Graphics g = img.createGraphics();
    g.setColor(Color.WHITE);
    g.fillRect(0, 0, img.getWidth(), img.getHeight());
    for (int i = 0; i < v.length; i++) {
        int val = Integer.parseInt(v[i]);
        g.setColor(Color.getHSBColor(val / 360.0f, 1, 1));
        g.fill3DRect(0, i * 20, val, 16, true);
        g.setColor(Color.BLACK);
        g.drawString(" " + val, val, i * 20 + 13);
    }
    // invia l'immagine in output
    OutputStream os = response.getOutputStream();
    ImageIO.write(img, "png", os);
    os.close();
%>

istogramma (servlet)

protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.setContentType("image/png");
    try (OutputStream os = response.getOutputStream()) {
        // legge i parametri
        String[] v = request.getParameterValues("v");
        // crea l'immagine
        BufferedImage img = new BufferedImage(600, 200, BufferedImage.TYPE_INT_RGB);
        Graphics g = img.createGraphics();
        // cancella lo sfondo
        g.setColor(Color.WHITE);
        g.fillRect(0, 0, img.getWidth(), img.getHeight());
        // disegna l'istogramma
        for (int i = 0; i < v.length; i++) {
            int val = Integer.parseInt(v[i]);
            g.setColor(Color.getHSBColor(val / 360.0f, 1, 1));
            g.fill3DRect(0, i * 20, val, 16, true);
            g.setColor(Color.BLACK);
            g.drawString(" " + val, val, i * 20 + 13);
        }
        // invia l'immagine in output
        ImageIO.write(img, "png", os);
    }
}