在一個(gè)類中,有一個(gè)叫做test()的方法需要被JSP端調(diào)用(test()主要任務(wù)是System.out.print()),于是在test()方法開始的地方加上"long lasting =System.currentTimeMillis(),"在結(jié)束的地方加上"System.out.println("運(yùn)行時(shí)間:"+(System.currentTimeMillis() - lasting)+" 毫秒")"。
然后把test()方法改成main()方法,以便單獨(dú)測試類,JSP端代碼作出相應(yīng)調(diào)整以便訪問main()方法。奇怪的事情發(fā)生了,經(jīng)過反復(fù)測試,使用JSP訪問main()方法消耗的時(shí)間為 451 毫秒,而單獨(dú)運(yùn)行這個(gè)類消耗的時(shí)間為 2864 毫秒。
為什么會(huì)這樣?是不是WEB容器的原因呢? -----------------------------------------------------------------------------
在一個(gè)人氣很高的論壇上,我得到些解答,自己也總結(jié)了一些,請(qǐng)各位看官來發(fā)表意見: 第一次請(qǐng)求JSP時(shí),WEB容器將JSP發(fā)送到編譯器,編譯成Servlet。然后把Servlet和其他類(比如自己寫的類)緩存在WEB容器中,再放入內(nèi)存常駐,最后將響應(yīng)結(jié)果返回給客戶端;而JSP的所有后繼請(qǐng)求,WEB容器將自動(dòng)載入緩存,除非JSP或者類經(jīng)過修改,否則WEB容器將不會(huì)重新執(zhí)行編譯并構(gòu)造緩存。而單獨(dú)運(yùn)行類就不一樣了,由于沒有WEB容器緩存支持,每次運(yùn)行都需要重新編譯再讀入內(nèi)存才行,所以要慢些了。 另外,根據(jù)測試,在JSP端第一次被調(diào)用的時(shí)候,時(shí)間和單獨(dú)運(yùn)行類差不多,這也印證了上面的解釋吧。
附上源程序類:package com.test;import org.xml.sax.*;import org.xml.sax.helpers.*; import javax.xml.parsers.*;
public class MyXMLReader extends DefaultHandler{
java.util.Stack tags=new java.util.Stack();
public MyXMLReader(){ super(); }
public static void main(String args[]){ long lasting =System.currentTimeMillis(); try{ SAXParserFactory sf = SAXParserFactory.newInstance(); SAXParser sp = sf.newSAXParser(); MyXMLReader reader = new MyXMLReader(); sp.parse(new InputSource("data.xml"),reader); } catch(Exception e){ e.printStackTrace(); } System.out.println("運(yùn)行時(shí)間:"+(System.currentTimeMillis() - lasting)+" 毫秒"); }
public void characters (char ch[], int start, int length) throws SAXException {
//從棧中得到當(dāng)前節(jié)點(diǎn)的信息 String tag=(String) tags.peek(); if(tag.equals("NO") ){ System.out.print("車牌號(hào)碼:" + new String(ch,start,length)); } if(tag.equals("ADDR")){ System.out.println(" 地址:" + new String(ch,start,length)); } }
public void startElement(String uri, String localName, String qName, Attributes attrs){ tags.push(qName); }}
JSP:<%@ page contentType="text/html; charset=gb2312" %><%@ page import="com.test.*"%>
<% long lasting =System.currentTimeMillis();%><html> <body><% String args[]={""}; MyXMLReader.main(args);%> </body></html> 請(qǐng)注意!引用、轉(zhuǎn)貼本文應(yīng)注明原作者:Rosen Jiang 以及出處:http://www.tkk7.com/rosen
Powered by: BlogJava Copyright © Rosen