WebCh07A(HaoXW)服務(wù)端編程分析_第1頁
WebCh07A(HaoXW)服務(wù)端編程分析_第2頁
WebCh07A(HaoXW)服務(wù)端編程分析_第3頁
WebCh07A(HaoXW)服務(wù)端編程分析_第4頁
WebCh07A(HaoXW)服務(wù)端編程分析_第5頁
已閱讀5頁,還剩84頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用第1章Web技術(shù)基礎(chǔ)第2章標(biāo)記語言與網(wǎng)頁制作第3章圖像處理技術(shù)第4章音頻與視頻處理第5章Flash動(dòng)畫設(shè)計(jì)第6章客戶端開發(fā)

第7章服務(wù)端編程目錄計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用第7章服務(wù)端編程7.1B/S三層體系結(jié)構(gòu)與Web服務(wù)器腳本程序

7.2Java程序設(shè)計(jì)基礎(chǔ)7.3JavaBeans7.4JSP技術(shù)7.5JDBC與數(shù)據(jù)庫編程7.6綜合舉例7.7Java開發(fā)工具簡(jiǎn)介計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用7.1B/S三層體系結(jié)構(gòu)與Web服務(wù)器腳本程序B/S三層體系結(jié)構(gòu)腳本引擎與服務(wù)端腳本程序計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用B/S三層體系結(jié)構(gòu)B/S三層體系結(jié)構(gòu)瀏覽器層Web服務(wù)器層.數(shù)據(jù)庫服務(wù)器層三層體系架構(gòu)的特點(diǎn)瘦客戶端應(yīng)用突破局域網(wǎng),分布到整個(gè)Internet計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用服務(wù)端腳本程序什么是腳本引擎腳本引擎就是指腳本程序的運(yùn)行環(huán)境,負(fù)責(zé)腳本程序的解釋,來具體處理用相應(yīng)腳本語言書寫的腳本命令。例如:ASP結(jié)構(gòu)的,IIS組件JSP機(jī)構(gòu)的,Tomcat應(yīng)用服務(wù)器服務(wù)端腳本程序界定符<%…%>計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用服務(wù)端腳本程序舉例<%@pagecontentType="text/html;charset=gb2312"%><html><head><title>Hello,JSP</title><%!Stringdatestr="";%></head><body><%out.println("你好,JSP!");%><br><%java.text.DateFormatdf=newjava.text.SimpleDateFormat("yyyy-MM-ddHH:mm");java.util.Datenowdate=newjava.util.Date();datestr=df.format(nowdate);datestr=datestr.substring(0,16);%>現(xiàn)在的時(shí)間是:<%=datestr%></body></html>計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用7.2Java程序設(shè)計(jì)基礎(chǔ)

Java程序設(shè)計(jì)語言類與對(duì)象接口包(package)Java基礎(chǔ)類庫JavaApplet客戶端程序JavaServlet服務(wù)器程序計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用Java程序設(shè)計(jì)語言程序設(shè)計(jì)語言過程式,20世紀(jì)80年代以前Pascal,F(xiàn)ortran,C,etc面向?qū)ο螅?0世紀(jì)90年代以后C++JavaJava的特點(diǎn)Java技術(shù)編寫一次,到處運(yùn)行Java程序設(shè)計(jì)語言特點(diǎn)Java沒有主函數(shù)和全局函數(shù)Java沒有全局變量Java沒有結(jié)構(gòu)和聯(lián)合Java用包(Package)來分解命名空間Java沒有獨(dú)立的頭文件沒有執(zhí)針計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用類與對(duì)象類與對(duì)象的概念類(class)是包含數(shù)據(jù)和處理這些數(shù)據(jù)的過程的數(shù)據(jù)結(jié)構(gòu)。對(duì)象(object)是用類來聲明的數(shù)據(jù)結(jié)構(gòu),如果將類比作數(shù)據(jù)類型,對(duì)象就是相應(yīng)數(shù)據(jù)類型的變量。計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用類的定義[修飾符]class<類名>[extends<父類名>][implements<接口名列表>]{成員變量聲明;成員函數(shù)定義;}abstract,抽象類,抽象類必須包含至少一個(gè)抽象成員函數(shù)。抽象類不能夠創(chuàng)建對(duì)象,需要用其派生類創(chuàng)建。final,最終類,說明一個(gè)類不能再派生子類。public,能被其他類訪問的公有類,在其它包(package)里要使用該類,需要先用import導(dǎo)入,否則只能在他定義的package里使用。synchronicable,表示所有類的成員函數(shù)都是同步的。計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用成員變量定義的一般形式成員變量定義的一般形式[修飾符]<類型><成員變量列表>;訪問級(jí)別聲明符privatepublicprotectedfinal(最終,初始化后不能再改變其值的變量)volatile(多線程變量)。靜態(tài)成員變量修飾符static,此變量稱為類變量,不加static的變量稱為對(duì)象變量。計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用成員函數(shù)定義的一般形式成員變量定義的一般形式[修飾符]返回值類型<方法名>([形式參數(shù)列表])[throws異常列表]{//函數(shù)體(Java程序代碼)}修飾符privatepublicprotectedabstract(抽象方法,無方法體)synchronized(線程同步的方法)native(本機(jī)方法)靜態(tài)成員函數(shù)static來聲明靜態(tài)成員函數(shù),表明此方法為類方法,無static修飾的方法為對(duì)象方法。計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用構(gòu)造函數(shù)概念構(gòu)造函數(shù)(constructor)是一種特殊的成員函數(shù),用來在內(nèi)存中建立具體的對(duì)象。構(gòu)造函數(shù)的名稱和類名稱相同,一個(gè)類可以擁有幾個(gè)帶有不同參數(shù)的構(gòu)造函數(shù)。構(gòu)造函數(shù)的激活(invoke)注意事項(xiàng)構(gòu)造函數(shù)不能描述為const和volatile構(gòu)造函數(shù)不能是static,因?yàn)闃?gòu)造函數(shù)需要初始化類的成員變量,但靜態(tài)構(gòu)造函數(shù)不能訪問成員變量。構(gòu)造函數(shù)不能被繼承。構(gòu)造函數(shù)不能有返回值,也不可以是void。定義一個(gè)類時(shí),必須明確定義除缺省構(gòu)造函數(shù)和拷貝構(gòu)造函數(shù)以外的所有其它構(gòu)造函數(shù)。計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用創(chuàng)建對(duì)象創(chuàng)建對(duì)象對(duì)象變量=new類(參數(shù))激活構(gòu)造函數(shù)計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用類的定義舉例定義了一個(gè)三角形圖形類CTriangle(文檔名為exa01.java)classCTriangle{privatedoublea,b,c,t;publicdoubles=0;CTriangle(doublex,doubley,doublez){a=x;b=y;c=z;}//計(jì)算三角形的面積publicdoubleArea(){t=(a+b+c)/2;s=Math.sqrt(t*(t-a)*(t-b)*(t-c));returns;}publicvoidout1(){Area();System.out.println("Area="+s);}}classMyTest01{publicstaticvoidmain(String[]args){CTrianglemyobj=newCTriangle(10,20,15);myobj.out1();}}計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用類的定義舉例—運(yùn)行在Dos提示符下,執(zhí)行javacexa01.java命令,編譯,生成每個(gè)類的.class文件執(zhí)行javaMyTest01,運(yùn)行上述程序計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用類的構(gòu)造函數(shù)激活次序舉例定義了三個(gè)類A、B、C,其中C中包含兩個(gè)對(duì)象成員,來展示對(duì)象構(gòu)造函數(shù)的激活次序,文檔名為exa02.javaclassA{intx,y;A(inta,intb){x=a;y=b;}A()//默認(rèn)構(gòu)造函數(shù){x=0;y=0;System.out.println("Aconstructor\n");}}classB{B(){System.out.println("Bconstructor\n");}}classC{publicAa=newA();publicBb=newB();C(){System.out.println("Cconstructor\n");}}classMyTest02{publicstaticvoidmain(String[]args){CmyObj=newC();}}計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用類的構(gòu)造函數(shù)激活次序舉例—運(yùn)行執(zhí)行javaMyTest02,輸出結(jié)果為:AconstructorBconstructorCconstructor上述輸出結(jié)果表明,如果一個(gè)類含有成員對(duì)象,則在創(chuàng)建類的對(duì)象時(shí),將先創(chuàng)建類的成員對(duì)象,最后才是類的對(duì)象本身。計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用封裝和抽象封裝(Encapsulation)是指對(duì)象可以擁有私有元素,將內(nèi)部細(xì)節(jié)隱藏起來的能力。封裝將對(duì)象封閉起來,管理著對(duì)象的內(nèi)部狀態(tài)。抽象則和對(duì)象的外部狀態(tài)緊密相關(guān),它通常用來描述對(duì)象所表示的具體概念、對(duì)象所完成的任務(wù)以及處理對(duì)象的外部接口。抽象處理的是對(duì)象的可見外部特征。訪問級(jí)別修飾符關(guān)鍵詞public,類中所有public成員構(gòu)成類的接口,它們是類的抽象性的表現(xiàn)。關(guān)鍵詞private,類中的private成員只能被類的成員函數(shù)、友元類或外部友元函數(shù)訪問。從而實(shí)現(xiàn)類的封裝性。關(guān)鍵詞protected,類的protected成員可以被類的派生類成員訪問。計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用類成員訪問規(guī)則類成員訪問規(guī)則計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用靜態(tài)成員概念支持封裝和抽象的另外機(jī)制還包括關(guān)鍵詞static。當(dāng)一個(gè)成員被說明成static時(shí),則該成員在程序中只有一個(gè)拷貝存在,而不是在每個(gè)對(duì)象中都有一個(gè)拷貝。所有的對(duì)象共享類中的靜態(tài)成員。在一些面向?qū)ο蟮某绦蛟O(shè)計(jì)語言中,靜態(tài)成員被稱為類變量,或類屬變量。舉例classCS{staticinta;intb,c,d;};CSobjs[3];計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用類的繼承性與派生類概念從現(xiàn)存的對(duì)象出發(fā)建立一種新的對(duì)象類型,使它繼承原對(duì)象的特點(diǎn)和功能,這就是對(duì)象的繼承性。繼承是許多層次對(duì)象的自然描述。從現(xiàn)存類派生出新類時(shí),現(xiàn)存類稱為基類(baseclass),派生出的新類稱為派生類。派生類可以對(duì)基類作如下變化增加新的成員變量增加新的成員函數(shù)重新定義已有的成員函數(shù),即:子類可以對(duì)父類的方法覆蓋(overriding)或重載(overloading)。計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用多態(tài)子類可以對(duì)父類的方法覆蓋(overriding)所謂覆蓋,是指在子類中定義了與父類中同名的函數(shù),這時(shí)將根據(jù)當(dāng)前的對(duì)象類型執(zhí)行子類中的代碼,即父類中的代碼被覆蓋。運(yùn)行時(shí)多態(tài)重載(overloading)所謂方法重載是類中含有同名,但特征參數(shù)(參數(shù)數(shù)量,參數(shù)類型)不同的方法,編譯時(shí)通過形式參數(shù)確定要調(diào)用的方法。編譯時(shí)多態(tài)計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用改變現(xiàn)有成員函數(shù)的屬性派生類不能刪除基類的成員變量和成員函數(shù),實(shí)際上派生類往往是基類的擴(kuò)充,是一種具體化和完善的過程類的派生是一種演化過程,即通過擴(kuò)展、更改和特殊化從一個(gè)已知類出發(fā)來建立一個(gè)新的類。已知基類A建立一個(gè)派生類B,一般形式為:classBextendsA{//派生類B的成員說明};讀作“類B由A派生”,它告訴編譯器類B是一種A,對(duì)基類A所作的修改和添加在括號(hào)內(nèi)給出。計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用調(diào)試Java程序每個(gè)java文件有且只能有一個(gè)公有類,即public類,文件名必須和這個(gè)公有類的類名大小寫完全一樣。在要運(yùn)行的類中有且只能有一個(gè)publicstaticvoidmain(String[]args)方法,這個(gè)方法就是主程序。運(yùn)行一個(gè)Java程序,應(yīng)該是在java命令后跟包含main函數(shù)的類名,而不是Java程序的文件名,即java<包含main方法的java類>,類名后面不能有.class等擴(kuò)展名。如果在編譯或運(yùn)行時(shí)出現(xiàn)問題,還可能是類的路徑問題。我們來看一下Java程序的運(yùn)行過程,首先通過javac命令,將Java程序編譯生成.class文件,即虛擬機(jī)要執(zhí)行的代碼,稱之為字節(jié)碼(bytecode)。然后,通過java命令,即通過java虛擬機(jī)來解釋運(yùn)行class文件。虛擬機(jī)通過classloader來裝載這些字節(jié)碼,即通常意義上的類。問題是,classloader從哪里知道java本身的類庫及用戶自己的類在什么地方呢?要解決這個(gè)問題,通常是通過系統(tǒng)環(huán)境變量種的類路徑(classpath)來設(shè)置的。計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用接口(interface)C++與多重繼承Java沒有多重繼承,可以通過接口來實(shí)現(xiàn)相應(yīng)的功能。接口(Interface)是一組沒有給出實(shí)現(xiàn)細(xì)節(jié)的操作(方法)的集合計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用創(chuàng)建接口一般形式publicinterface<Interfacename>[extends<Superinterface列表>]{成員變量聲明(常量);成員函數(shù)(方法)聲明;}public指示了接口可以在任何的包中任何的類中使用。如果你沒有指定接口為public,那么接口就只能在定義接口的包中的類中使用。常量聲明在接口中的常量可以是public、static和final方法聲明接口中的方法不需要給出具體的實(shí)現(xiàn)代碼。因此,所有定義在接口中的方法可以隱含地為publicabstact方法計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用接口和類接口的定義和類的定義類似,但是接口不是一個(gè)類,而是對(duì)符合接口要求的類的一套規(guī)范。接口說明了實(shí)現(xiàn)接口的類該做什么而不指定如何去做,一個(gè)類可以實(shí)現(xiàn)一個(gè)或多個(gè)接口。實(shí)現(xiàn)一個(gè)接口聲明類需要實(shí)現(xiàn)的接口,聲明一個(gè)類實(shí)現(xiàn)一個(gè)接口需要使用implements關(guān)鍵字。提供接口中的所有方法的定義。實(shí)現(xiàn)接口的類繼承了定義在接口中的常量,這些類可以使用簡(jiǎn)單的名字來引用接口定一中的常量。計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用包(package)什么是包?管理大型名字空間,避免名字沖突,引入包(Package)的概念Java中的包其實(shí)指的就是目錄,它可以更好地管理Java類(Class)和接口(Interface)計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用定義包使用package語句可以將一個(gè)編譯單元(源程序文件)定義成包。如果使用package語句,編譯單元的第一行必須無空格,也無注釋,格式如下:package<包名>;舉例例如:有一個(gè)java文件,文件名為B.java,內(nèi)容如下:packagehao.yy;publicclassB{B(intyy,intmm,intdd){System.out.println("Year:"+yy+"Month:"+mm+"Date"+dd);}}編譯執(zhí)行javac-dd:\B.java命令,其中參數(shù)-d<目錄>為指定輸出文件的目錄。因此,上述編譯命令執(zhí)行后將在d:\目錄下,創(chuàng)建一個(gè)d:\hao\yy文件夾,該文件夾中包含了編譯后的類文件B.class。計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用使用包中的類和接口使用import語句,導(dǎo)入類或接口,或包含它們的包。例如:importjava.util.*;或者:importjava.util.Date;importjava.text.SimpleDate;publicclassmydate{publicstaticvoidmain(String[]args){//CreateadateformatterthatcanparsedatesoftheformMM-dd-yyyy.SimpleDateFormatbartDateFormat=newSimpleDateFormat("MM-dd-yyyy");//Createastringcontainingatextdatetobeparsed.Stringdd="6-22-2008";Datedate=bartDateFormat.parse(dd);//Sendtheparseddateasalongvaluetothesystemoutput.System.out.println(date.getTime());}}在每個(gè)引用的類和接口前面給出它們所在的包的名字包名.類名obj=new包名.<類名|接口名>();計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用Java基礎(chǔ)類庫java.lang包java.util包java.awt包java.swing包java.io包java.applet包java.beans包包計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用JavaApplet客戶端程序概念JavaApplet是指用Java編寫的能夠在Web頁中運(yùn)行的小應(yīng)用程序在java.applet包中,定義了Applet類,它是所有Applet應(yīng)用的基類,所有的Applet小應(yīng)用程序都必須繼承該類。功能被Flash代替計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用JavaServlet服務(wù)器程序概念Servlet是專門為在Web服務(wù)器機(jī)器上運(yùn)行而設(shè)計(jì)的Java程序,相當(dāng)于運(yùn)行于服務(wù)端的applet,與CGI程序一樣,用于充當(dāng)連接前端Web請(qǐng)求與后端數(shù)據(jù)資源的中間層組件。編寫Servlet非常麻煩,正在被JSP技術(shù)取代計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用6.3JavaBeans什么是JavaBeansJavaBean的屬性、方法和事件計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用什么是JavaBeansJavaBeans是符合一定規(guī)范的Java類這樣的Java類將對(duì)應(yīng)于一個(gè)獨(dú)立的.java文件,在絕大多數(shù)情況下,他是一個(gè)public類型的類。JavaBeans是一種規(guī)范,一種在Java(包括JSP)中可重復(fù)使用的Java組件的技術(shù)規(guī)范。使用JavaBeans可以充分利用組件的可重復(fù)使用的特性并增加程序的可讀性。計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用JavaBean的屬性JavaBean有四種類型的屬性,分別是:?jiǎn)沃祵傩?、索引屬性、關(guān)聯(lián)屬性和限制屬性單值屬性,定義一個(gè)包含一個(gè)值的數(shù)據(jù)成員,并為其定義一對(duì)設(shè)置(set)/獲取(get)屬性的方法,以便于外部與其發(fā)生聯(lián)系。publicvoidset<PropertyName>(<PropertyType>propertyValue)//設(shè)置器public<PropertyType>get<PropertyName>()//獲取器索引屬性,類似于Java中的數(shù)組,包括若干個(gè)數(shù)據(jù)類型相同的元素,可以通過整數(shù)索引值訪問其中的屬性,因此稱索引屬性。關(guān)聯(lián)屬性,當(dāng)修改這類屬性時(shí),將發(fā)送一個(gè)通知給其他元素(如:Applet、application或其他JavaBean),如果與該JavaBean中的某個(gè)屬性相關(guān)聯(lián),就會(huì)注冊(cè)該屬性。外部部件稱為監(jiān)聽器。限制屬性,當(dāng)需要修改一個(gè)限制屬性值時(shí),接受屬性的外部部件首先要件檢查這個(gè)屬性的合理性再?zèng)Q定是否接受修改。計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用JavaBean的方法JavaBean歸根到底是一個(gè)Java類,所有的public方法都可以通過對(duì)象外部直接調(diào)用。JavaBean中常用的方法是單值屬性設(shè)置器/獲取器,set屬性值get屬性值。計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用JavaBean的事件JavaBean和其他軟件組件交流信息的主要手段是發(fā)送和接受事件AWT事件模型一個(gè)事件源可以注冊(cè)事件監(jiān)聽器對(duì)象,當(dāng)事件源檢測(cè)到某種事件發(fā)生時(shí),將激活檢測(cè)器對(duì)象中一個(gè)相應(yīng)的事件處理方法。事件的監(jiān)聽原理是:首先事件源必須對(duì)需要發(fā)送的事件進(jìn)行注冊(cè),然后注冊(cè)事件監(jiān)聽器,并說明該事件源所發(fā)生的事件向什么組件發(fā)送,也就是說,在事件源組件中實(shí)現(xiàn)方法并在監(jiān)聽組件中注冊(cè)該事件源。計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用JavaBean應(yīng)用舉例一個(gè)NameCard的JavaBean代碼如下(文件名NameCard.java):packagecards;publicclassNameCard{StringName,Address;publicNameCard(){this.Name="John";this.Address="No,Road,City,Country";}publicvoidsetName(StringmyName){this.Name=myName;}publicStringgetName(){return(this.Name);}publicvoidsetAddress(StringmyAddress){this.Address=myAddress;}publicStringgetAddress(){return(this.Address);}}計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用JavaBean應(yīng)用舉例—編譯與調(diào)試存儲(chǔ)在Web應(yīng)用特定的文件夾中,即Web應(yīng)用根目錄中“WEB-INF\classes\cards”下,用javacNameCard.java編譯生成NameCard.class,該文件將存儲(chǔ)在cards包中,即cards子文件夾中。當(dāng)JavaBean完成后,為了測(cè)試JavaBean的功能,可以在bean類中臨時(shí)增加main方法,借用main()方法來調(diào)試beanJavaBean的主要應(yīng)用是將JavaBean應(yīng)用于JSP頁面中計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用6.4JSP技術(shù)JSP的運(yùn)行環(huán)境JSP的語法結(jié)構(gòu)JSP中的數(shù)據(jù)類型及其轉(zhuǎn)換JSP內(nèi)置對(duì)象在JSP中使用JavaBeanJSP中的文件與文件夾操作JSP中的參數(shù)傳遞方法計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用什么是JSP?什么是JSP?使用Servlet開發(fā)服務(wù)端中間層邏輯,實(shí)在是太復(fù)雜了。為此,Sun公司于1999年推出JSP(JavaServerPages)技術(shù)。JSP是一種Java平臺(tái)技術(shù),它是在傳統(tǒng)的HTML文檔(*.htm,*.html)中加入Java腳本程序(Scriptlet)和JSP標(biāo)記來構(gòu)成的,它包裝了JavaServlet系統(tǒng)界面,用戶可以在JSP頁面上直接書寫Java代碼,這樣就大大簡(jiǎn)化了Java和Servlet的使用難度。作為一種服務(wù)器腳本語言,JSP是在編譯成Servlet后才能實(shí)際運(yùn)行。當(dāng)用戶瀏覽.jsp網(wǎng)頁時(shí),首先在服務(wù)器端執(zhí)行.jsp文檔中服務(wù)端代碼,然后把執(zhí)行結(jié)果傳送到客戶端瀏覽器,基本上與瀏覽器無關(guān)。計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用JSP的運(yùn)行環(huán)境運(yùn)行與開發(fā)環(huán)境安裝Java環(huán)境安裝JavaVM(JRE),Tomcat需要JavaVM的支持。安裝Tomcat應(yīng)用服務(wù)器。Apache服務(wù)器可以根據(jù)需要安裝Apache服務(wù)器。計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用建立一個(gè)JSP程序的測(cè)試站點(diǎn)建立測(cè)試站點(diǎn)的主目錄修改Tomcat的默認(rèn)設(shè)置將Tomcat默認(rèn)的Web服務(wù)將端口號(hào)為8080改為80。定義虛擬目錄增加新Web應(yīng)用的上下文<Contextpath="/myjsp"docBase="d:\MyJSP\"debug="0"reloadable="true"privileged="true"/>運(yùn)行jsp程序/myjsp/1.jsp。計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用JSP的語法結(jié)構(gòu)JSP元素JSP文檔是通過在HTML文檔中加入Java腳本程序構(gòu)成的。Java腳本程序代碼用“<%”和“%>”標(biāo)記括起來JSP元素的類型腳本元素規(guī)范JSP中所使用的Java代碼指令元素針對(duì)JSP引擎控制轉(zhuǎn)譯后的Servlet的整個(gè)結(jié)構(gòu)動(dòng)作元素主要連接到用到的組件(如JavaBeans和Plugin),另外它還可以控制JSP引擎的行為。計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用JSP指令概念JSP指令是JSP的引擎。他們不直接產(chǎn)生任何可視的輸出,只是指示引擎如何處理JSP頁面中的內(nèi)容。JSP指令由<%@…%>標(biāo)記,一般形式是:<%@指令名屬性1=“屬性值”屬性2=“屬性值”...屬性n=“屬性值”%>控制JSP引擎的行為。主要的兩種指令是page和include計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用Page指令一般形式<%@page

[language="java"]

[extends="package.class"]

[import="{package.class|package.*},..."]

[session="true|false"]

[buffer="none|8kb]

[autoFlush="true|false"]

[isThreadSafe="true|false"]

[info="text"]

[errorPage="relativeURL"]

[contentType="mimeType[;charset=characterSet]"|

"text/html;charset=ISO-8859-1"]

[isErrorPage="true|false"]

%>

可選項(xiàng)language屬性,所使用的腳本語言。例如,<%@pagelanguage=“Java”%>。import屬性,腳本元素中使用的類,與Java中的import聲明作用相同,應(yīng)是類的全名,或者類所在的包。例如:<%@pageimport="java.util.Date"%><%@pageimport="java.io.*"%>(java.io包中的所有類在本頁中都可以使用)計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用Page指令(續(xù)1)可選項(xiàng)session屬性,是否使用session對(duì)象。errorPage屬性,設(shè)置異常處理網(wǎng)頁。IsErrorPage屬性,當(dāng)前網(wǎng)頁是否是另一個(gè)JSP網(wǎng)頁的異常處理網(wǎng)頁。contentType屬性,輸出到客戶端的MIME類型和字符集。默認(rèn)的字符集是ISO-8859-1。例如,使用中文字符集:<%@pagecontentType="gb2312"%>計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用Page指令舉例可以在幾乎所有的JSP頁面頂部找到指令page,使用page指令(atpage)可以定義網(wǎng)頁的處理方式,如到何處尋找Java類支持等。例如:<%@pageimport="java.util.Date"%><%@pageerrorPage="errorPage.jsp"%>(當(dāng)出現(xiàn)錯(cuò)誤時(shí)的錯(cuò)誤處理網(wǎng)頁)<%@pagesession="true"%>計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用include指令概念在JSP網(wǎng)頁中包含其他文件的指令,它是在JSP引擎將它轉(zhuǎn)譯成Servlet時(shí)產(chǎn)生作用的指令一般形式<%@includefile="插入文件的url"%>被包含進(jìn)的文件必須符合JSP的語法,應(yīng)是靜態(tài)文本、指令元素、腳本元素和動(dòng)作元素。計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用變量聲明概念JSP的聲明用于定義頁面級(jí)的變量,如果代碼太多的話,最好寫入一個(gè)單獨(dú)的Java類中。聲明由<%!…%>定義。必須通過分號(hào)來結(jié)束變量聲明,同時(shí)任何內(nèi)容必須是有效的Java語句,例如:<%!inti=0;%>。注意,聲明后面的分號(hào)不能省略。計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用表達(dá)式概念表達(dá)式是常量、變量、函數(shù)、運(yùn)算符、括號(hào)連接而成的式子。在程序設(shè)計(jì)中,通過表達(dá)式完成對(duì)數(shù)據(jù)的運(yùn)算,以及為變量賦值。在JSP文檔中,可以將表達(dá)式的結(jié)果直接輸出到頁面中。一般形式是:<%=表達(dá)式%>。舉例<%=i%>(輸出變量i的值)<%="Hello"%>(輸出字符串常量)計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用代碼段/腳本片段JSP代碼段或腳本片段包含在“<%…%>”標(biāo)記對(duì)內(nèi)舉例<%for(inti=1;i<=4;i++){%><h<%=i%>>你好</h<%=i%>><%}%>計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用注釋在文檔中加入HTML注釋,用戶可以通過查看頁面源代碼來看到這些注釋的內(nèi)容。如果不想讓用戶看到注釋內(nèi)容,應(yīng)將其嵌入到<%--…--%>標(biāo)記對(duì)中,一般形式是:<%--注釋內(nèi)容--%>計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用舉例編寫一個(gè)jsp文檔,顯示網(wǎng)頁的訪問次數(shù)首先定義一個(gè)統(tǒng)計(jì)訪問次數(shù)的文檔,文檔名為mycount.jsp<%!privateintaccessCount=0;%><tableborder="0"width="100%"height="60"bgcolor="#FFFF00"><tr><tdwidth="20%"height="53">主機(jī)名:<%=request.getRemoteHost()%></td><tdwidth="20%"height="53">訪問次數(shù):<%=++accessCount%></td><tdwidth="60%"height="53">當(dāng)前時(shí)間:<%=newDate()%></td></tr></table>計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用舉例(續(xù))定義一個(gè)jsp頁面,包含上述文件,輸出一個(gè)隨機(jī)數(shù),mypage.jsp文檔內(nèi)容如下:<%@pageimport="java.util.*"%><html><head><title>JSP中的文件包含</title></head><body><%!RandomRdmNumber=newRandom();%><%@includefile="mycount.jsp"%><%out.println(RdmNumber.nextInt(100));//輸出100以內(nèi)的隨機(jī)整數(shù)%></body></html>計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用JSP中的數(shù)據(jù)類型及其轉(zhuǎn)換整數(shù)類型和字符串類型的轉(zhuǎn)換字符串類型和和日期型數(shù)據(jù)的轉(zhuǎn)換字符串類型和字符串?dāng)?shù)組類型的轉(zhuǎn)換數(shù)組類型和集合類計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用整數(shù)類型和字符串類型的轉(zhuǎn)換將字串String類型轉(zhuǎn)換成整數(shù)int類型通過Integer類可以將字符串轉(zhuǎn)化為某種進(jìn)制的整數(shù)數(shù)據(jù),一般形式是:inti=Integer.parseInt([String]);或inti=Integer.parseInt([String],[intradix]);或inti=Integer.valueOf(my_str).intValue();將整數(shù)int類型數(shù)據(jù)轉(zhuǎn)換成字串String類型數(shù)據(jù)Strings=String.valueOf(i);或Strings=Integer.toString(i);或Strings=""+i;對(duì)于Double,F(xiàn)loat,Long類型數(shù)據(jù)和字符串類型之間的轉(zhuǎn)換方法大同小異longln=java.lang.Long.parseFloat(“123.5”);,或floatf=Float.valueOf("123.5").floatValue()。計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用字符串類型和和日期型數(shù)據(jù)的轉(zhuǎn)換在數(shù)據(jù)庫中,通常有Datetime類型的數(shù)據(jù)字段。在MySQL或MSSQL中,可以直接把字符串插入日期類型的列中,SQL會(huì)隱式做格式轉(zhuǎn)換,將字符串類型轉(zhuǎn)為日期類型。但是,字符串的格式必須是yyyy-mm-dd或yyyymmdd形式,例如:2008-12-10或20081210。計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用字符串類型和字符串?dāng)?shù)組類型的轉(zhuǎn)換在JSP頁面中,一種常用的操作就是將一個(gè)字符串split成一個(gè)字符串?dāng)?shù)組,或者將一個(gè)字符串?dāng)?shù)組合并成一個(gè)字符串。例如,將string=“aa,bb,cc”轉(zhuǎn)換成Vector數(shù)據(jù)類型,分別包含三個(gè)字符串元素“aa”、“bb”、“cc”。StringstrData="aa,bb,cc";Stringstrlist[]=newString[20];strlist=strData.split(",");計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用數(shù)組類型和集合類數(shù)組類型使用數(shù)組避免了同步、額外的方法調(diào)用和不必要的重新分配空間所帶來的消耗。Vector類當(dāng)數(shù)組中元素的個(gè)數(shù)不確定時(shí),可以使用java.util.Vector類Vector集合只能存放java.lang.object對(duì)象,不能用于存放基本類型數(shù)據(jù)ArrayList類ArrayList和Vector都是使用數(shù)組來控制集合中的對(duì)象,當(dāng)從一個(gè)指定的位置(通過索引)查找數(shù)據(jù)或是在集合的末尾增加、移除一個(gè)元素時(shí),兩者所花費(fèi)的時(shí)間相同。Vector是同步的,它的一些方法保證了Vector中的對(duì)象是線程安全的。ArrayList則是異步的,因此ArrayList中的對(duì)象并不是線程安全的。因?yàn)橥降囊髸?huì)影響執(zhí)行的效率,所以如果不需要線程安全的集合那么使用ArrayList是一個(gè)很好的選擇,這樣可以避免由于同步帶來的不必要的性能開銷。計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用JSP內(nèi)置對(duì)象什么是內(nèi)置對(duì)象內(nèi)置對(duì)象是由開發(fā)環(huán)境所定義的具有特定功能的對(duì)象,在JSP腳本段中,用戶可以直接使用。常用內(nèi)置對(duì)象request對(duì)象response對(duì)象out對(duì)象session對(duì)象application對(duì)象config對(duì)象page對(duì)象exception對(duì)象計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用request對(duì)象功能通過該對(duì)象可以獲取客戶端的輸入信息??梢缘玫秸?qǐng)求的參數(shù)、請(qǐng)求類型(GET、POST、HEAD等)以及HTTPheaders(cookies、referer等)等信息。這是一個(gè)javax.servlet.HttpServletRequest對(duì)象。常用的方法getCookie()、getHeaders()、getAttribute()、getMethod()、getParameter()和getParameterName()等例如:<%Stringname=request.getParameter("userName");out.println(name);%>計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用response對(duì)象功能向客戶端返回請(qǐng)求。返回請(qǐng)求信息時(shí),輸出流要進(jìn)行緩存。它是一個(gè)javax.servlet.HttpServletResponse對(duì)象。常用方法addCookie()、addHeader()、sendError()和sendRedirect()等計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用out對(duì)象功能將結(jié)果輸出到客戶端。常用方法print(),println(),newLine()例如:<%out.println("Hello");%>計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用session對(duì)象功能Session對(duì)象是JSP為每一個(gè)會(huì)話而建立的個(gè)人對(duì)象,可以存儲(chǔ)及提供個(gè)別用戶獨(dú)享的永久或半永久信息。它是一個(gè)與request相關(guān)的javax.servlet.http.HttpServletSession對(duì)象。會(huì)話(session)是指一個(gè)用戶和Web服務(wù)器之間的一次鏈接。當(dāng)用戶使用瀏覽器登錄到Web服務(wù)器、并初次瀏覽一個(gè)JSP應(yīng)用的某個(gè)網(wǎng)頁開始、直到用戶離開網(wǎng)站或超時(shí)未繼續(xù)瀏覽該網(wǎng)站網(wǎng)頁為止,之間的瀏覽操作算作一次會(huì)話(Session)。計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用application對(duì)象功能可存儲(chǔ)并提供給一組JSP應(yīng)用所有用戶的共享信息,有效范圍為構(gòu)成該JSP應(yīng)用的所有JSP頁面。是一個(gè)javax.servlet.ServletContext對(duì)象會(huì)話(session)是指一個(gè)用戶和Web服務(wù)器之間的一次鏈接。當(dāng)用戶使用瀏覽器登錄到Web服務(wù)器、并初次瀏覽一個(gè)JSP應(yīng)用的某個(gè)網(wǎng)頁開始、直到用戶離開網(wǎng)站或超時(shí)未繼續(xù)瀏覽該網(wǎng)站網(wǎng)頁為止,之間的瀏覽操作算作一次會(huì)話(Session)。計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用其他對(duì)象config對(duì)象用于傳遞在Servlet程序初始化時(shí)所需的信息。pageContext對(duì)象該對(duì)象提供了對(duì)頁面上的所有對(duì)象以及命名空間的訪問,用于管理網(wǎng)頁屬性。page對(duì)象當(dāng)前頁面,相當(dāng)于Java中的this。exception對(duì)象錯(cuò)誤處理對(duì)象,用于處理捕捉到的異常。計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用舉例—用戶登錄頁面編寫一個(gè)jsp文檔,完成一個(gè)登錄界面,輸入用戶名和密碼,如果輸入guest則轉(zhuǎn)移到一個(gè)默認(rèn)的首頁,如果不輸入用戶名,則重新回到該頁,直到輸入正確的用戶名和密碼,此時(shí)重定向到合法的網(wǎng)頁。計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用舉例—用戶登錄頁面(代碼)<!--login.jsp--><html><head><title>login</title></head><body><%StringuserName=request.getParameter("userName");if(userName!=null){if(userName.equals("guest"))response.sendRedirect("/");elseresponse.sendRedirect("/");}%>計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用舉例—用戶登錄頁面(代碼)<tableborder="0"cellpadding="0"width="100%"height="100%"><tr><tdwidth="100%"> <tableborder=2cellspacing=0cellpadding=0width=300align=center> <formaction="login.jsp"method="GET"> <trheight=50> <tdalign=centerstyle="font-size:20;font-weight:bold;color:#000075">用戶登錄</td> </tr> <tr><tdstyle="font-size:16">用戶名<inputtype=textname=userName></td></tr> <tr><tdstyle="font-size:16">密碼<inputtype=textname=userPassword></td></tr> <tr><tdalign=center><inputtype="submit"value=登錄></td></tr> </form> </table></td></tr></table></body></html>計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用舉例—顯示在線人數(shù)編寫一個(gè)統(tǒng)計(jì)會(huì)話人數(shù)的java類,代碼內(nèi)容如下(文檔名SessionCounter.java)packagepub;importjavax.servlet.*;importjavax.servlet.http.*;publicclassSessionCounterimplementsHttpSessionListener{privatestaticintactiveSessions=0;publicvoidsessionCreated(HttpSessionEventse){activeSessions++;}publicvoidsessionDestroyed(HttpSessionEventse){if(activeSessions>0)activeSessions--;}publicstaticintgetActiveSessions(){returnactiveSessions;}}計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用舉例—顯示在線人數(shù)(續(xù)1)編寫調(diào)用該SessionCounter.java的jsp文檔,文檔名myonline.jsp,內(nèi)容如下:<html><head><metahttp-equiv="refresh"content="60"></head><body><%@pageimport="pub.SessionCounter"%>在線人數(shù):<%=SessionCounter.getActiveSessions()%></body></html>計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用舉例—顯示在線人數(shù)(續(xù)2)修改d:\MyJSP\WEB-INF\web.xml,在<web-app>…</web-app>內(nèi),添加如下內(nèi)容:<!--Listeners--><listener><listener-class>pub.SessionCounter</listener-class></listener>計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用在JSP中使用JavaBean使用JavaBean可以更好的將業(yè)務(wù)邏輯代碼和JSP的HTML標(biāo)記進(jìn)行分離,便于系統(tǒng)的維護(hù)一般形式<jsp:useBeanid="實(shí)例名"class="包.類"scope="page|request|session|application"/>參數(shù)id指定一個(gè)JavaBean類的實(shí)例名,如果這個(gè)實(shí)例已經(jīng)存在,將直接引用這個(gè)實(shí)例;如果這個(gè)實(shí)例不存在,將通過后面class參數(shù)中的定義新建一個(gè)類的實(shí)例。Class參數(shù)設(shè)置存儲(chǔ)JavaBean的路徑和類的名稱,例如class=“cards.NameCard”,則表明要使用Web應(yīng)用根目錄中“WEB-INF\classes\cards”下的一個(gè)NameCard.class文件,其中cards是包名,NameCard為JavaBean對(duì)應(yīng)的Java類名。Scope用于定義id這個(gè)實(shí)例存在的范圍計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用舉例--JavaBean應(yīng)用舉例一個(gè)NameCard的JavaBean代碼如下(文件名NameCard.java):packagecards;publicclassNameCard{StringName,Address;publicNameCard()//默認(rèn)構(gòu)造函數(shù){this.Name="John";this.Address="No,Road,City,Country";}publicvoidsetName(StringmyName){this.Name=myName;}publicStringgetName(){return(this.Name);}publicvoidsetAddress(StringmyAddress){this.Address=myAddress;}publicStringgetAddress(){return(this.Address);}}計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用舉例--JavaBean應(yīng)用舉例(續(xù))使用JavaBean:<%@pagelanguage="java"%><jsp:useBeanid="mycard"class="cards.NameCard"scope="application"/><html><body><%mycard.setName("HaoXW");mycard.setAddress("No.27ShandaSouthernRoad,Jinan,China");%>姓名:<%=mycard.getName()%><br>地址:<%=mycard.getAddress()%><br></body></html>計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用JSP中的文件與文件夾操作在基于Web的作業(yè)管理系統(tǒng)中,在Web應(yīng)用的根目錄下,包含一個(gè)homeworkdata文件夾,該文件中包含了不同的子文件夾,每一個(gè)子文件夾對(duì)應(yīng)一門課程,課程子文件夾中又包含不同的子文件夾,每個(gè)子文件夾對(duì)應(yīng)一位任課教師,在每個(gè)任課教師子文件夾中,有一系列子文件夾,每個(gè)子文件夾保存一名同學(xué)的課程作業(yè)。計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用JSP中的文件與文件夾操作--示例代碼1<%@pagecontentType="text/html;charset=GBK"%><%@pageimport="java.sql.*"%><%@pageimport="java.io.*"%><jsp:useBeanid="workE"scope="page"class="pub.connedu"/><jsp:useBeanid="workhomework"scope="page"class="pub.connhomework"/><jsp:useBeanid="workc"scope="page"class="pub.ISOtoGb2312"/><%!ResultSetrs1=null,rs2=null;Stringcoursedm="dxjc";//課程代碼Stringteacher_account="ll01",teacher_accountx="ll02";//教師帳號(hào)Stringstudentid="20080102016";//學(xué)生賬號(hào)Stringpath1="",path2="";//文件(夾)物理絕對(duì)路徑String[]temp=null;//存放當(dāng)前目錄中所有的文件和子目錄的絕對(duì)路徑名字的字符串String[]dlist=null,flist=null;//分別存放子文件夾和文件的集合%>計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用JSP中的文件與文件夾操作--示例代碼2<%path1=request.getRealPath("");//取Web應(yīng)用的根目錄path1+="\\homeworkdata\\"+coursedm;//將進(jìn)行文件復(fù)制的目錄path1+="\\"+teacher_accountx;path1+="\\"+studentid+"\\";Filed1=newFile(path1);//建立代表Sub目錄的File對(duì)象,并得到它的一個(gè)引用

path2=request.getRealPath("");path2+="\\homeworkdata\\"+coursedm;//將path1目錄下的所有文件復(fù)制到path2中path2+="\\"+teacher_account;//和path1不同的地方,即對(duì)應(yīng)的教師子目錄不同path2+="\\"+studentid+"\\";Filed2=newFile(path2);if(!d2.exists()){d2.mkdirs();//新建path2對(duì)應(yīng)的子目錄out.println("newafolder"+path2+"<br>");}計(jì)算機(jī)網(wǎng)絡(luò)原理、技術(shù)及應(yīng)用JSP中的文件與文件夾操作--示例代碼3//將path1目錄下的所有文件復(fù)制到path2中FileoldFile,newFile,tempFile;if(d1.exists())//檢查path1對(duì)應(yīng)的子目錄是否存在

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論