broken image when creating dynamic image in servlet
Hi all,
I am a relative new to Java. I am currently trying to port a dynamic image renderer to a servlet.
However, the final results are a broken image.
Here is what I have done:
in the web.xml
<servlet>
<servlet-name>SecurityImage</servlet-name>
<display-name>Security Image Generator</display-name>
<servlet-class>servlets.SecurityImage</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>SecurityImage</servlet-name>
<url-pattern>/SecImage</url-pattern>
</servlet-mapping>
here is the class which compliled in WEB-INF/classes/servlets
package servlets;
import javax.servlet.http.*;
import java.io.*;
import javax.imageio.*;
import java.awt.*;
import java.awt.image.*;
import java.awt.geom.Rectangle2D;
publicclass SecurityImageextends HttpServlet{
privatestaticfinalint imageWidth = 200;
privatestaticfinalint imageHeigth = 75;
publicvoid doGet(HttpServletRequest request, HttpServletResponse resp){
try
{
//create an image of static propertions
BufferedImage img =new BufferedImage(imageWidth, imageHeigth, BufferedImage.TYPE_INT_ARGB);
//draw square
Graphics2D g = (Graphics2D) img.getGraphics();
g.setColor(Color.BLUE);
g.fillRect(0,0,img.getWidth(), img.getHeight());
//text to display
String imageText ="some txt";
//set up text block in Image
g.setFont(new Font("Arial", Font.BOLD, 24));
FontMetrics fontMetrics = g.getFontMetrics();
Rectangle2D rect = fontMetrics.getStringBounds(imageText, g);
//draw text in center of image
g.drawString(imageText,
(img.getWidth()- (int)rect.getWidth())/2,
(img.getHeight() - (int)rect.getHeight())/2);
//free graphic resources
g.dispose();
//set mime type of image
resp.setContentType("image/jpg");
//Write the image as jpg
OutputStream out = resp.getOutputStream();
ImageIO.write(img,"jpg", out);
out.close();
}
catch (IOException ex)
{
ex.printStackTrace();
}
}
}
could somebody give me some pointers on what went wrong?
As a test I created a text based servlet
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("Hello, world!");
out.close();
and it produced the hello world string when I execute this servlet, so the configuration must be done correctly.
Thanks for your help!
-Rogier

