Generar Imágenes desde Servlets
Es muy posible que nos interese que nuestro servidor genere información
distinta de HTML, como podrá ser una gráfica dinámica, un contador gráfico,
un documento pdf, etc
En este ejemplo os mostraremos como generar una imagen la fecha actual
…. aunque las posiblidades son ilimitadas.
Básicamente lo que debemos hacer es :
- Generar una ventana para aprovecharnos de las API y capacidades gráficas
para pintar facilmente
Frame ventanaMarco = new Frame();
ventanaMarco.addNotify();
Graphics
contextoGrafico=null;
- Crear una imagen que represente el fondo de esa ventana
Image offscreen = ventanaMarco.createImage(w, h);
contextoGrafico = offscreen.getGraphics();
- Pintar los que deseemos
contextoGrafico.setFont(new
Font(«Arial», Font.BOLD | Font.ITALIC, 20));
contextoGrafico.draw3DRect(0,0,w-1,h-1,true);
Date ahora = new Date();
SimpleDateFormat formateador = new SimpleDateFormat(«dd-MM-yyyy
HH:mm»);contextoGrafico.drawString(formateador.format(ahora), 20, 30);
- Cambiar el tipo de respuesta
res.setContentType(«image/gif«);
- Codificar nuestra imagen como un fichero GIF y escribirlo en el buffer de
salida
GifEncoder encoder = new
GifEncoder(offscreen, bufferSalida);
encoder.encode();bufferSalida.flush();
bufferSalida.close();
Para codigicar la imagen, vamos a usar un código gratuito, que podemos
agradecer a
que podeis encontrar en:
/* * simpleGifServlet.java * * Created on June 29, 2003, 10:42 PM */ import java.awt.*; import java.io.*; /** /** Initializes the servlet. } /** Destroys the servlet. /** Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods. ServletOutputStream bufferSalida = res.getOutputStream(); Frame ventanaMarco = new Frame(); try Image offscreen = ventanaMarco.createImage(w, h); contextoGrafico.draw3DRect(0,0,w-1,h-1,true); Date ahora = new Date(); contextoGrafico.drawString(formateador.format(ahora), 20, 30); bufferSalida.flush(); /** Handles the HTTP <code>GET</code> method. /** Handles the HTTP <code>POST</code> method. /** Returns a short description of the servlet. } |
Nuestra salida es:
Podemos crear una página HTML y decir que el fuente de una
imagen es este elemento ……
<html> <head> <meta http-equiv=»Content-Language» content=»es»> <title>Mostrar la imagen generada por un Servlet</title> </head> <body> <center> <h2>Bienvenidos a nuestro servidor</h2> <p>Os vamos a mostrar los fácil que es invocar al servlet</p> <img src=«/servlet/simpleGifServlet«> </center> </body> </html> |