在Java创建图象或进行图象处理,有几个包和类是需要用到的。具体请参阅Purple Servlet References。 当您的servlet有图象文件时您有两个选择。 把文件写入磁盘并提供连接。注重写在您的web服务器目录树下(不是在服务器磁盘的任何地方都行。)你可以 用Java 2 JPEGCodec类,或Acme Labs' GIFEncoder类将Java Graphics 转换成图象文件或二进制流. 值得一提的是在一些servlet引擎设置中,servlet的目录不能通过web server进入,只能通过servlet引擎,也就是 说您不能通过http:// URL登录,您可以向您的servlet输出的Html传送IMG标签,或传送HTTP重新定位来让浏览器直接下载图象。 (CookieDetector (http://www.purpletech.com/code/CookieDetector.html) has an example, with source code, of sending a redirect.) (CookieDetector (http://www.purpletech.com/code/CookieDetector.html) 有一个例子,有传送 重新定位源代码。 图象可以被保存在浏览器的cache中,当再次请求时不必重新运行servlet,因此减轻了服务器的负担。 ). 图象不能从磁盘中删除,因此您必须写一段程序来定期清理图象目录,或进入目录 后用手工删除。(或买一张大点的硬盘) 2.直接从servlet输出图象。通过给image/gif (for GIFs)或 image/jpeg (for JPEGs)设置Content-type头来实现它。然后打开HttpResponse output流作为原始流而不是打印流,用write()方法直接传送字节。 以下是一个用servlet实时创建图像的例子程序 import javax.servlet.*; import javax.servlet.http.*; import java.io.*; import java.util.*; import com.sun.image.codec.jpeg.*; import java.awt.image.*; import java.awt.*; public class JPEGServlet extends HttpServlet { //Process the HTTP Get request public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("image/jpeg"); ServletOutputStream out = response.getOutputStream(); BufferedImage image = new BufferedImage(100,100, BufferedImage.TYPE_INT_RGB); Graphics g = image.getGraphics(); g.setColor(Color.green); g.fillRect(0, 0, 100, 100); g.setColor(Color.red); g.drawOval(0, 0, 100,100); JPEGImageEncoder encoder =JPEGCodec.createJPEGEncoder(out); encoder.encode(image); out.close(); } //Process the HTTP Post request public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request,response); } //Get Servlet information public String getServletInfo() { return "JPEGServlet Information"; } }
|