Java語言概述課件_第1頁
Java語言概述課件_第2頁
Java語言概述課件_第3頁
Java語言概述課件_第4頁
Java語言概述課件_第5頁
已閱讀5頁,還剩297頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

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

它的設計集中于對象及其接口3.分布式4.系統(tǒng)健壯5.系統(tǒng)安全

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

7.可移植好

8.解釋執(zhí)行9.高性能

10.多線程11.動態(tài)

1.3Java與網絡Java在網絡中的應用大致分為兩種,即Web瀏覽和網絡應用系統(tǒng)。1.Web瀏覽

Applet、Servlet和JSP三大技術應用在Web瀏覽中,進一步增強了Web服務的能力。2.網絡應用系統(tǒng)

Java有利于開發(fā)網絡應用系統(tǒng)1.3Java與網絡3.Java程序的分類JavaApplication:獨立的Java應用程序;JavaApplet:Java小應用程序

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

2.1構建Java運行環(huán)境1.在Windows平臺上安裝JDK推薦安裝JDK的最低系統(tǒng)配置是IntelPentium處理器、至少32MB內存以及至少50MB的剩余硬盤空間。2.1構建Java運行環(huán)境

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

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

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

Sun公司推薦Tomcat來作為Servlet和JSP容器,Tomcat的最新版本中實現(xiàn)了Servlet和JSP的最新規(guī)范

2.Tomcat的安裝和配置

2.2構建Servlet/JSP運行環(huán)境Tomcat的安裝界面2.2構建Servlet/JSP運行環(huán)境Tomcat的啟動界面2.2構建Servlet/JSP運行環(huán)境Tomcat的運行界面2.3使用WeblogicServer1.Weblogic簡介:WeblogicServer是BEA公司開發(fā)的Java應用服務器系統(tǒng)程序,用于組建多層次的、安全的、大型的和分布式的Web應用,如電子商務等等。

WeblogicServer提供了開發(fā)和利用服務器端業(yè)務邏輯的基本架構,支持分布式編程模型。

WeblogicServer實現(xiàn)的J2EE服務可以為企業(yè)級的分布式應用提供一個極佳的開發(fā)和運行環(huán)境。

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

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

標識符的命名規(guī)范:控制結構:間隔: 3.1Java編程結構3.Java關鍵字

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

abstractconstfinalinstanceofprivateswitchvoidbooleancontinuefinallyintprotectedsynchronizedvoiatilebreakdefaultfloatinterfacepublicthiswhilebytedoforlongreturnthrowcasedoublegotonativeshortthrowscatchelseifnewstatictransientcharextendsimplementsnullstrictfptrueclassfalseimportpackagesupertry3.1Java編程結構4.Java數(shù)據類型

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

true和false

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

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

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

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

每個變量在使用以前都需要聲明它的數(shù)據類型并初始化該變量。

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

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

變量的類型及初值

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

也可以根據程序的需要對變量進行明確的初始化,即給該變量賦一個初值。賦值是通過“=”實現(xiàn)的,“=”左邊是需要初始化的變量,右邊是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.數(shù)組數(shù)組是一種最簡單的復合數(shù)據類型,特點是其中的元素都具有相同的數(shù)據類型,要創(chuàng)建和使用一個數(shù)組,必須包含三部分的內容,即:

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

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

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

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

對象就是變量和相關的方法的集合,其中變量表明對象的狀態(tài);

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

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

方法重載指的是在一個類中可以有多個具有相同名字的方法;方法重寫指的是子類可以重新實現(xiàn)父類的某些方法。3.3Java面向對象程序設計技術方法重載和方法重寫主要有以下四點不同:重載的方法互相補充;重寫的方法往往會隱藏原方法。重載的方法可以在一個類中以任何數(shù)量存在;父類中的每一個方法只能在子類中被重寫一次。重載的方法在參數(shù)列表上與原方法不同;重寫的方法在參數(shù)類型和參數(shù)順序上必須與原方法相同。重載的方法的返回類型可以自由選擇;重寫的方法的返回類型必須與原方法相同。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運行時系統(tǒng)來處理。使用try-catch-finally語句捕獲例外

使用throws子句聲明例外

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

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

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

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

實現(xiàn)Runnable接口構造線程體

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

可從中讀出一系列字節(jié)的對象稱為“輸入流”(InputStream);而能向其中寫入一系列字節(jié)的對象則稱為“輸出流”(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.文件

文件對象的創(chuàng)建(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):將當前對象更名為參數(shù)所制定的文件名3.6Java的輸入/輸出流(2)文件測試booleanexists():檢測本文件是否存在booleancanWrite():判斷是否可以向指定文件中寫入數(shù)據booleancanRead():判斷是否可以從指定文件中讀取數(shù)據booleanisFile():檢測本對象是否代表一個文件booleanisdirectory():檢測本對象是否代表一個目錄booleanisAbsolute():檢測被對象是否代表一個絕對路徑名3.6Java的輸入/輸出流(3)文件信息和實用工具longlastModified():檢測當前File對象所對應的文件最后一次被修改的時間longlength():檢測文件長度booleandelete():刪除當前File對象所對應的文件3.6Java的輸入/輸出流(4)目錄實用工具booleanmkdir():建立一個目錄,其路徑名由當前File對象指定String[]list():列出當前File對象所指定目錄中的文件4.1 JDBC的發(fā)展與應用1996年夏天,SUN公司發(fā)布了JDBC1.0工具包,它包含在JDK1.1中。1998年在SUN發(fā)布JAVA2時,JDBC2.0隨著JDK1.2問世。

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

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

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

ResultSetStatementPreparedStatementCallableStatementConnectionDriverManagerJDBC/ODBC橋Oracle驅動程序ODBC數(shù)據源Oracle數(shù)據庫5.2 用JDBC連接數(shù)據庫1.數(shù)據庫URL

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

jdbc:<子協(xié)議>:<數(shù)據庫名>5.2 用JDBC連接數(shù)據庫2.建立連接

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

COFFEES數(shù)據表COF_NAMESUP_IDPRICESALESTOTALColombian1017.9900French_Roast498.9900Espresso1509.9900Colombian_Decaf1018.9900French_Roast_Decaf499.99005.3 用JDBC實現(xiàn)數(shù)據庫查詢創(chuàng)建COFFEES表的程序如下:CREATETABLECOFFEES (COF_NAMEVARCHAR(32),SUP_IDINTEGER,PRICEFLOAT,SALESINTEGER,TOTALINTEGER)5.3 用JDBC實現(xiàn)數(shù)據庫查詢SUPPLIERS信息表

SUP_IDSUP_NAMESTREETCITYSTATEZIP101Acme,Inc.99MarketStreetGroundsvilleCA9519949SuperiorCoffee1PartyPlaceMendocinoCA95460150TheHighGround100CoffeeLaneMeadowsCA939665.3 用JDBC實現(xiàn)數(shù)據庫查詢創(chuàng)建SUPPLIERS表的程序如下:CREATETABLESUPPLIERS (SUP_IDINTEGER,SUP_NAMEVARCHAR(32),STREETVARCHAR(32),CITYVARCHAR(32),STATEVARCHAR(32),ZIPVARCHAR(32))5.3 用JDBC實現(xiàn)數(shù)據庫查詢2.創(chuàng)建處理語句

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

Statementstmt=con.createStatement();5.3 用JDBC實現(xiàn)數(shù)據庫查詢然后,我們就可以調用Statement類的executeUpdate()方法來創(chuàng)建數(shù)據表了。stmt.executeUpdate("CREATETABLECOFFEES"+"(COF_NAMEVARCHAR(32),SUP_IDINTEGER,PRICEFLOAT,"+"SALESINTEGER,TOTALINTEGER)");5.3 用JDBC實現(xiàn)數(shù)據庫查詢在一個表中添加數(shù)據實際上也是對表數(shù)據的更新,因此,我們還可以使用executeUpdate方法實現(xiàn)對表數(shù)據的添加。例如下面的代碼:Statementstmt=con.createStatement();stmt.executeUpdate("INSERTINTOCOFFEES"+"VALUES('Colombian',101,7.99,0,0)");5.3 用JDBC實現(xiàn)數(shù)據庫查詢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實現(xiàn)數(shù)據庫查詢3.從數(shù)據庫表中獲取數(shù)據

使用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實現(xiàn)數(shù)據庫查詢JDBC把查詢結果返回到ResultSet對象中ResultSetrs=stmt.executeQuery("SELECTCOF_NAME,PRICEFROMCOFFEES");5.3 用JDBC實現(xiàn)數(shù)據庫查詢除了要用到ResultSet類的對象以外,還需要兩個方法,即

next()方法和

getXXX()方法,這兩個方法都是ResuleSet類中的方法。5.3 用JDBC實現(xiàn)數(shù)據庫查詢SQL數(shù)據類型及其相應的Java語言數(shù)據類型SQL數(shù)據類型Java數(shù)據類型INTEGER或INTintSMALLINTshortNUMERIC、DECIMAIL或DECjava.sql.NumericFLOATdoubleREALfloatDOUBLEdoubleCHARACTER或CHARStringVARCHARStringBOOLEANbooleanDATEjava.sql.DateTIMEjava.sql.TimeTIMESTAMPjava.sql.TimestampBLOBjava.sql.BlobCLOBjava.sql.ClobARRAYjava.sql.Array5.4用JDBC實現(xiàn)數(shù)據庫更新使用JDBC更新數(shù)據庫就是使用excuteUpdate()方法向數(shù)據庫傳送SQL語句。這些語句包括SQLINSERT、UPDATE或DELETE語句,也包括DDL語句,如CREATETABLE等。5.4用JDBC實現(xiàn)數(shù)據庫更新管理人員想要對COFFEES表中的SALES字段的值進行更新,則可以使用如下的代碼:StringupdateString="UPDATECOFFEES"+ "SETSALES=75"+ "WHERECOF_NAMELIKE'Colombian'";stmt.executeUpdate(updateString);5.4用JDBC實現(xiàn)數(shù)據庫更新這段代碼的執(zhí)行結果應該如下所示: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實現(xiàn)數(shù)據庫更新在Access數(shù)據庫管理系統(tǒng)中創(chuàng)建一個MyDB數(shù)據庫文件,并在控制面板的ODBC數(shù)據源中,添加一個系統(tǒng)DSN,系統(tǒng)數(shù)據源的名稱為MyDB,并指向已經創(chuàng)建好的MyDB數(shù)據庫5.4用JDBC實現(xiàn)數(shù)據庫更新創(chuàng)建ODBC數(shù)據源5.4用JDBC實現(xiàn)數(shù)據庫更新Access數(shù)據源的安裝

6.1程序操作預編譯

我們想對查詢執(zhí)行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子句有大量的值需要綁定,參數(shù)的值可以事先存儲在一個數(shù)組中,通過I/O流機制實現(xiàn)數(shù)據的輸入和輸出。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事務管理怎樣在編程中實現(xiàn)對事務的管理呢?首先我們沒有必要顯示地啟動一個事務,可以通過調用Connection.setAutoCommit(false)隱式地實現(xiàn)。然后調用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 存儲過程創(chuàng)建一個存儲過程createprocedureSHOW_SUPPLIERSasselectSUPPLIERS.SUP_NAME,COFFEES.COF_NAMEfromSUPPLIERS,COFFEESwhereSUPPLIERS.SUP_ID=COFFEES.SUP_IDorderbySUP_NAME6.3 存儲過程將上面的SQL語言串保存在一個String變量中,以便后續(xù)使用。StringcreateProcedure="createprocedureSHOW_SUPPLIERS"+ "as"+ "selectSUPPLIERS.SUP_NAME,COFFEES.COF_NAME"+ "fromSUPPLIERS,COFFEES"+ "whereSUPPLIERS.SUP_ID=COFFEES.SUP_ID"+ "orderbySUP_NAME";6.3 存儲過程創(chuàng)建一個Statement連接,并運行這個SQL語句串。Statementstmt=con.createStatement();stmt.executeUpdate(createProcedure);6.3 存儲過程JDBC允許用戶在應用程序中調用存儲過程。首先需要創(chuàng)建一個CallableStatement對象。CallableStatement對象包含一個存儲過程調用,而不是包含存儲過程本身,存儲過程調用要寫在{}中,并用“”引起來。6.3 存儲過程CallableStatementcs=con.prepareCall("{callSHOW_SUPPLIERS}");ResultSetrs=cs.executeQuery();6.3 存儲過程程序執(zhí)行得到的結果集可能如同下面的形式:SUP_NAME COF_NAME

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

服務器端

客戶端

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

通過調用valueBound()和valueUnbound()來通知用于實現(xiàn)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開發(fā)包對上述代碼進行編譯,但一定要進入.java文件的存儲路徑下。D:/tomcat/webapps/examples/WEB-INF/classesjavacHelloServlet.java注意:編譯時可能會出現(xiàn)

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.創(chuàng)建打包環(huán)境

創(chuàng)建分為兩個步驟:(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操作系統(tǒng)中,我們可以按以下方式編譯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中,打開開始/設置/控制面板或我的電腦/控制面板,打開控制面板中的系統(tǒng)中的“高級”選項卡,在環(huán)境變量中輸入變量名和變量值。在Unix系統(tǒng)中,找到.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.執(zhí)行Servlet

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

}8.2Servlet的生命周期SingleThreadModel接口的形式為:PublicclassThreadModelextendsHttpServletimplementsSingleThreadModel{}8.2Servlet的生命周期4.卸載Servlet

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

8.3處理表單數(shù)據/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”,就是表單數(shù)據。

8.3處理表單數(shù)據

表單數(shù)據的讀取有兩種方法:

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

html前端通過

<FORMACTION=“servlet/Parameter”>語句和服務器端的Servlet發(fā)生聯(lián)系。注意:.html文件要保存在根目錄下,Servlet文件保存在classes目錄中。8.3處理表單數(shù)據Parameter.html前端

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

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

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

溫馨提示

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

評論

0/150

提交評論