Servlet动态生成图片方法



Servlet动态生成图片方法。

在Web应用中,经常要动态生成图片,如实施股市行情,各种统计图等。在这种情况下,图片只能在服务器内存中动态生成并发送给客户端,然后在浏览器中显示出来。本质上,浏览器向服务器请求静态图片(如jpeg)时,服务器返回的仍然是标准的http响应,只不过http头的contentType属性不是text/html,而是image/jpeg。因此,在Servlet中只要设置好contentType,然后发送图像的数据流,浏览器就能正确解析并显示出图片。在Java中,java.awt和java.awt.image包提供了基本的绘制图像的能力,用户可以在内存中绘制好需要的图形,然后编码成jpeg或其它图像格式,最后发送给浏览器即可。

一、创建ImgServlet,实现动态生成图片的功能

package com;
import java.io.IOException;
import java.awt.*;
import java.awt.image.*;
import javax.servlet.*;
import com.sun.image.codec.jpeg.*;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ImgServlet extends HttpServlet{


//创建Servlet的构造方法、初始化方法和销毁方法,这些方法继承了父类的方法,非常简单
public ImgServlet(){
 super();
}

public void init() throws ServletException{
 super.init();
}

public void destroy(){
 super.destroy();
}

//绘制一个图片
public void createImage(ServletOutputStream out){
 int width=100;
 int height=100;
 
 BufferedImage bi=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
 Graphics2D g=bi.createGraphics();
 g.setBackground(Color.lightGray);
 g.clearRect(0, 0, width, height);
 g.setColor(Color.red);
 g.drawString(“welcome”, 25, 50);
 g.dispose();
 bi.flush();
 JPEGImageEncoder encoder=JPEGCodec.createJPEGEncoder(out);
 JPEGEncodeParam param=encoder.getDefaultJPEGEncodeParam(bi);
 param.setQuality(1.0f, false);
 encoder.setJPEGEncodeParam(param);
 try{
  encoder.encode(bi);
 }catch(IOException ioe){
  ioe.printStackTrace();
 }
 
}


//处理客户端请求并调用createImage()方法向客户端输出了一个图片
public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{
 response.setContentType(“image/jpeg”);
 createImage(response.getOutputStream());
}

}


注意: response.setContentType(“image/jpeg”)代码设置了向客户端进行输出的格式。

二、配置web.xml

<servlet>
 <servlet-name>ImgServlet</servlet-name>
 <servlet-class>com.ImgServlet</servlet-class>
</servlet>
<servlet-mapping>
 <servlet-name>ImgServlet</servlet-name>
 <url-pattern>/CreateImage</url-pattern>
</servlet-mapping>

三、创建一个静态页面image.html来显示由Servlet创建的图片,其中img元素的src属性的值就是我们在配置文件中指定的Servlet的映射路径。

<!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” “http://www.w3.org/TR/html4/loose.dtd“>
<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″>
<title>Insert title here</title>
</head>
<body>
<center>
<h2>Servlet动态生成图片</h2>
<br>
<img src=”CreateImage”>
</center>
</body>
</html>