|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
轮性能微软曾做过一个例子,就是同一个项目用java和.net来作,结果开发周期,.net是java的一半,性能java是.net的十分之一,代码量java是.net的三倍。呵呵,这说明了什么,.net的全方位比java好。但是有的人说.net不能跨平台,这个问题我和我同学曾讨论过,都认为微软的.net很可能早都可以跨平台了,但是微软为了保护他们的操作系统,所以才没有推出跨平台的.net,只是推出了跨语言的.net,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>
复制代码
如能准确显现,那末就半途而废了。
你说是sun公司对她研究的透还是微软?针对自己工具开发的.net性能上肯定会站上风的。 |
|