通过Jsp发送动态图像

原创 2004年09月14日 16:51:00
你是否曾经想过从jsp页面(或者servlet)中发送动态产生的图像?这篇技巧告诉你如何做。要运行这里的代码,你需要一个Tomcat或者其他支持JSP 1.1的web服务器。 

  当一个web页面带有image/jpeg (或者其他的图像格式)的MIME类型被发送时,你的浏览器将那个返回结果当作一个图像,然后浏览器显示图像,作为页面的一部分或者完全作为图像自身。要为你的jsp页面设置MIME类型,你需要设置页面的contentType属性: 
   


  然后你需要创建一个BufferedImage绘制你的动态图像: 
  BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); 


  创建完一个BufferedImage后,你需要得到图形环境进行绘制,一个Graphics或者Graphics2D对象: 


  Graphics g = image.getGraphics();
  // or 
  Graphics2d g2d = image.createGraphics(); 


   从现在起你就可以绘制图像内容了。对图形环境绘制就会画到BufferedImage。最开始这个图像都是黑色的,因此用你希望的背景颜色填充图像是一个不错的主意,然后,当你完成图像的绘制,你需要dispose图形环境: 


  g.dispose();
  // or 
  g2d.dispose(); 


  一旦完成图像的绘制,你在response中返回那个图像。你可以使用非标准的com.sun.image.codec.jpeg包中的JPEGImageEncoder类编码图像,或者如果你使用JDK1.4,你可以使用标准的ImageIO类。在使用JPEGImageEncoder时有一个技巧,你必须从ServletResponse取来ServletOutputStream而不能使用隐含的JSP输出变量out。 

  ServletOutputStream sos = response.getOutputStream();
  JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(sos);
  encoder.encode(image);
  // or 
  ImageIO.write(image, "JPEG", out); 


  这里有一个从所有的可能方案中(例如g.dispose();或者g2d.dispose();)选取的一个完整的范例.这个例子使用Graphics对象绘制一个随机的多边形,图像通过JPEGImageEncoder绘制,你可以自由设置多边形的顶点数得到更复杂的形状,换言之,有更多顶点和边。 


  要运行这个范例,将从""之间的jsp代码放到一个名为image.jsp的文件中,将那个文件放到你的web服务器可以找到的地方,在使用Tomcat的情况下是ROOT目录,启动Tomcat,访问http://localhost:8080/image.jsp 


  <%@ page contentType="image/jpeg" 
  import="java.awt.*,java.awt.image.*,
  com.sun.image.codec.jpeg.*,java.util.*"
  %>  
  <%
  // Create image
  int width=200, height=200;
  BufferedImage image = new BufferedImage(width, 
  height, BufferedImage.TYPE_INT_RGB);
  // Get drawing context  
  Graphics g = image.getGraphics();
  // Fill background
  g.setColor(Color.white);
  g.fillRect(0, 0, width, height);
  // Create random polygon
  Polygon poly = new Polygon();
  Random random = new Random();
  for (int i=0; i < 5; i++) {
  poly.addPoint(random.nextInt(width), 
  random.nextInt(height));
  }
  // Fill polygon
  g.setColor(Color.cyan);
  g.fillPolygon(poly);
  // Dispose context
  g.dispose();
  // Send back image
  ServletOutputStream sos = response.getOutputStream();
  JPEGImageEncoder encoder = 
  JPEGCodec.createJPEGEncoder(sos);
  encoder.encode(image);
  %> 

java动态发送邮箱验证

最近这两天看了一下java邮箱验证的相关资料,发送邮箱的关键词是javaMail,因为现在这个邮箱验证很常见,在写javaWeb时基本上都会用到邮箱验证,以确保登录者的身份。 因为要用到所以学习了一...
  • u011521890
  • u011521890
  • 2015年01月19日 15:52
  • 743

一段动态生成表格的JSP代码讲解

一段动态生成表格的JSP代码讲解 留言板 主题 内容 删除 message...
  • bcbobo21cn
  • bcbobo21cn
  • 2015年11月02日 14:29
  • 4807

动态页面技术(jsp)

1.什么是jsp? java server page java服务器页面技术。jsp包括了静态部分和动态部分,jsp运行在服务器中,整个web项目必须运行在服务器上,html代码中包含java代码,...
  • Wild_Elegance_k
  • Wild_Elegance_k
  • 2015年04月09日 19:40
  • 2014

如何动态改子页面的jsp

前段时间由于功能的需要,在一个jsp页面中动态的引入一个子jsp页面,而这个jsp页面是随着子页面的下拉的切换而改变的。     在详细叙述之前,我要讲一下在主页面中引入子页面的方式。     目...
  • chufuqiang5
  • chufuqiang5
  • 2015年08月05日 19:37
  • 999

jsp动态加载与静态加载浅谈

两种include方式 我自己写了一个original.jsp,另外有一个includedPage.jsp,我想在original.jsp中把includedPage.jsp引进来有两种方式...
  • xiaocai9999
  • xiaocai9999
  • 2017年03月19日 20:30
  • 1316

javascript与jsp发送请求到servlet的几种方式

JavaScript提交至servlet 4种方式: /**第一种提交方式 * */ function submitForm1(){ window.location.href="TestSer...
  • cuiyaoqiang
  • cuiyaoqiang
  • 2016年07月01日 11:25
  • 5865

JSP动态合并单元格

报表名称 ...
  • molashaonian
  • molashaonian
  • 2016年12月08日 10:54
  • 2135

jsp动态生成table

function generate(){ var line = document.getElementById("line").value;//获取行数 var row = docum...
  • u010675319
  • u010675319
  • 2014年07月22日 17:22
  • 1957

动态包含(<jsp:include>)

动态包含()          使用指令可以完成动态包含的操作,与使用JSP指令中的include实现的静态包含不同,动态包含语句可以自动区分被包含的页面是静态还是动态。 如果被包含的页面是静态页...
  • chentiefeng521
  • chentiefeng521
  • 2016年07月01日 15:48
  • 2555

JSP页面的动态包含和静态包含示例及介绍

这篇文章主要介绍了JSP页面的动态包含和静态包含示例及介绍,本文讲解了它们的区别并给出了相应例子,需要的朋友可以参考下 一、静态包含 本文介绍JSP静态包含语句,即使用JSP的include指...
  • jinhao505
  • jinhao505
  • 2014年09月02日 21:26
  • 1950
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:通过Jsp发送动态图像
举报原因:
原因补充:

(最多只允许输入30个字)