Java技巧:實(shí)例講解Servlet的圖象處理

字號(hào):

我們?cè)谔幚頂?shù)據(jù)時(shí),有時(shí)希望能用圖象直觀的表述,在這里有一個(gè)巧方法,能方便快捷的實(shí)現(xiàn)一些簡(jiǎn)單的圖形(不能稱之圖象),比如條形圖,我們不必去用 java來(lái)生成并顯示圖象,(java生成圖象很慢),我們可以這樣來(lái)作,先用作圖工具作一個(gè)很小的你需要的圖片,再根據(jù)你所處理的數(shù)據(jù)量來(lái)實(shí)時(shí)的加長(zhǎng)它,就可以得到所要表述的圖例。比如我們?cè)跀?shù)據(jù)庫(kù)中得到了一組數(shù)據(jù),我們從中找出的那一個(gè),按比列設(shè)定其標(biāo)簽的長(zhǎng)度,其它的數(shù)據(jù)圖形則可與它相比,得到的長(zhǎng)度,這樣,一個(gè)簡(jiǎn)簡(jiǎn)單單的條形圖就出來(lái)。但有時(shí)一些簡(jiǎn)單的圖形已經(jīng)不能解決我們實(shí)際遇到的情況,比如曲線圖就不能用這種方法,這時(shí)我們需要生成java圖象,也許大家都用過(guò)applet這樣的程序吧,若訪問(wèn)量不大,而實(shí)時(shí)性又很特殊時(shí)(比如股票系統(tǒng)),必須這樣用它。但事實(shí)上,我們web程序大多有前后臺(tái)之分,前臺(tái)瀏覽,后臺(tái)維護(hù)。這樣我們可以在后臺(tái)用servlet實(shí)時(shí)動(dòng)態(tài)定時(shí)地生成圖象文件,而前臺(tái)只是查看靜態(tài)圖片,這比你用applet來(lái)動(dòng)態(tài)產(chǎn)生圖象的速度快了不知多少倍,因?yàn)閍pplet來(lái)動(dòng)態(tài)產(chǎn)生圖象,有兩個(gè)地方很費(fèi)時(shí),一是數(shù)據(jù)庫(kù)查詢時(shí)間,二是applet本身生成圖象就很慢。下面我以一個(gè)簡(jiǎn)單的例子來(lái)說(shuō)明一下怎樣生成并寫入圖象文件,本例注重的是怎樣寫入圖象文件,相信寫過(guò)applet的朋友會(huì)生成更加漂亮的圖象。
    以下是引用片段:
    package test;
    import javax.servlet.*;
    import javax.servlet.http.*;
    import java.io.*;
    import java.util.*;
    import java.awt.image.BufferedImage;
    import com.sun.image.codec.jpeg.*;
    import java.awt.image.*;
    import java.awt.*;
    public class Servlet2 extends HttpServlet {
    public void init(ServletConfig config) throws ServletException {
    super.init(config);
    }
    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    String sFileName = "e:/temp/name.jpg";
    try{
    FileOutputStream fos = new
    FileOutputStream(sFileName);
    BufferedImage myImage = new BufferedImage(225, 225,BufferedImage.TYPE_INT_RGB);
    Graphics g = myImage.getGraphics();
    g.setColor(Color.white);
    g.fillRect(0,0,225,225);
    g.setColor(Color.black);
    g.drawString("Finance Balance Summary", 40, 15);
    g.drawString("Primary", 90, 30);
    g.setColor(Color.darkGray);
    &g.fillRect(15,193,7,7);
    g.setColor(Color.black);
    g.drawString("% Operating", 25, 200);
    g.setColor(Color.yellow);
    g.fillRect(130,193,7,7);
    g.setColor(Color.black);
    g.drawString("% Term", 140, 200);
    g.setColor(Color.lightGray);
    g.fillRect(15,213,7,7);
    g.setColor(Color.black);
    g.drawString("% Mortgage", 25, 220);
    g.setColor(Color.green);
    g.fillRect(130,213,7,7);
    g.setColor(Color.black);
    g.drawString("% Lease", 140, 220);
    JPEGImageEncoder jpg =
    JPEGCodec.createJPEGEncoder(fos);
    jpg.encode(myImage);
    }catch (Exception e){
    String exceptionThrown = e.toString();
    String sourceOfException = " Method";
    System.out.println("Origional Exception Thrown: " +
    exceptionThrown + '\r' + '\n');
    System.out.println("Origional SourceOfException: " +
    sourceOfException + '\r' + '\n');
    } // CatchStatementEnd
    }
    }