仓酷云

标题: JAVA编程:利用Java Servlet静态天生图片 [打印本页]

作者: 再见西城    时间: 2015-1-18 11:12
标题: JAVA编程:利用Java Servlet静态天生图片
轮性能微软曾做过一个例子,就是同一个项目用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:
  1. publicclassCreateImageServletextendsHttpServlet{ protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse) throwsServletException,IOException {  response.setContentType("image/jpeg"); }}
复制代码

我们起首设置了response的contentType为image/jpeg,如许扫瞄器就能够准确辨认。然后,创立一个巨细为100x100的BufferedImage对象,筹办画图:
  1. intwidth=100;intheight=100;BufferedImagebi=newBufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
复制代码

接着,BufferedImage对象中猎取Graphics2D对象并画图:
  1. 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编码:
  1. 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中。

上面是完全的代码:
  1. 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测试:
  1. <html><head></head><body><imgsrc="CreateImage"></body></html>
复制代码

如能准确显现,那末就半途而废了。
你说是sun公司对她研究的透还是微软?针对自己工具开发的.net性能上肯定会站上风的。
作者: 精灵巫婆    时间: 2015-1-20 17:13
你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?
作者: 分手快乐    时间: 2015-1-28 09:19
我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。
作者: 透明    时间: 2015-2-2 16:04
关于设计模式的资料,还是向大家推荐banq的网站 [url]http://www.jdon.com/[/url],他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。
作者: 不帅    时间: 2015-2-8 00:29
是一种使网页(Web Page)产生生动活泼画面的语言
作者: 莫相离    时间: 2015-2-23 18:55
你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。
作者: 再见西城    时间: 2015-3-6 20:39
是一种语言,用以产生「小应用程序(Applet(s))
作者: 谁可相欹    时间: 2015-3-6 22:40
Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)
作者: 愤怒的大鸟    时间: 2015-3-11 02:29
我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。
作者: 爱飞    时间: 2015-3-17 19:08
还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。
作者: 小女巫    时间: 2015-3-24 20:18
是一种突破用户端机器环境和CPU




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2