|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
通过视频学习比传统的大课堂学习更适合成人化的学习规律。有人说大课堂气氛好,学习氛围浓,热闹,可以认识很多人。servlet|静态在Web使用中,常常必要静态天生图片,好比及时股市行情,各类统计图等等,这类情形下,图片只能在服务器内存中静态天生并发送给用户,然后在扫瞄器中显现出来。实质上,扫瞄器向服务器哀求静态图片如jpeg时,服务器前往的仍旧是尺度的http呼应,只不外http头的contentType不是text/html,而是image/jpeg罢了,因而,我们在Servlet中只需设置好contentType,然后发送图象的数据流,扫瞄器就可以准确剖析并显现出图片。在Java中,java.awt和java.awt.image包供应了基础的绘制图象的才能,我们能够在内存中绘制好必要的图形,然后编码成jpeg或其他图象格局,最初发送响应给扫瞄器便可。上面是利用Servlet静态创立图象的具体步骤:1.创立BufferedImage对象,该对象存在内存中,卖力保留绘制的图象;2.创立Graphics2D对象,该对象卖力绘制所需的图象;3.当绘制完成后,挪用com.sun.image.codec.jpeg包的JPEG编码器对其编码;4.最初将编码后的数据输入至HttpResponse便可。注重com.sun.image.codec.jpeg包位于JDK目次的rt.jar包中,它不是公然的API,必要将rt.jar复制到web使用程序的WEB-INF/lib下。我们先创立一个最复杂的Servlet:publicclassCreateImageServletextendsHttpServlet{protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{response.setContentType("image/jpeg");}}我们起首设置了response的contentType为image/jpeg,如许扫瞄器就能够准确辨认。然后,创立一个巨细为100x100的BufferedImage对象,筹办画图:intwidth=100;intheight=100;BufferedImagebi=newBufferedImage(width,height,BufferedImage.TYPE_INT_RGB);接着,BufferedImage对象中猎取Graphics2D对象并画图:Graphics2Dg=bi.createGraphics();//创立Graphics2D对象//添补背景为红色:g.setBackground(Color.BLUE);g.clearRect(0,0,width,height);//设置远景色:g.setColor(Color.RED);//入手下手画图:g.drawLine(0,0,99,99);//绘制一条直线//画图完成,开释资本:g.dispose();bi.flush();然后,对BufferedImage举行JPEG编码:JPEGImageEncoderencoder=JPEGCodec.createJPEGEncoder(out);JPEGEncodeParamparam=encoder.getDefaultJPEGEncodeParam(bi);param.setQuality(1.0f,false);encoder.setJPEGEncodeParam(param);try{encoder.encode(bi);}catch(IOExceptionioe){ioe.printStackTrace();}编码后的JPEG图象间接输入到了out对象中,我们只需传进response.getOutputStream()就能够间接输入到HttpResponse中。上面是完全的代码:packagecom.crackj2ee.web.util;importjava.io.*;importjava.awt.*;importjava.awt.image.*;importjavax.servlet.*;importjavax.servlet.http.*;importcom.sun.image.codec.jpeg.*;/***@authorLiaoXueFeng*/publicclassCreateImageServletextendsHttpServlet{protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{response.setContentType("image/jpeg");createImage(response.getOutputStream());}privatevoidcreateImage(OutputStreamout){intwidth=100;intheight=100;BufferedImagebi=newBufferedImage(width,height,BufferedImage.TYPE_INT_RGB);Graphics2Dg=bi.createGraphics();//setbackground:g.setBackground(Color.BLUE);g.clearRect(0,0,width,height);//setforecolor:g.setColor(Color.RED);//startdraw:g.drawLine(0,0,99,199);//enddraw:g.dispose();bi.flush();//encode:JPEGImageEncoderencoder=JPEGCodec.createJPEGEncoder(out);JPEGEncodeParamparam=encoder.getDefaultJPEGEncodeParam(bi);param.setQuality(1.0f,false);encoder.setJPEGEncodeParam(param);try{encoder.encode(bi);}catch(IOExceptionioe){ioe.printStackTrace();}}}最初将这个Servlet编译,注册到web.xml中,映照路径为/CreateImage,写一个复杂的index.html测试:<html><head></head><body><imgsrc="CreateImage"></body></html>如能准确显现,半途而废!
再举这样一个例子:如果你想对一个数字取绝对值,你会怎么做呢?java的做法是intc=Math.abs(-166);而ruby的做法是:c=-166.abs。呵呵,这就看出了java与ruby的区别。 |
|