用 servlet 生成图片(输出的不是文本,而是图片)
应用:验证码 —— 防止客户端恶意发信息,如:写一个 for 循环不停发帖。
public class ImageServlet extends HttpServlet {
public void doGet (HttpServletRequest request, HtttpServletResponse response) throws ServletException, IOException {
response.setContentType ("image/jpeg"); // 设置响应类型
BufferedImage image = new BufferedImage (600, 200, BufferedImage.TYPE_INT_RGB);
// 图片的内存映像,点阵信息
Random r = new Random();
Graphics g = image.getGraphics(); // 获得画笔对象
g.setColor (new Color (r.nextInt(255), r.nextInt(255), r.nextInt(255))); // setColor 设置当前画笔的颜色
g.fillRect (0,0,600,200);
g.setColor (new Color(255,255,255));
g.fillOval (30,50,200,200);
g.setColor (new Color(0,0,0));
String number = String.valueOf(r.nextInt(99999));
g.drawString (number,200,150);
OutputStream os = response.getOutputStream();
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(os); // 压缩成 jpeg 格式
encoder.encode(image); // 把 BufferedImage 对象中的图像信息编码后,向创建该对象(encoder)时指定的输出流输出
}
}
浏览器向服务器发送请求,获得 html,当遇到<img ... />标签时,浏览器则会再向服务器发送请求(向获得图片,因此请求时给的是图片的地址(src="...")),但是浏览器也不知道该图片是原先就有的还是动态生成的,因此该图片的地址 src 可以是一个图片的位置,也可以是动态生成该图片的 servlet 。
如对本文有疑问,请提交到交流论坛,广大热心网友会为你解答!! 点击进入论坛