Java语言概述课件_第1页
Java语言概述课件_第2页
Java语言概述课件_第3页
Java语言概述课件_第4页
Java语言概述课件_第5页
已阅读5页,还剩297页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Java語言概述1.1JAVA的由來與發展Java誕生於Sun公司的一個叫做Green的專案。最初,系統開發組準備用C++來開發專案,但是C++太複雜,且安全性差。最後Green專案開發組的成員研究出了另外一種用於網路的精巧而且安全的語言,他們把這種新的語言命名為Java。1.2Java語言編程的特點1.使用簡潔

Java語言省略了C++中一些複雜模糊的概念;它可以在小機器上獨立運行2.面向對象

它的設計集中於對象及其介面3.分佈式4.系統健壯5.系統安全

1.2Java語言編程的特點6.中性結構

7.可移植好

8.解釋執行9.高性能

10.多線程11.動態

1.3Java與網路Java在網路中的應用大致分為兩種,即Web流覽和網路應用系統。1.Web流覽

Applet、Servlet和JSP三大技術應用在Web流覽中,進一步增強了Web服務的能力。2.網路應用系統

Java有利於開發網路應用系統1.3Java與網路3.Java程式的分類JavaApplication:獨立的Java應用程式;JavaApplet:Java小應用程式

;JavaServlet:Java伺服器小程式;JSP(JavaServerPage):一種用於生成動態網頁的技術;JavaBeans:可重用的、獨立於平臺的Java程式組件1.4幾個需要澄清的常見誤解1.Java編程易學大部分函數、常數、類、介面等需要牢牢記住2.Java就是HotJavaJava是一種編程語言,可以用它來編寫Applet或獨立程式;HotJava是一個用Java編寫的Web流覽器

2.1構建Java運行環境1.在Windows平臺上安裝JDK推薦安裝JDK的最低系統配置是IntelPentium處理器、至少32MB記憶體以及至少50MB的剩餘硬碟空間。2.1構建Java運行環境

登錄Sun公司的網站來下載Windows版的JDK,本書中使用的是JDK1.4版本,安裝程式名為j2sdk-1_4_1-win.exe,表示這是Java2標準版的開發工具包。這個安裝程式是一個自解壓的程式,運行該程式即可以把JDK解壓縮並安裝到硬碟上。根據WINDOWS版本,進行環境配置.2.1構建Java運行環境(1)WINDOWS9X系統直接編輯系統的autoexec.bat檔,修改其PATH條目,PATHC:\WINDOWS;C:\WINDOWS\COMMAND;C:\JAVA\BIN在autoexec.bat檔內放置一個SET命令.如果把JDK安裝到了C盤的根目錄:SETHOME=C:\2.1構建Java運行環境(2)在WINDOWSNT/2000系統上配置

2.1構建Java運行環境2.Java開發環境集成開發環境(IDE)常用的集成開發環境主要有

JavaWorkShop、SymantecCafé、BorlandJbuilderEnterpriseEdition、OracleJdeveloper、SybasePowerJ、IBMVisualAgeforJava等等。2.1構建Java運行環境(2)代碼編輯工具(a)記事本2.1構建Java運行環境(b)UltraEdit2.2構建Servlet/JSP運行環境1.Tomcat簡介

Sun公司推薦Tomcat來作為Servlet和JSP容器,Tomcat的最新版本中實現了Servlet和JSP的最新規範

2.Tomcat的安裝和配置

2.2構建Servlet/JSP運行環境Tomcat的安裝介面2.2構建Servlet/JSP運行環境Tomcat的啟動介面2.2構建Servlet/JSP運行環境Tomcat的運行介面2.3使用WeblogicServer1.Weblogic簡介:WeblogicServer是BEA公司開發的Java應用伺服器系統程式,用於組建多層次的、安全的、大型的和分佈式的Web應用,如電子商務等等。

WeblogicServer提供了開發和利用伺服器端業務邏輯的基本架構,支持分佈式編程模型。

WeblogicServer實現的J2EE服務可以為企業級的分佈式應用提供一個極佳的開發和運行環境。

2.3使用WeblogicServerWeblogic的安裝介面2.3使用WeblogicServerWeblogic的安裝嚮導2.3使用WeblogicServer設置Weblogic伺服器的用戶名和密碼2.3使用WeblogicServerWeblogic的啟動介面3.1Java編程結構

1.程式設計的基本結構Java語言的根源程式代碼由一個或多個編譯單元(compilationunit)組成,每個編譯單元只能包含以下三部分的內容:包聲明語句(packagestatement);包引入語句(importstatement);類聲明語句(classdeclarations)或介面實現語句(interfaceimplementation)。3.1Java編程結構2.Java編程的語法規範Java原始檔案:每個java原始檔案僅包含一個公共類或介面。縮進:應該以4個空格為一個縮進單位。行長:一行不應多於80個字元。折行:在逗號後斷開;在操作符之前斷開;高層級斷開優先於低層級斷開;後面的行和前面的行左對齊等等。3.1Java編程結構注釋:Java程式有兩種注釋,實現注釋和文檔注釋。實現注釋的定界符是/*...*/和//。文檔注釋是Java僅有的,定界符是/**...*/,用於產生javadoc。

識別字的命名規範:控制結構:間隔: 3.1Java編程結構3.Java關鍵字

Java關鍵字和保留字Java語言中的這些關鍵字和保留字都是大小寫敏感的。

abstractconstfinalinstanceofprivateswitchvoidbooleancontinuefinallyintprotectedsynchronizedvoiatilebreakdefaultfloatinterfacepublicthiswhilebytedoforlongreturnthrowcasedoublegotonativeshortthrowscatchelseifnewstatictransientcharextendsimplementsnullstrictfptrueclassfalseimportpackagesupertry3.1Java編程結構4.Java數據類型

布爾類型布爾類型(boolean)只有兩個值:

true和false

字元類型單個字元通常被表示為字元類型(char)Java語言使用16位無符號整數來表示一個字元,範圍是0~65535。3.1Java編程結構特殊字元

換碼序列名稱Unicode值\b退格\u0008\tTab(製錶)\u0009\n換行\u000a\r硬回車\u000d\”雙引號\u0022\’單引號\u0027\\反斜杠\u005c3.1Java編程結構整數類型整數類型是指那些沒有小數部分的數字,負數是不允許的。Java提供了四種整數類型Java整數類型表類型存儲空間大小最小值最大值byte8bits-2727-1short16bits-215215-1int32bits-231231-1long64bits-263263-13.1Java編程結構浮點類型浮點類型是指那些含有小數部分的數字,共有兩種浮點類型:float和double。浮點類型表

數據類型存儲空間大小float32bitsdouble64bits3.1Java編程結構5.字串

Java沒有提供內建的字串類型,標準Java庫中包含了一個預定以類,稱作String。每個用雙引號封閉的字串都是String類的一個實例。例如:Strings=”Thisisastring.”;Stringgreeting=”Hello!”;Stringe=””; //一個空字元串3.1Java編程結構6.變數的聲明和初始化

每個變數在使用以前都需要聲明它的數據類型並初始化該變數。

Java有兩種類型的變數,一種是使用原始數據類型的變數,如int、float等,另一種是使用類類型的變數,如String。3.1Java編程結構

如果有多個類型相同的變數需要聲明,還可以在同一行中進行多項聲明。例如:inti,j,k; //i、j、k三者均為int類型聲明了一個變數後,系統會自動給變數一個默認的初始值

變數的類型及初值

變數類型初值變數類型初值byte0short0int0long0Lfloat0.0fdouble0.0dchar‘\u0000’booleanfalseobjectreferencenull3.1Java編程結構

也可以根據程式的需要對變數進行明確的初始化,即給該變數賦一個初值。賦值是通過“=”實現的,“=”左邊是需要初始化的變數,右邊是Java運算式。例如:intanIntegerVariable; //聲明一個int型變數anIntegerVariable=56; //初始化該變數charch; //聲明一個char型變數ch=’C’; //初始化該變數Strings; //聲明一個字串變數s=”Thisisastring.”; //初始化該字串變數3.1Java編程結構7.類型轉換Java語言不支持變數類型之間的任意轉換。允許的轉換包括:

byte->short->int->long->float->double以及char->int。如果不進行強制類型轉換,只能按照箭頭的方向轉換3.1Java編程結構8.數組數組是一種最簡單的複合數據類型,特點是其中的元素都具有相同的數據類型,要創建和使用一個數組,必須包含三部分的內容,即:

聲明、創建和初始化。聲明一個數組要先確定數組元素的數據類型,並在後面加上數組名。例如:inta[]; //C語言風格,聲明一個整數數組charch[]; //C語言風格,聲明一個字元數組Point[]p; //Java語言風格,聲明一個Point型數組double[]d;//Java語言風格,聲明一個double型數組3.1Java編程結構創建一個數組要使用new關鍵字。a=newint[20]; //創建一個包含20個int型數據的數組ch=newch[50];//創建一個包含50個字元型數據的數組Java語言還提供了一種將數組的聲明、創建和初始化同時完成的方法。例如:float[]diameters={1.1f,2.2f,3.3f,4.4f,5.5f};3.2運算式和流程控制1.運算式Java中的運算符(優先順序由高到低排列)

分類運算符一元運算符++--+-!~()算術運算符*/%+-位移運算符<<>>>>>比較運算符<<=>>=instanceof==!=按位運算符&^|短路運算符&&||條件運算符?:賦值運算符=“op=”3.2運算式和流程控制2.流程控制條件語句條件語句包括if-else語句和switch語句。

if-else語句用於對單個條件的判定,可以嵌套使用;

switch語句用於多重選擇,但是只能對char型和除long以外的整數類型進行測試。3.2運算式和流程控制迴圈語句迴圈語句的作用是反復執行一段代碼,直到滿足終止迴圈的條件為止。Java語言提供了兩種迴圈:不確定迴圈和確定迴圈。不確定迴圈就是不知道循環體要被重複執行多少次的情況下使用的一種迴圈語句。不確定迴圈有while迴圈和do-while迴圈。確定迴圈就是明確知道循環體應該重複執行的次數,並能夠在程式中嚴格控制的一種迴圈語句。確定迴圈有for迴圈。3.3Java面向對象程式設計技術Java是一種完全面向對象的語言。面向對象程式設計有兩大特點:抽象數據類型的概念和繼承機制。使用面向對象技術進行程式開發的好處有兩點:一是使用面向對象技術編寫的類減少了編寫整個程式和調試所需要的時間;另一點是編寫好的代碼可以在不同的環境下重用。3.3Java面向對象程式設計技術1.對象、類和方法

對象就是變數和相關的方法的集合,其中變數表明對象的狀態;

方法表明對象所具有的行為。當多個對象具有一些共性時,可以將這些共性抽象出來,這就是類。3.3Java面向對象程式設計技術2.繼承繼承是面向對象程式設計的一個重要機制。

Java不支持多重繼承。繼承可以實現代碼的複用,使程式的複雜度降低。在繼承機制中還有兩個比較特殊的類,即final類和abstract類。3.3Java面向對象程式設計技術3.方法的重載和重寫

方法重載指的是在一個類中可以有多個具有相同名字的方法;方法重寫指的是子類可以重新實現父類的某些方法。3.3Java面向對象程式設計技術方法重載和方法重寫主要有以下四點不同:重載的方法互相補充;重寫的方法往往會隱藏原方法。重載的方法可以在一個類中以任何數量存在;父類中的每一個方法只能在子類中被重寫一次。重載的方法在參數列表上與原方法不同;重寫的方法在參數類型和參數順序上必須與原方法相同。重載的方法的返回類型可以自由選擇;重寫的方法的返回類型必須與原方法相同。3.3Java面向對象程式設計技術4.包封裝

Java提供包來管理類名空間。包是對類和其他包的封裝,它實際上提供了一種命名機制和可見性限制機制。

5.訪問許可權在Java中,對類的實例變數和實例方法都有訪問許可權的控制。3.3Java面向對象程式設計技術不同範圍中的訪問許可權

同一個類中同一個包中不同包中的子類不同包中的非子類private√protected√√√public√√√√friendly√√3.3Java面向對象程式設計技術6.介面介面就是方法定義和常量值的集合。介面中的實例方法一般被定義為

public或abstract3.4例外處理1.例外處理的類層次

Java中例外類的最頂層是Throwable類,所有的異常事件都是它的後代。Java語言中的異常事件分為兩大類:

Exception類和Error類。3.4例外處理2.例外處理的兩種方法對於非運行時例外必須捕獲或聲明,而對運行時例外,可以交給Java運行時系統來處理。使用try-catch-finally語句捕獲例外

使用throws子句聲明例外

3.4例外處理3.定義自己的例外類

我們也可以用繼承的方法定義自己的例外類。對於自定義的例外類,通常把它作為Exception類的子類3.5線程

程式中單個順序的流控制稱為線程。多線程就是在單個程式中可以同時運行多個不同的任務。1.線程的狀態

一個線程有四種狀態:準備狀態(Ready)運行狀態(Running)等待狀態(Waiting)死亡狀態(Dead)3.5線程2.線程體的構造構造線程體就是要構造滿足線程功能要求的run()方法。run()方法的實現有兩種方法繼承Thread類構造線程體

實現Runnable介面構造線程體

兩種創建線程體的方法核心內容都是要重寫run()方法,不同點即run()方法的位置不同。3.6Java的輸入/輸出流

可從中讀出一系列位元組的對象稱為“輸入流”(InputStream);而能向其中寫入一系列位元組的對象則稱為“輸出流”(OutputStream)。3.6Java的輸入/輸出流1.輸入/輸出流的常用方法

輸入流(1)intread()、intread(buye[])、intread(byte[],int,int)(2)voidclose()(3)intavailable()(4)skip(long)(5)mardSupported()、mark(int)、reset()3.6Java的輸入/輸出流輸出流(1)write(int)、write(byte[])、write(byte[],int,int)

(2)close()(3)flush()3.6Java的輸入/輸出流2.輸入/輸出的類層次

InputStreamSequenceInputStreamPipedInputStreamByteArrayInputStreamFileInputStreamFilterInputStreamStringBufferInputStreamDataInputStreamPushbackInputStreamLineNumberInputStreamBufferedInputStream3.6Java的輸入/輸出流FileInputStream和FileOutputStream

BufferedInputStream和BufferedOutputStream

DataInputStream和DataOutputStream

PipedInputStream和PipedOutputStream

InputStreamReader和InputStreamWriter

BufferedReader和BufferedWriter

3.6Java的輸入/輸出流Reader的類層次ReaderBufferedReaderStringReaderInputStreamReaderCharArrayReaderPipedReaderFilterReader3.6Java的輸入/輸出流3.檔

檔對象的創建(1)FilemyFile;myFile=newFile(“myfile”);//當前目錄下的

myfile檔(2)myFile=newFile(“/mydocs”,”myfile”);//mydocs目錄下的

myfile檔(3)FilemyDir=newFile(“/mydocs”);myFile=newFile(myDir,”myFile”);//結果與第二種構造方法類似3.6Java的輸入/輸出流檔測試的一些方法

(1)檔案名資訊StringgetName():獲取檔案名StringgetPath():獲取檔路徑StringgetAbsolutePath():獲取檔的絕對路徑StringgetParent():獲取由當前對象所表示檔的父目錄booleanrenameTo(FilenewName):將當前對象更名為參數所制定的檔案名3.6Java的輸入/輸出流(2)檔測試booleanexists():檢測本文件是否存在booleancanWrite():判斷是否可以向指定檔中寫入數據booleancanRead():判斷是否可以從指定檔中讀取數據booleanisFile():檢測本對象是否代表一個檔booleanisdirectory():檢測本對象是否代表一個目錄booleanisAbsolute():檢測被對象是否代表一個絕對路徑名3.6Java的輸入/輸出流(3)檔資訊和實用工具longlastModified():檢測當前File對象所對應的檔最後一次被修改的時間longlength():檢測檔長度booleandelete():刪除當前File對象所對應的檔3.6Java的輸入/輸出流(4)目錄實用工具booleanmkdir():建立一個目錄,其路徑名由當前File對象指定String[]list():列出當前File對象所指定目錄中的檔4.1 JDBC的發展與應用1996年夏天,SUN公司發佈了JDBC1.0工具包,它包含在JDK1.1中。1998年在SUN發佈JAVA2時,JDBC2.0隨著JDK1.2問世。

JDBC能夠讓Java應用與各種各樣的資料庫連接,JDBC和Java的結合使Java應用真正實現了“一次編寫,處處運行”。4.2 JDBC設計方案JDBC包含兩層:

第一層是JDBCAPI,這個API和JDBC驅動程式管理器API通信,向它發送各種不同的SQL語句;第二層即JDBC驅動器管理器API,這個管理器和各種不同的第三方驅動程式通信,由它們負責連接資料庫,返回查詢資訊或執行查詢語句指定的動作。4.2 JDBC設計方案JDBC和數據庫的通信路徑

JDBCDriverAPIJDBCAPIJava應用程式JDBC驅動程式管理器JDBC/ODBC橋供應商提供的JDBC驅動程式ODBC驅動程式資料庫資料庫4.2 JDBC設計方案JDBC驅動程式分成四類:第一類驅動程式是JDBC-ODBC橋第二類驅動程式由兩部分組成,一部分是Java語言代碼,另一部分是本地代碼第三類驅動程式是一個純Java客戶庫第四類驅動程式是一個純Java庫4.3 JDBC的典型應用在兩層模型中,稱為Client/Server結構資料庫協議客戶端JDBC資料庫伺服器4.3 JDBC的典型應用在三層模型中,分開了視覺圖像(在客戶端)、事務邏輯(在中間層)和源數據(在資料庫中)客戶端(可視的演示)中間層(商業邏輯)JDBC資料庫伺服器HTTP、RMI等數據協議5.1 JDBC的對象及其關係幾個比較常用的JDBC對象包括:Connection對象DriverManager對象Statement對象ResultSet對象5.1 JDBC的對象及其關係JDBC類體系層次

ResultSetStatementPreparedStatementCallableStatementConnectionDriverManagerJDBC/ODBC橋Oracle驅動程式ODBC數據源Oracle資料庫5.2 用JDBC連接資料庫1.資料庫URL

資料庫URL包括以下內容:(1)定義所用的資料庫類型;(2)所有資料庫連接資訊(主機、端口、資料庫名、用戶訪問和口令)。資料庫URL的語法如下:

jdbc:<子協議>:<資料庫名>5.2 用JDBC連接資料庫2.建立連接

通過加載驅動程式,並使用資料庫URL來構造連接,就可以建立一個資料庫的連接了。例如:Class.forName(“oracle.jdbc.driver.OracleDriver”);//裝載驅動程式類Connectionconn=DriverManager.getConnection(“jdbc:oracle:thin:@MyOracleDB”,”scott”,”tiger”);//構造一個資料庫連接5.3 用JDBC實現資料庫查詢構造查詢需要考慮以下幾個方面的問題:選擇合適的語句進行構造;區別數據的檢索和數據的更新。5.3 用JDBC實現資料庫查詢1.創建表

COFFEES數據表COF_NAMESUP_IDPRICESALESTOTALColombian1017.9900French_Roast498.9900Espresso1509.9900Colombian_Decaf1018.9900French_Roast_Decaf499.99005.3 用JDBC實現資料庫查詢創建COFFEES表的程式如下:CREATETABLECOFFEES (COF_NAMEVARCHAR(32),SUP_IDINTEGER,PRICEFLOAT,SALESINTEGER,TOTALINTEGER)5.3 用JDBC實現資料庫查詢SUPPLIERS資訊表

SUP_IDSUP_NAMESTREETCITYSTATEZIP101Acme,Inc.99MarketStreetGroundsvilleCA9519949SuperiorCoffee1PartyPlaceMendocinoCA95460150TheHighGround100CoffeeLaneMeadowsCA939665.3 用JDBC實現資料庫查詢創建SUPPLIERS表的程式如下:CREATETABLESUPPLIERS (SUP_IDINTEGER,SUP_NAMEVARCHAR(32),STREETVARCHAR(32),CITYVARCHAR(32),STATEVARCHAR(32),ZIPVARCHAR(32))5.3 用JDBC實現資料庫查詢2.創建處理語句

調用DriverManager.getConnection()方法返回一個Connection對象con,用它可以創建Statement對象,如下面的語句:

Statementstmt=con.createStatement();5.3 用JDBC實現資料庫查詢然後,我們就可以調用Statement類的executeUpdate()方法來創建數據表了。stmt.executeUpdate("CREATETABLECOFFEES"+"(COF_NAMEVARCHAR(32),SUP_IDINTEGER,PRICEFLOAT,"+"SALESINTEGER,TOTALINTEGER)");5.3 用JDBC實現資料庫查詢在一個表中添加數據實際上也是對表數據的更新,因此,我們還可以使用executeUpdate方法實現對表數據的添加。例如下麵的代碼:Statementstmt=con.createStatement();stmt.executeUpdate("INSERTINTOCOFFEES"+"VALUES('Colombian',101,7.99,0,0)");5.3 用JDBC實現資料庫查詢executeUpdate方法可以被調用任意多次。stmt.executeUpdate("INSERTINTOCOFFEES"+"VALUES('French_Roast',49,8.99,0,0)");stmt.executeUpdate("INSERTINTOCOFFEES"+"VALUES('Espresso',150,9.99,0,0)");stmt.executeUpdate("INSERTINTOCOFFEES"+"VALUES('Colombian_Decaf',101,8.99,0,0)");stmt.executeUpdate("INSERTINTOCOFFEES"+"VALUES('French_Roast_Decaf',49,9.99,0,0)");5.3 用JDBC實現資料庫查詢3.從資料庫表中獲取數據

使用SQL語句的SELECT進行查詢

SELECTCOF_NAME,PRICEFROMCOFFEES查詢的結果:COF_NAME PRICE

Colombian 7.99French_Roast 8.99Espresso 9.99Colombian_Decaf 8.99French_Roast_Decaf 9.995.3 用JDBC實現資料庫查詢JDBC把查詢結果返回到ResultSet對象中ResultSetrs=stmt.executeQuery("SELECTCOF_NAME,PRICEFROMCOFFEES");5.3 用JDBC實現資料庫查詢除了要用到ResultSet類的對象以外,還需要兩個方法,即

next()方法和

getXXX()方法,這兩個方法都是ResuleSet類中的方法。5.3 用JDBC實現資料庫查詢SQL數據類型及其相應的Java語言數據類型SQL數據類型Java數據類型INTEGER或INTintSMALLINTshortNUMERIC、DECIMAIL或DECjava.sql.NumericFLOATdoubleREALfloatDOUBLEdoubleCHARACTER或CHARStringVARCHARStringBOOLEANbooleanDATEjava.sql.DateTIMEjava.sql.TimeTIMESTAMPjava.sql.TimestampBLOBjava.sql.BlobCLOBjava.sql.ClobARRAYjava.sql.Array5.4用JDBC實現資料庫更新使用JDBC更新資料庫就是使用excuteUpdate()方法向資料庫傳送SQL語句。這些語句包括SQLINSERT、UPDATE或DELETE語句,也包括DDL語句,如CREATETABLE等。5.4用JDBC實現資料庫更新管理人員想要對COFFEES表中的SALES字段的值進行更新,則可以使用如下的代碼:StringupdateString="UPDATECOFFEES"+ "SETSALES=75"+ "WHERECOF_NAMELIKE'Colombian'";stmt.executeUpdate(updateString);5.4用JDBC實現資料庫更新這段代碼的執行結果應該如下所示:COF_NAME SUP_IDPRICESALES TOTAL

Colombian 101 7.99 75 0French_Roast 49 8.99 00Espresso 150 9.99 0 0Colombian_Decaf 101 8.99 0 0French_Roast_Decaf49 9.99 0 05.4用JDBC實現資料庫更新在Access資料庫管理系統中創建一個MyDB資料庫檔,並在控制面板的ODBC數據源中,添加一個系統DSN,系統數據源的名稱為MyDB,並指向已經創建好的MyDB資料庫5.4用JDBC實現資料庫更新創建ODBC數據源5.4用JDBC實現資料庫更新Access數據源的安裝

6.1程式操作預編譯

我們想對查詢執行1000次,用預編譯語句處理,寫成如下的形式:PreparedStatementprepStmt=con.prepareStatement("SELECTCOF_NAME,PRICEFROMCOFFEES");ResultSetrs;for(inti=0;i<1000;i++){rs=prepStmt.executeQuery(); }6.1程式操作預編譯SELECTCOF_NAME,SUP_IDFROMCOFFEESWHERECOF_NAMELIKE'Colombian';SELECTCOF_NAME,SUP_IDFROMCOFFEESWHERECOF_NAMELIKE'French_Roast';SELECTCOF_NAME,SUP_IDFROMCOFFEESWHERECOF_NAMELIKE'Espresso';我們可以為一類查詢設計一個範本,形式如下:SELECTCOF_NAME,SUP_IDFROMCOFFEESWHERECOF_NAMELIKE?6.1程式操作預編譯把上面的三條查詢代碼重新改寫如下:PreparedStatementprepStmt= Con.prepareStatement("SELECTCOF_NAME,SUP_IDFROMCOFFEES"+ "WHERECOF_NAMELIKE?");prepStmt..setString(1,"Colombian");prepStmt..setString(1,"French_Roast");prepStmt..setString(1,"Espresso");ResultSetrs=prepStmt.executeQuery();6.1程式操作預編譯如果LIKE子句有大量的值需要綁定,參數的值可以事先存儲在一個數組中,通過I/O流機制實現數據的輸入和輸出。PreparedStatementprepStmt= Con.prepareStatement("SELECTCOF_NAME,SUP_IDFROMCOFFEES"+ "WHERECOF_NAMELIKE?");Stringcoffees[]={"Colombian","French_Roast","Espresso"};intlen=coffees.length;for(inti=0;i<len;i++){prepStmt..setString(1,coffees[i]); }ResultSetrs=prepStmt.executeQuery();6.2事務管理怎樣在編程中實現對事務的管理呢?首先我們沒有必要顯示地啟動一個事務,可以通過調用Connection.setAutoCommit(false)隱式地實現。然後調用Cmit()方法來提交一個事務,而且如果考慮到代碼的安全性,還要包括一個回滾Connection.rollback()。例如下麵的這段代碼:6.2事務管理con.setAutoCommit(false);PreparedStatementupdateSales=con.prepareStatement("UPDATECOFFEESSETSALES=?WHERECOF_NAMELIKE?");updateSales.setInt(1,50);updateSales.setString(2,"Colombian");updateSales.executeUpdate();PreparedStatementupdateTotal=con.prepareStatement("UPDATECOFFEESSETTOTAL=TOTAL+?WHERECOF_NAMELIKE?");updateTotal.setInt(1,50);updateTotal.setString(2,"Colombian");updateTotal.executeUpdate();mit();con.setAutoCommit(true);6.3 存儲過程創建一個存儲過程createprocedureSHOW_SUPPLIERSasselectSUPPLIERS.SUP_NAME,COFFEES.COF_NAMEfromSUPPLIERS,COFFEESwhereSUPPLIERS.SUP_ID=COFFEES.SUP_IDorderbySUP_NAME6.3 存儲過程將上面的SQL語言串保存在一個String變數中,以便後續使用。StringcreateProcedure="createprocedureSHOW_SUPPLIERS"+ "as"+ "selectSUPPLIERS.SUP_NAME,COFFEES.COF_NAME"+ "fromSUPPLIERS,COFFEES"+ "whereSUPPLIERS.SUP_ID=COFFEES.SUP_ID"+ "orderbySUP_NAME";6.3 存儲過程創建一個Statement連接,並運行這個SQL語句串。Statementstmt=con.createStatement();stmt.executeUpdate(createProcedure);6.3 存儲過程JDBC允許用戶在應用程式中調用存儲過程。首先需要創建一個CallableStatement對象。CallableStatement對象包含一個存儲過程調用,而不是包含存儲過程本身,存儲過程調用要寫在{}中,並用“”引起來。6.3 存儲過程CallableStatementcs=con.prepareCall("{callSHOW_SUPPLIERS}");ResultSetrs=cs.executeQuery();6.3 存儲過程程式執行得到的結果集可能如同下麵的形式:SUP_NAME COF_NAME

Acme,Inc. ColombianAcme,Inc. Colombian_DecafSuperiorCoffee French_RoastSuperiorCoffee French_Roast_DecafTheHighGround Espresso7.1JavaServlet的工作原理Servlet的工作過程可以分為以下幾個階段客戶端向伺服器發送請求;伺服器將請求發送至Servlet;Servlet生成回應並將其傳送給伺服器;伺服器將回應返回給客戶端。7.1JavaServlet的工作原理Servlet工作流程圖回應請求

伺服器端

客戶端

ServletInit()Service()Destroy()Session7.2常見的Servlet引擎Servlet引擎一般情況下是第三方的插件,它們由第三方製造商以他們專有的手段連接到Web伺服器上。JSWDKJRunServletExecTomcat7.2常見的Servlet引擎Servlet引擎管理Servlets工作原理圖請求回應Web伺服器Servlet引擎ShoppingCartServletDatabaseQueryServletLiveNewswireServletWeb文檔系統Web流覽器7.3Servlet的技術特點1、高效2、方便3、可移植4、安全7.4ServletAPI常用API概覽Cookie:Cookie類提供了讀取、創建和操縱HTTPCookie的便捷途徑,允許Servlet在客戶端存儲少量數據。HttpServletHttpServlet是開發HTTPServlet框架的抽象類,其中的service()方法將請求分配給HTTP的protectedservice()方法。7.4ServletAPIHttpServletRequestHttpServletRequest通過擴展的ServletRequest類為servlet提供了附加的功能。HttpServletResponseHttpServletResponse擴展了ServletResponse類,允許操縱和HTTP協議相關的數據7.4ServletAPIHttpSessionHttpSession介面提供了對Web訪問的認證機制HttpSessionBindingEventHttpSessionBindingListener監聽對象綁定或斷開綁定於會話時,HttpSessionBindingEvent被傳遞到HttpSessionBindingListener。7.4ServletAPIHttpSessionBindingListener

通過調用valueBound()和valueUnbound()來通知用於實現HttpSessionBindingListener的介面HttpSessionContextHttpSessionContext提供了訪問伺服器上所有活動Session的方法HttpUtils

這是一個容納許多有用的基於HTTP方法的容器對象7.5Servlet的基本結構例如

importjava.io.*;

importjavax.servlet.*;

importjavax.servlet.http.*;

publicclassAnyServletextendsHttpServlet{

publicvoiddoGet(HttpServletRequestrequest,

HttpServletResponseresponse)

throwsServletException,IOException{.

PrintWriterout=response.getWriter();}

}7.6Servlet的編譯和運行程式源代碼如下。importjava.io.*;importjavax.servlet.*;importjavax.servlet.http.*;publicclassHelloServletextendsHttpServlet{publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsIOException,ServletException{response.setContentType("text/html");PrintWriterout=response.getWriter();out.println("<html>");out.println("<body>");out.println("<head>"); out.println("<title>HelloServlet!</title>");out.println("</head>");out.println("<body>");out.println("<h1>HelloServlet!</h1>");out.println("</body>");out.println("</html>");}}7.6Servlet的編譯和運行1.設置虛擬目錄

虛擬目錄應該是/tomcat/webapps下的子目錄,例如給它命名myweb。在Tomcat的安裝路徑下有一個conf檔夾,打開其中的server.xml檔,在檔中添加一行<Contextpath=”/myweb”docBase=”myweb”debug=”0”reloadable=”ture”></Context>7.6Servlet的編譯和運行Manager管理窗口

7.6Servlet的編譯和運行2.JavaServlet程式的編譯在這裏,用戶可以把一個已經編寫好的HelloServlet根源程式放到/tomcat/webapps/examples/WEB-INF/classes目錄下,用JDK開發包對上述代碼進行編譯,但一定要進入.java檔的存儲路徑下。D:/tomcat/webapps/examples/WEB-INF/classesjavacHelloServlet.java注意:編譯時可能會出現

HelloServlet.java:2:packagejavax.servletdoesnotexist

importjavax.servlet.*;

….

HelloServlet.java:3:packagejavax.servlet.httpdoesnotexist

importjavax.servlet.http.*;7.6Servlet的編譯和運行3.運行編譯好的Servlet程式

在流覽器中敲入http://localhost:8080/examples/servlet/HelloServlet就可以對已經編譯好的servlet程式運行查看了。7.6Servlet的編譯和運行程式運行結果7.7Servlet打包1.創建打包環境

創建分為兩個步驟:(1)將類檔存儲到與要使用的包(Package)名稱相同的路徑下。(2)在類檔中引入包。7.7Servlet打包源代碼程式如下:packageServletcore;importjava.io.*;importjavax.servlet.*;importjavax.servlet.http.*;publicclassHelloServlet2extendsHttpServlet{publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{

response.setContentType("text/html");PrintWriterout=response.getWriter();StringdocType="<!DOCTYPEHTMLPUBLIC\"-//W3C//DTDHTML4.0"+"Transitional//EN\">\n";out.println(docType+"<HTML>\n"+"<HEAD><TITLE>HelloServlet2</TITLE></HEAD>\n"+"<BODY>\n"+"<H1>HelloServlet2</H1>\n"+"</BODY></HTML>");}}7.7Servlet打包2.編譯包中的Servlet

在Windows操作系統中,我們可以按以下方式編譯Servlet:DOS>setclasspath=D:/tomcat/webapps/examples/WEB-INF/classes;%calsspath%DOS>cdD:/tomcat/webapps/examples/WEB-INF/classes/ServletcoreDOS>javacHelloServlet2.java7.7Servlet打包還可以設置永久性的calsspath,calsspath設置好後直接編譯。DOS>cdD:/tomcat/webapps/examples/WEB-INF/classes/ServletcoreDOS>javacHelloServlet2.java7.7Servlet打包在Windows9X中,找到autoexec.bat檔,將setclasspath=D:/tomcat/webapps/examples/WEB-INF/classes;%calsspath%語句放到設置classpath指向的servlet.jar和JSP的jar檔中。在Windows2000/NT中,打開開始/設置/控制面板或我的電腦/控制面板,打開控制面板中的系統中的“高級”選項卡,在環境變數中輸入變數名和變數值。在Unix系統中,找到.cshrc檔,在檔中添加一行:

setenvclasspath/install_dir/servlets;$classpath。7.7Servlet打包3.調用包中的Servlet

調用包中的Servlet,可以在流覽器中敲入以下URL:http://localhost:8080/examples/servlet/packagename.servletname這裏的例子就是http://localhost:8080/examples/servlet/Servletcore.HelloServlet28.1JavaServlet輸出1.輸出純文本方式的Servlet

以純文本方式輸出一行字元。(根源程式HelloServlet.java)importjava.io.*;importjavax.servlet.*;importjavax.servlet.http.*;publicclassHelloServletextendsHttpServlet{publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{PrintWriterout=response.getWriter();out.println("WelcometoServlet");//輸出字串

}}8.1JavaServlet輸出輸出純文本的HelloServlet

8.1JavaServlet輸出2.輸出HTML網頁方式的Servlet

以網頁HTML方式輸出一行字元。(根源程式HelloHTML.java)importjava.io.*;importjavax.servlet.*;importjavax.servlet.http.*;publicclassHelloHTMLextendsHttpServlet{publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{

response.setContentType("text/html");//①

PrintWriterout=response.getWriter();

out.println("<!DOCTYPEHTMLPUBLIC\"-//W3C//DTDHTML4.0"+"Transitional//EN\">\n"+"<HTML>\n"+"<HEAD><TITLE>HelloHTML</TITLE></HEAD>\n"+"<BODY>\n"+"<H1>ThesecondServlet:HelloHTML!</H1>\n"+"</BODY></HTML>");//②}}8.1JavaServlet輸出生成HTML的Servlet

8.2Servlet的生命週期1.加載並實例化

Servlet引擎

ServletServlet引擎請求回應客戶端Web伺服器8.2Servlet的生命週期2.初始化形式是:publicvoidinit(ServletConfigConfig)throwsServletException{super.init(config);//Initializationcode}

8.2Servlet的生命週期3.執行Servlet

形式如下:publicvoidservice(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{

}8.2Servlet的生命週期SingleThreadModel介面的形式為:PublicclassThreadModelextendsHttpServletimplementsSingleThreadModel{}8.2Servlet的生命週期4.卸載Servlet

形式為:publicvoiddestroy(){……}8.2Servlet的生命週期生命週期示意圖

8.3處理表單數據/baidu?word=servlet&tn=baiduos&cl=3&ct=0&f=5&lm=0”。這個URL中位於問號後面的部分,即“word=servlet&tn=baiduos&cl=3&ct=0&f=5&lm=0”,就是表單數據。

8.3處理表單數據

表單數據的讀取有兩種方法:

post方法和get方法。當使用post方法時,數據由標準的輸入設備讀入,當使用get方法時,數據由CGI變數QUERY_STRING傳遞給表單數據處理程式。8.3處理表單數據1.讀取Web有限個參數

html前端通過

<FORMACTION=“servlet/Parameter”>語句和服務器端的Servlet發生聯繫。注意:.html檔要保存在根目錄下,Servlet檔保存在classes目錄中。8.3處理表單數據Parameter.html前端

8.3處理表單數據ParameterServlet的輸出8.3處理表單數據2.中文問題

Java語言默認的編碼方式是unicode,而中國人通常使用的檔和數據庫都是基於GB2312或者BIG5等方式編碼的,且中文字元集不只一個,不同的操作系統對中文字元的支持也不盡相同,所以會有許多和漢字編碼處理有關的問題在我們進行應用開發中困擾著我們。8.3處理表單數據3.處理多值參數

利用javaxServlet不僅能獲取一個Web參數,每個參數只能有一個值。本節中給出的例子更具有通用性,可以處理多值參數,而且處理參數的值可以為空或為多個值。8.4客戶端請求常用的請求頭getHeader:讀取傳入頭getCookies:返回Cookie頭的內容getAuthType和getRemoteUser:用於將Authorization頭拆分為不同的組件。getContentLength:返回Content-Length頭的值getContentType:返回Content-Type頭的值getDateHeader和getIntHeader:讀取指定的頭8.4客戶端請求getHeaderNames:取得請求中接收到的所有頭的名稱getHeaders:返回頭首次出現的值,或返回包含頭出現時的所有值getMethod:返回請求的方法getRequestURI:返回URL中主機和端口之後、表單數據之前的部分getProtocol:返回請求行的第三部分8.4客戶端請求實現客戶端程式向伺服器發送請求。(根源程式RequestHeader.java)importjava.io.*;importjava.util.*;importjavax.servlet.*;importjavax.servlet.http.*;publicclassRequestHeaderextendsHttpServlet{

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论