Java進(jìn)門基礎(chǔ)概念_第1頁
Java進(jìn)門基礎(chǔ)概念_第2頁
Java進(jìn)門基礎(chǔ)概念_第3頁
Java進(jìn)門基礎(chǔ)概念_第4頁
Java進(jìn)門基礎(chǔ)概念_第5頁
已閱讀5頁,還剩31頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

Java入門基本概念

Java的白皮書為我們提出了Java語言的11個(gè)關(guān)鍵特性。

(1)Easy:Java的語法比C++的相對(duì)簡(jiǎn)單,另一個(gè)方面就是Java能使軟件在很小的機(jī)器上運(yùn)

行,基礎(chǔ)解釋其和類庫的支持的大小約為40kb,增加基本的標(biāo)準(zhǔn)庫和線程支持的內(nèi)存需要

增加125kbo

(2)分布式:Java帶有很強(qiáng)大的TCP/IP協(xié)議族的例程庫,Java應(yīng)用程序能夠通過URL

來穿過網(wǎng)絡(luò)來訪問遠(yuǎn)程對(duì)象,由于servlet機(jī)制的出現(xiàn),使Java編程非常的高效,現(xiàn)在許

多的大的webserver都支持servlet。

(3)00:血向?qū)ο笤O(shè)計(jì)是把重點(diǎn)放在對(duì)象及對(duì)象的接口上的一個(gè)編程技術(shù).其面向?qū)ο蠛?/p>

C++有很多不同,在與多重繼承的處理及Java的原類模型。

(4)健壯特性:Java采取了一個(gè)安全指針模型,能減小重寫內(nèi)存和數(shù)據(jù)崩潰的可能型。

(5)安全:Java用來設(shè)計(jì)網(wǎng)路和分布系統(tǒng),這帶來了新的安全問題,Java可以用來構(gòu)建

防病毒和防攻擊的System.事實(shí)證明Java在防毒這一方面做的比較好。

(6)中立體系結(jié)構(gòu):Java編譯其生成體系結(jié)構(gòu)中立的目標(biāo)文件格式可以在很多處理器上

執(zhí)行,編譯器產(chǎn)生的指令字節(jié)碼(Javabytecode)實(shí)現(xiàn)此特性,此字節(jié)碼可以在任何機(jī)器上解

釋執(zhí)行。

(7)可移植性:Java中對(duì)基本數(shù)據(jù)結(jié)構(gòu)類型的大小和算法都有嚴(yán)格的規(guī)定所以可移植性

很好。

(8)多線程:Java處理多線程的過程很簡(jiǎn)單,Java把多線程實(shí)現(xiàn)交給底下操作系統(tǒng)或線

程程序完成.所以多線程是Java作為服務(wù)器端開發(fā)語言的流行原因之-o

(9)Applet和servlet:能夠在網(wǎng)頁上執(zhí)行的程序叫Applet,需要支持Java的瀏覽器很多,

而applet支持動(dòng)態(tài)的網(wǎng)頁,這是很多其他語言所不能做到的。

基本概念

1.00P中唯一關(guān)系的是對(duì)象的接口是什么,就像計(jì)算機(jī)的銷售商她不管電源內(nèi)部結(jié)構(gòu)

是怎樣的,他只關(guān)系能否給你提供電就行了,也就是只要知道canornot而不是howandwhy.

所有的程序是由定的屬性和行為對(duì)象組成的,不同的對(duì)象的訪問通過函數(shù)調(diào)用來完成,時(shí)

象間所有的交流都是通過方法調(diào)用,通過對(duì)封裝對(duì)象數(shù)據(jù),很大限度上提高復(fù)用率。

2.00P中最重要的思想是類,類是模板是藍(lán)圖,從類中構(gòu)造個(gè)對(duì)象,即創(chuàng)建了這個(gè)

類的一個(gè)實(shí)例(instance)。

3.封裝:就是把數(shù)據(jù)和行為結(jié)合起在一個(gè)包中)并對(duì)對(duì)象使用者隱藏?cái)?shù)據(jù)的實(shí)現(xiàn)過程,■

個(gè)對(duì)象中的數(shù)據(jù)叫他的實(shí)例字段(instancefield)?

4.通過擴(kuò)展一個(gè)類來獲得一個(gè)新類叫繼承(inheHtance),而所有的類都是由Object根超

類擴(kuò)展而得,根超類下文會(huì)做介紹。

5.對(duì)象的3個(gè)主要特性

behavior說明這個(gè)對(duì)象能做什么.

state—當(dāng)對(duì)象施加方法時(shí)對(duì)象的反映.

idenMty與其他相似行為對(duì)象的區(qū)分標(biāo)志.

每個(gè)對(duì)象有唯一的indentity而這3者之間相互影響.

6.類之間的關(guān)系:

use-a:依賴關(guān)系

has-a:聚合關(guān)系

is-a:繼承關(guān)系-例:A類繼承了B類,此時(shí)A類不僅有了B類的方法,還有其自己的方

法.(個(gè)性存在于共性中)

7.構(gòu)造對(duì)象使用構(gòu)造器:構(gòu)造器的提出,構(gòu)造器是一種特殊的方法,構(gòu)造對(duì)象并對(duì)其初

始化。

例:Data類的構(gòu)造器叫Data

newData。一構(gòu)造一個(gè)新對(duì)象,且初始化當(dāng)前時(shí)間.

Datahappyday=newData。一把?個(gè)對(duì)象賦值給一個(gè)變量happyday.從而使該對(duì)象能

夠多次使用,此處要聲明的使變量與對(duì)象變量二者是不同的.new返回的值是一個(gè)引用。

構(gòu)造器特點(diǎn):構(gòu)造器可以有0個(gè),?個(gè)或多個(gè)參數(shù)

構(gòu)造器和類有相同的名字

■個(gè)類可以有多個(gè)構(gòu)造器

構(gòu)造器沒有返回值

構(gòu)造器總是和new運(yùn)算符一起使用.

8.重載:當(dāng)多個(gè)方法具有相同的名字而含有不同的參數(shù)時(shí),便發(fā)生重載.編譯器必須挑選出調(diào)

用哪個(gè)方法。

9.包(package)Java允許把一個(gè)或多個(gè)類收集在一起成為一組,稱作包,以便于組織任

務(wù),標(biāo)準(zhǔn)Java庫分為許多包.java.langjava.utiljava,net等,包是分層次的所有的java包

都在java和javax包層次內(nèi)。

10.繼承思想:允許在已經(jīng)存在的類的基礎(chǔ)上構(gòu)建新的類,當(dāng)你繼承一個(gè)已經(jīng)存在的類

時(shí),那么你就復(fù)用了這個(gè)類的方法和字段,同時(shí)你可以在新類中添加新的方法和字段。

11.擴(kuò)展類:擴(kuò)展類充分體現(xiàn)了is-a的繼承關(guān)系.形式為:class(子狗extends(基類)。

12.多態(tài)在java中,對(duì)象變量是多態(tài)的.而java中不支持多重繼承。

13.動(dòng)態(tài)綁定:調(diào)用對(duì)象方法的機(jī)制。

(1)編譯器檢查對(duì)象聲明的類型和方法名。

(2)編譯器檢查方法調(diào)用的參數(shù)類型。

(3)靜態(tài)綁定:若方法類型為priavtestaticfinal編譯器會(huì)準(zhǔn)確知道該調(diào)用哪個(gè)方法。

(4)當(dāng)程序運(yùn)行并且使用動(dòng)態(tài)綁定來調(diào)用個(gè)方法時(shí),那么虛擬機(jī)必須調(diào)用x所指向的

對(duì)象的實(shí)際類型相匹配的方法版本。

(5)動(dòng)態(tài)綁定:是很重要的特性,它能使程序變得可擴(kuò)展而不需要重編譯已存代碼。

14.final類:為防止他人從你的類上派生新類,此類是不可擴(kuò)展的。

15.動(dòng)態(tài)調(diào)用比靜態(tài)調(diào)用花費(fèi)的時(shí)間要長(zhǎng)。

16.抽象類:規(guī)定一個(gè)或多個(gè)抽象方法的類本身必須定義為abstracts

例:publicabstractstringgetDescripition

17.Java中的每一個(gè)類都是從Object類擴(kuò)展而來的。

18.object類中的equal和toString方法。

equal用于測(cè)試一個(gè)對(duì)象是否同另一個(gè)對(duì)象相等。

toString返回一個(gè)代表該對(duì)象的字符串,幾乎每一個(gè)類都會(huì)重載該方法,以便返回當(dāng)前

狀態(tài)的正確表示.

(toString方法是?一個(gè)很重要的方法)

19.通用編程:任何類類型的所有值都可以同object類性的變量來代替。

20.數(shù)組列表:ArrayList動(dòng)態(tài)數(shù)組列表,是一個(gè)類庫,定義在javaUtl包中,可自動(dòng)調(diào)節(jié)

數(shù)組的大小。

21.class類object類中的getclass方法返回ckass類型的一個(gè)實(shí)例,程序啟動(dòng)時(shí)包含

在main方法的類會(huì)被加載,虛擬機(jī)要加載他需要的所有類,每一個(gè)加載的類都要加載它需

要的類。

22.class類為編寫可動(dòng)態(tài)操縱java代碼的程序提供了強(qiáng)大的功能反射,這項(xiàng)功能為

JavaBeans特別有用,使用反射Java能支持VB程序員習(xí)慣使用的工具。

能夠分析類能力的程序叫反射器,Java中提供此功能的包叫Java.lang.reflect反射機(jī)

制十分強(qiáng)大.

1.在運(yùn)行時(shí)分析類的能力。

2.在運(yùn)行時(shí)探察類的對(duì)象。

3.實(shí)現(xiàn)通用數(shù)組操縱代碼。

4.提供方法對(duì)象。

而此機(jī)制主要針對(duì)是工具者而不是應(yīng)用及程序。

反射機(jī)制中的最重要的部分是允許你檢查類的結(jié)構(gòu).用到的API有:

java.lang.reflect.Field返回字段.

java.reflect.Method返回方法.

java.lang.reflect.Constructor返回參數(shù).

方法指針:java沒有方法指針,把一個(gè)方法的地址傳給另一個(gè)方法,可以在后面調(diào)用它,

而接口是更好的解決方案。

23.接口(Interface)說明類該做什么而不指定如何去做,一個(gè)類可以實(shí)現(xiàn)一個(gè)或多個(gè)

interface。

24.接口不是一個(gè)類,而是對(duì)符合接口要求的類的一套規(guī)范。

若實(shí)現(xiàn)一個(gè)接口需要2個(gè)步驟:

1.聲明類需要實(shí)現(xiàn)的指定接口。

2.提供接口中的所有方法的定義。

聲明一個(gè)類實(shí)現(xiàn)-一個(gè)接口需要使用implements關(guān)鍵字

classactionBimplementsComparable其actionb需要提供Comparelb方法,接口不

是類,不能用new實(shí)例化一個(gè)接口.

25.一個(gè)類只有一個(gè)超類,但一個(gè)類能實(shí)現(xiàn)多個(gè)接口。Java中的一個(gè)重要接口:

Cloneable

26.接口和回調(diào).編程一個(gè)常用的模式是回調(diào)模式,在這種模式中你可以指定當(dāng)一個(gè)特定

時(shí)間發(fā)生時(shí)回調(diào)對(duì)象上的方法。

例:ActionListener接口監(jiān)聽.

類似的API有:java.swing.JOptionPane

java.swing.Timer

java.awt.Tookit

27.對(duì)象clone:clone方法是object一個(gè)保護(hù)方法,這意味著你的代碼不能簡(jiǎn)單的調(diào)用

它。

28.內(nèi)部類:一個(gè)內(nèi)部類的定義是定義在另一個(gè)內(nèi)部的類。

原因是:

1.一個(gè)內(nèi)部類的對(duì)象能夠訪問創(chuàng)建它的對(duì)象的實(shí)現(xiàn),包括私有數(shù)據(jù)。

2.對(duì)于同一個(gè)包中的其他類來說,內(nèi)部類能夠隱藏起來。

3.匿名內(nèi)部類可以很方便的定義回調(diào)。

4.使用內(nèi)部類可以非常方便的編寫事件驅(qū)動(dòng)程序。

29.代理類(proxy):

1.指定接口要求所有代碼

2.object類定義的所有的方法(toStringequals)

30.數(shù)據(jù)類型:Java是強(qiáng)調(diào)類型的語言,每個(gè)變量都必須先申明它都類型,java中總共

有8個(gè)基本類型.4種是整型,2種是浮點(diǎn)型,一種是字符型,被用于Unicode編碼中的字

符,布爾型。

61條面向?qū)ο笤O(shè)計(jì)的經(jīng)驗(yàn)原則

1)所有數(shù)據(jù)都應(yīng)該隱臧在所在的類的內(nèi)部。p13

(2)類的使用者必須依賴類的共有接口,但類不能依賴它的使用者。p15

(3)盡量減少類的協(xié)議中的消息。p16

(4)實(shí)現(xiàn)所有類都理解的最基本公有接口[例如,拷貝操作(深拷貝和淺拷貝)、相等性判

斷、正確輸出內(nèi)容、從ASCII描述解析等等]。p16

(5)不要把實(shí)現(xiàn)細(xì)節(jié)(例如放置共用代碼的私有函數(shù))放到類的公有接口中。p17

如果類的兩個(gè)方法有一段公共代碼,那么就可以創(chuàng)建一個(gè)防止這些公共代碼的私有函

數(shù)。

(6)不要以用戶無法使用或不感興趣的東西擾亂類的公有接口。p17

(7)類之間應(yīng)該零耦合,或者只有導(dǎo)出耦合關(guān)系。也即,一個(gè)類要么同另一個(gè)類毫無關(guān)

系,要么只使用另一個(gè)類的公有接口中的操作。p18

(8)類應(yīng)該只表示一個(gè)關(guān)鍵抽象。p19

包中的所有類對(duì)于同一類性質(zhì)的變化應(yīng)該是共同封閉的。一個(gè)變化若對(duì)一個(gè)包影響,則

將對(duì)包中的所有類產(chǎn)生影響,而對(duì)其他的包不造成任何影響.(9)把相關(guān)的數(shù)據(jù)和行為集

中放置。p19

設(shè)計(jì)者應(yīng)當(dāng)留意那些通過get之類操作從別的對(duì)象中獲取數(shù)據(jù)的對(duì)象。這種類型的行為

暗示著這條經(jīng)驗(yàn)原則被違反了。

(10)把不相關(guān)的信息放在另一個(gè)類中(也即:互不溝通的行為)。p19

朝著穩(wěn)定的方向進(jìn)行依賴.

(11)確保你為之建模的抽象概念是類,而不只是對(duì)象扮演的角色。p23

(12)在水平方向上盡可能統(tǒng)一地分布系統(tǒng)功能,也即:按照設(shè)計(jì),頂層類應(yīng)當(dāng)統(tǒng)一地共

享工作。p30

(13)在你的系統(tǒng)中不要?jiǎng)?chuàng)建全能類/對(duì)象。對(duì)名字包含Driver、Manager,System>Su

system的類要特別多加小心。p30

規(guī)劃一個(gè)接口而不是實(shí)現(xiàn)一個(gè)接口。

(14)對(duì)公共接口中定義了大量訪問方法的類多加小心。大量訪問方法意味著相關(guān)數(shù)據(jù)和

行為沒有集中存放。p30

(15)對(duì)包含太多互不溝通的行為的類多加小心。p31

這個(gè)問題的另一表現(xiàn)是在你的應(yīng)用程序中的類的公有接口中創(chuàng)建了很多的get和set函

數(shù)。

(16)在由同用戶界面交互的面向?qū)ο竽P蜆?gòu)成的應(yīng)用程序中,模型不應(yīng)該依賴于界

面,界面則應(yīng)當(dāng)依賴于模型。p33

(17)盡可能地按照現(xiàn)實(shí)世界建模(我們常常為了遵守系統(tǒng)功能分布原則、避免全能類原

則以及集中放置相關(guān)數(shù)據(jù)和行為的原則而違背這條原則)。p36

(18)從你的設(shè)計(jì)中去除不需要的類。p38

一般來說,我們會(huì)把這個(gè)類降級(jí)成一個(gè)屬性。

(19)去除系統(tǒng)外的類。p39

系統(tǒng)外的類的特點(diǎn)是,抽象地看它們只往系統(tǒng)領(lǐng)域發(fā)送消息但并不接受系統(tǒng)領(lǐng)域內(nèi)其他

類發(fā)出的消息。

(20)不要把操作變成類。質(zhì)疑任何名字是動(dòng)詞或者派生自動(dòng)詞的類,特別是只有一個(gè)有

意義行為的類??紤]一下那個(gè)有意義的行為是否應(yīng)當(dāng)遷移到已經(jīng)存在或者尚未發(fā)現(xiàn)的某個(gè)類

中。p40

(21)我們?cè)趧?chuàng)建應(yīng)用程序的分析模型忖常常引入代理類。在設(shè)計(jì)階段,我們常會(huì)發(fā)現(xiàn)很

多代理沒有用的,應(yīng)當(dāng)去除。p43

(22)盡量減少類的協(xié)作者的數(shù)量。p52

一個(gè)類用到的其他類的數(shù)目應(yīng)當(dāng)盡量少。

(23)盡量減少類和協(xié)作者之間傳遞的消息的數(shù)量。p55

(24)盡量減少類和協(xié)作者之間的協(xié)作量,也即:減少類和協(xié)作者之間傳遞的不同消息的

數(shù)量。p55

(25)盡量減少類的扇出,也即:減少類定義的消息數(shù)和發(fā)送的消息數(shù)的乘積。p55

(26)如果類包含另一個(gè)類的對(duì)象,那么包含類應(yīng)當(dāng)給被包含的對(duì)象發(fā)送消息。也即:包

含關(guān)系總是意味著使用關(guān)系。P55

(27)類中定義的大多數(shù)方法都應(yīng)當(dāng)在大多數(shù)時(shí)間里使用大多數(shù)數(shù)據(jù)成員。p57

(28)類包含的對(duì)象數(shù)目不應(yīng)當(dāng)超過開發(fā)者短期記憶的容量。這個(gè)數(shù)目常常是6。p57

當(dāng)類包含多于6個(gè)數(shù)據(jù)成員時(shí),可以把邏輯相關(guān)的數(shù)據(jù)成員劃分為一組,然后用一個(gè)

新的包含類去包含這一組成員。

(29)讓系統(tǒng)功能在窄而深的繼承體系中垂直分布。p58

(30)在實(shí)現(xiàn)語義約束時(shí),最好根據(jù)類定義來實(shí)現(xiàn)。這常常會(huì)導(dǎo)致類泛濫成災(zāi),在這種情

況下,約束應(yīng)當(dāng)在類的行為中實(shí)現(xiàn),通常是在構(gòu)造函數(shù)中實(shí)現(xiàn),但不是必須如此。p60

(31)在類的構(gòu)造函數(shù)中實(shí)現(xiàn)語義約束時(shí),把約束測(cè)試放在構(gòu)造函數(shù)領(lǐng)域所允許的盡量深

的包含層次中。p60

(32)約束所依賴的語義信息如果經(jīng)常改變,那么最好放在一個(gè)集中式的第3方對(duì)象中。

p60

(33)約束所依賴的語義信息如果很少改變,那么最好分布在約束所涉及的各個(gè)類中。p

60

(34)類必須知道它包含什么,但是不能知道誰包含它。p61

(35)共享字面范圍(也就是被同一個(gè)類所包含)的對(duì)象相互之間不應(yīng)當(dāng)有使用關(guān)系。p61

(36)繼承只應(yīng)被用來為特化層次結(jié)構(gòu)建模。p74

(37)派生類必須知道基類,基類不應(yīng)該知道關(guān)于它們的派生類的任何信息。p74

(38)基類中的所有數(shù)據(jù)都應(yīng)當(dāng)是私有的,不要使用保護(hù)數(shù)據(jù)。p75

類的設(shè)計(jì)者永遠(yuǎn)都不應(yīng)該把類的使用者不需要的東西放在公有接口中。

(39)在理論上,繼承層次體系應(yīng)當(dāng)深一點(diǎn),越深越好。p77

(40)在實(shí)踐中,繼承層次體系的深度不應(yīng)當(dāng)超出一個(gè)普通人的短期記憶能力。?個(gè)廣為

接受的深度值是6。p77

(41)所有的抽象類都應(yīng)當(dāng)是基類。p81

(42)所有的基類都應(yīng)當(dāng)是抽象類。p82

(43)把數(shù)據(jù)、行為和/或接口的共性盡可能地放到繼承層次體系的高端。p85

(44)如果兩個(gè)或更多個(gè)類共享公共數(shù)據(jù)(但沒有公共行為),那么應(yīng)當(dāng)把公共數(shù)據(jù)放在一

個(gè)類中,每個(gè)共享這個(gè)數(shù)據(jù)的類都包含這個(gè)類。p88

(45)如果兩個(gè)或更多個(gè)類有共同的數(shù)據(jù)和行為(就是方法),那么這些類的每一個(gè)都應(yīng)當(dāng)

從一個(gè)表示了這些數(shù)據(jù)和方法的公共基類繼承。p89

(46)如果兩個(gè)或更多個(gè)類共享公共接口(指的是消息,而不是方法),那么只有他們需要

被多態(tài)地使用時(shí),他們才應(yīng)當(dāng)從一個(gè)公共基類繼承。p89

(47)對(duì)對(duì)象類型的顯示的分情況分析一般是錯(cuò)誤的。在大多數(shù)這樣的情況下,設(shè)計(jì)者應(yīng)

當(dāng)使用多態(tài)。p89

(48)對(duì)屬性值的顯示的分情況分析常常是錯(cuò)誤的。類應(yīng)當(dāng)解耦合成一個(gè)繼承層次結(jié)構(gòu),

每個(gè)屬性值都被變換成個(gè)派生類。p96

(49)不要通過繼承關(guān)系來為類的動(dòng)態(tài)語義建模。試圖用靜態(tài)語義關(guān)系來為動(dòng)態(tài)語義建模

會(huì)導(dǎo)致在運(yùn)行時(shí)切換類型。p97

(50)不要把類的對(duì)象變成派生類。對(duì)任何只有一個(gè)實(shí)例的派生類都要多加小心。p99

(51)如果你覺得需要在運(yùn)行時(shí)刻創(chuàng)建新的類,那么退后步以認(rèn)清你要?jiǎng)?chuàng)建的是對(duì)象。

現(xiàn)在,把這些對(duì)象概括成一個(gè)類。p103

(52)在派生類中用空方法(也就是什么也不做的方法)來覆寫基類中的方法應(yīng)當(dāng)是非法

的。p103

(53)不要把可選包含同對(duì)繼承的需要相混淆。把可選包含建模成繼承會(huì)帶來泛濫成災(zāi)的

類。p108

(54)在創(chuàng)建繼承層次時(shí),試著創(chuàng)建可復(fù)用的框架,而不是可復(fù)用的組件。p112

(55)如果你在設(shè)計(jì)中使用了多重繼承,先假設(shè)你犯了錯(cuò)誤。如果沒犯錯(cuò)誤,你需要設(shè)法

證明。p120

(56)只要在面向?qū)ο笤O(shè)計(jì)中用到了繼承,問自己兩個(gè)問題:(1)派生類是否是它繼承的那

個(gè)東西的個(gè)特殊類型?(2)基類是不是派生類的一部分?p121

(57)如果你在一個(gè)面向?qū)ο笤O(shè)計(jì)中發(fā)現(xiàn)了多重繼承關(guān)系,確保沒有哪個(gè)基類實(shí)際上是另

一個(gè)基類的派生類。p122

(58)在面向?qū)ο笤O(shè)計(jì)中如果你需要在包含關(guān)系和關(guān)聯(lián)關(guān)系間作出選擇,請(qǐng)選擇包含關(guān)

系。p135

(59)不要把全局?jǐn)?shù)據(jù)或全局函數(shù)用于類的對(duì)象的簿記工作。應(yīng)當(dāng)使用類變量或類方法。

p140

(60)面向?qū)ο笤O(shè)計(jì)者不應(yīng)當(dāng)讓物理設(shè)計(jì)準(zhǔn)則來破壞他們的邏輯設(shè)計(jì)。但是,在對(duì)邏輯設(shè)

計(jì)作出決策的過程中我們經(jīng)常用到物理設(shè)計(jì)準(zhǔn)則。p149

(61)不要繞開公共接口去修改對(duì)象的狀態(tài)。p164

JSP獲取客戶端的瀏覽器和操作系統(tǒng)信息

stringagent=request,getheader("user-agent");

stringtokenizerst=newstringtokenizer(agent,z,;

st.nexttoken();

〃得到用戶的瀏覽器名

stringuserbrowser=st.nexttoken();

〃得到用戶的操作系統(tǒng)名

stringuseros=st.nexttoken();

取得本機(jī)的信息也可以這樣:

操作系統(tǒng)信息

system.getproperty(z,os.name,z);〃win2003竟然是winxp?

system,getproperty(z,os.version");

system,getpropertyC'os.arch");

瀏覽器:

request.getheader(wuser-agent)返回客戶端瀏覽器的版本號(hào)、類型

getheader(stringname):獲得http協(xié)議定義的傳送文件頭信息,

request.getmethodO:獲得客戶端向服務(wù)器端傳送數(shù)據(jù)的方法有g(shù)et、post>put等

類型

request,getrequesturi():獲得發(fā)出請(qǐng)求字符串的客戶端地址

request.getservletpathO:獲得客戶端所請(qǐng)求的腳本文件的文件路徑

request,getservername():獲得服務(wù)器的名字

request.getserverport():獲得服務(wù)器的端口號(hào)

request.getremoteaddr():獲得客戶端的ip地址

request,getremotehost():獲得客戶端電腦的名字,若失敗,則返回客戶端電腦的ip

地址

request,getprotocol():

request.getheadernames():返回所有requestheader的名字,結(jié)果集是一個(gè)

enumeration(枚舉)類的實(shí)例

request,getheaders(stringname):返回指定名字的requestheader的所有值,結(jié)

果集是一個(gè)enunioration(枚舉)類的實(shí)例

JavaServlet和JSP的技術(shù)概述以及比較

JavaServlet及其特點(diǎn)

Servlet是Java技術(shù)對(duì)CGI編程的回答。Servlet程序在服務(wù)器端運(yùn)行,動(dòng)態(tài)地生成

Web頁面。與傳統(tǒng)的CGI和許多其他類似CGI的技術(shù)相比,JavaServlet具有更高的效率,

更容易使用,功能更強(qiáng)大,具有更好的可移植性,更節(jié)省投資(更重要的是,Servlet程

序員收入要比Perl程序員高:-):

?曷效:

在傳統(tǒng)的CGI中,每個(gè)請(qǐng)求都要啟動(dòng)一個(gè)新的進(jìn)程,如果CGI程序本身的執(zhí)行時(shí)間較

短,啟動(dòng)進(jìn)程所需要的開銷很可能反而超過實(shí)際執(zhí)行時(shí)間。而在Servlet中,每個(gè)請(qǐng)求由一

個(gè)輕量級(jí)的Java線程處理(而不是重量級(jí)的操作系統(tǒng)進(jìn)程)。

在傳統(tǒng)CGI中,如果有N個(gè)并發(fā)的對(duì)同一CGI程序的請(qǐng)求,則該CGI程序的代碼在內(nèi)

存中重復(fù)裝載了N次;而對(duì)于Servlet,處理請(qǐng)求的是N個(gè)線程,只需要一份Servlet類代

碼。在性能優(yōu)化方面,Servlet也比CGI有著更多的選擇,比如緩沖以前的計(jì)算結(jié)果,保持

數(shù)據(jù)庫連接的活動(dòng),等等。

方便:

Servlet提供了大量的實(shí)用工具例程,例如自動(dòng)地解析和解碼HTML表單數(shù)據(jù)、讀取和

設(shè)置HTTP頭、處理Cookie、跟蹤會(huì)話狀態(tài)等。

功能強(qiáng)大:

在Servlet中,許多使用傳統(tǒng)CGI程序很難完成的任務(wù)都可以輕松地完成。例如,

Servlet能夠直接和Web服務(wù)器交互,而普通的CGI程序不能。Servlet還能夠在各個(gè)程序

之間共享數(shù)據(jù),使得數(shù)據(jù)庫連接池之類的功能很容易實(shí)現(xiàn)。

可移植性好:

Servlet用Java編寫,ServletAPI具有完善的標(biāo)準(zhǔn)。因此,為「PlanetEnterprise

Server寫的Servlet無需任何實(shí)質(zhì)上的改動(dòng)即可移植到Apache、MicrosoftHS或者

WebStar,幾乎所有的主流服務(wù)器都直接或通過插件支持Servlet。

節(jié)省投資:

不僅有許多廉價(jià)甚至免費(fèi)的Web服務(wù)器可供個(gè)人或小規(guī)模網(wǎng)站使用,而且對(duì)于現(xiàn)有的

服務(wù)器,如果它不支持Servlet的話,要加上這部分功能也往往是免費(fèi)的(或只需要極少的

投資)。

JSP及其特點(diǎn)

JavaServerPages(JSP)是?種實(shí)現(xiàn)普通靜態(tài)HTML和動(dòng)態(tài)HTML混合編碼的技術(shù),有

關(guān)JSP基礎(chǔ)概念的說明請(qǐng)參見《JSP技術(shù)簡(jiǎn)介》。

許多由CGI程序生成的頁面大部分仍1日是靜態(tài)HTML,動(dòng)態(tài)內(nèi)容只在頁面中有限的兒個(gè)

部分出現(xiàn)。但是包括Servlet在內(nèi)的大多數(shù)CGI技術(shù)及其變種,總是通過程序生成整個(gè)頁面。

JSP使得我們可以分別創(chuàng)建這兩個(gè)部分。例如,卜面就是一個(gè)簡(jiǎn)單的JSP頁面:

<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.0TransitionalZ/EN"

>

<HTML>

VHEAD>VTITLE》歡迎訪問網(wǎng)上商店V/TITLE>V/HEAD>

<B0DY>

VH1>歡迎V/H1>

〈SMALL〉歡迎,

<!一首次訪問的用戶名字為"NewUser"—>

<%out.printin(Utils.getUserNameFromCookie(request));%>

要設(shè)置帳號(hào)信息,請(qǐng)點(diǎn)擊

<A

HREF=http://www.bluelOOO.com/article/z/Account-Settings.HTML”

>這里V/A></SMALL>

<P>

頁面的其余內(nèi)容。.

</BODYX/HTML>

下面是JSP和其他類似或相關(guān)技術(shù)的一個(gè)簡(jiǎn)單比較:

JSP和ActiveServerPages(ASP)相比

Microsoft的ASP是一種和JSP類似的技術(shù)。JSP和ASP相比具有兩方面的優(yōu)點(diǎn)。首先,

動(dòng)態(tài)部分用Java編寫,而不是VBScript或其他Microsoft語言,不僅功能更強(qiáng)大而且更

易于使用。第二,JSP應(yīng)用可以移植到其他操作系統(tǒng)和非Microsoft的Web服務(wù)器上。

JSP和純Servlet相比

JSP并沒有增加任何本質(zhì)上不能用Servlet實(shí)現(xiàn)的功能。但是,在JSP中編寫靜態(tài)HTML

更加方便,不必再用printin語句來輸出每一行HTML代碼。更重要的是,借助內(nèi)容和外觀

的分離,頁面制作中不同性質(zhì)的任務(wù)可以方便地分開:比如,由頁面設(shè)計(jì)專家進(jìn)行HTML設(shè)

計(jì),同時(shí)留出供Servlet程序員插入動(dòng)態(tài)內(nèi)容的空間。

JSP和服務(wù)器端包含(Server-SideInclude,SSI)相比

SSI是一種受到廣泛支持的在靜態(tài)HTML中引入外部代碼的技術(shù)。JSP在這方面的支持

更為完善,因?yàn)樗梢杂肧ervlet而不是獨(dú)立的程序來生成動(dòng)態(tài)內(nèi)容。另外,SSI實(shí)際上只

用于簡(jiǎn)單的包含,而不是面向那些能夠處理表單數(shù)據(jù)、訪問數(shù)據(jù)庫的“真正的”程序。

JSP和JavaScript相比

JavaScript能夠在客戶端動(dòng)態(tài)地生成HTML。雖然JavaScript很有用,但它只能處理

以客戶端環(huán)境為基礎(chǔ)的動(dòng)態(tài)信息。除了Cookie之外,HTTP狀態(tài)和表單提交數(shù)據(jù)對(duì)JavaScript

來說都是不可用的。另外,由于是在客戶端運(yùn)行,JavaScript不能訪問服務(wù)器端資源,比

如數(shù)據(jù)庫、目錄信息等等。

JSP中request屬性的用法

一、request.getParameter()和request.getAttribute()區(qū)別

(1)request.getParameter()取得是通過容器的實(shí)現(xiàn)來取得通過類似post,get等方

式傳入的數(shù)據(jù),request.setAttributeO和getAttribute。只是在web容器內(nèi)部流轉(zhuǎn),僅

僅是請(qǐng)求處理階段。

(2)request.getParameter()方法傳遞的數(shù)據(jù),會(huì)從Web客戶端傳到Web服務(wù)器端,

代表HTTP請(qǐng)求數(shù)據(jù)。request.getParameter()方法返回String類型的數(shù)據(jù)。

request.setAttributeO和getAttribute。方法傳遞的數(shù)據(jù)只會(huì)存在于Web容器內(nèi)部

還有一點(diǎn)就是,HttpServletRoquest類有setAttributeO方法,而沒有setParameter()

方法。

拿一個(gè)例子來說一下吧,假如兩個(gè)WEB頁面間為鏈接關(guān)系時(shí),就是說要從1.jsp鏈接

到2.jsp時(shí),被鏈接的是2.jsp可以通過getParameter()方法來獲得請(qǐng)求參數(shù).

假如Ljsp里有

<formname二〃forml〃method二〃post"action=〃2.jsp〃>

請(qǐng)輸入用戶姓名:<inputtype二〃text”

name=z,username/,>

<inputtype="submit“name="Submit"value二〃提交〃〉

</form>

的話在2.jsp中通過request.getParameter("username")方法來獲得請(qǐng)求參數(shù)

username:

<%Stringusername=request.getParameter("username");%>

但是如果兩個(gè)WEB間為轉(zhuǎn)發(fā)關(guān)系時(shí),轉(zhuǎn)發(fā)目的WEB可以用getAttributeO方法來和轉(zhuǎn)

發(fā)源WEB共享request范圍內(nèi)的數(shù)據(jù),也還是說一個(gè)例子吧。

有1.jsp和2.jsp

Ljsp希望向2.jsp傳遞當(dāng)前的用戶名字,如何傳遞這一數(shù)據(jù)呢?先在I.jsp中調(diào)用如

下setAttribute()方法:

<%

Stringusername=request.getParameter("username");

request.setAttribute("username”,username);

%>

<jsp:forwardpage=〃2.jsp〃/>

在2.jsp中通過getAttributeO方法獲得用戶名字:

<%String

username=(String)request.getAttribute(^username");%>

二、request.getAttribute()與request.setAttributeO

request.getAttribute("nameOfObj")可得到JSP頁面一表單中控件的Valueo其實(shí)表

單控件中的Object的name與value是存放在一個(gè)哈希表中的,所以在這里給出Object的

name會(huì)到哈希表中找出對(duì)應(yīng)它的value。

而不同頁面間傳值使用request.setAttribute(position,nameOfObj)時(shí)、只會(huì)從

a.jsp到b.jsp一次傳遞,之后這個(gè)request就會(huì)失去它的作用范圍,再傳就要再設(shè)一個(gè)

request.setAttributeOo而使用session.setAttribute()會(huì)在一個(gè)過程中始終保有這個(gè)

值。

P.S.:JavaScript與JSP中不能相互傳值,因?yàn)镴avaScript運(yùn)行在客戶端,而JSP

運(yùn)行在服務(wù)器端。若想使它們之間可以相互傳遞參數(shù),可以在JSP中設(shè)置一個(gè)hidden控件,

用它的value結(jié)合上面所說的用法來傳遞所需的數(shù)值。

JSP的特點(diǎn)和其它動(dòng)態(tài)網(wǎng)頁開發(fā)技術(shù)比較

JSP技術(shù)特點(diǎn):

i.將內(nèi)容的生成和顯示進(jìn)行分離

使用JSP技術(shù),Web頁面開發(fā)人員可以使用HTML或者XML標(biāo)識(shí)來設(shè)計(jì)和格式化最終頁

面。使用JSP標(biāo)識(shí)或者小腳本來生成頁面上的動(dòng)態(tài)內(nèi)容。生成內(nèi)容的邏輯被封裝在標(biāo)識(shí)和

JavaBeans組件中,并且捆綁在小腳本中,所有的腳本在服務(wù)器端運(yùn)行。如果核心邏輯被封

裝在標(biāo)識(shí)和Beans中,那么其他人,如Web管理人員和頁面設(shè)計(jì)者,能夠編輯和使用JSP

頁面,而不影響內(nèi)容的生成。

在服務(wù)器端,JSP引擎解釋JSP標(biāo)識(shí)和小腳本,生成所請(qǐng)求的內(nèi)容(例如,通過訪問

JavaBeans組件,使用JDBCTM技術(shù)訪問數(shù)據(jù)庫,或者包含文件),并且將結(jié)果以HTML(或

者XML)頁面的形式發(fā)送回瀏覽器。這有助于作者保護(hù)自己的代碼,而又保證任何基于HTML

的Web瀏覽器的完全可用性。

2.強(qiáng)調(diào)可重用的組件

絕大多數(shù)JSP頁面依賴于可重用的,跨平臺(tái)的組件(JavaBeans或者Enterprise

JavaBeansTM組件)來執(zhí)行應(yīng)用程序所要求的更為復(fù)雜的處理。開發(fā)人員能夠共享和交換執(zhí)

行普通操作的組件,或者使得這些組件為更多的使用者或者客戶團(tuán)體所使用。基于組件的方

法加速了總體開發(fā)過程,并且使得各種組織在他們現(xiàn)有的技能和優(yōu)化結(jié)果的開發(fā)努力中得到

平衡。

3.采用標(biāo)識(shí)簡(jiǎn)化頁面開發(fā)

Web頁面開發(fā)人員不會(huì)都是熟悉腳本語言的編程人員。JavaServerPage技術(shù)封裝了許

多功能,這些功能是在易用的、與JSP相關(guān)的XML標(biāo)識(shí)中進(jìn)行動(dòng)態(tài)內(nèi)容生成所需要的。

標(biāo)準(zhǔn)的JSP標(biāo)識(shí)能夠訪問和實(shí)例化JavaBeans組件,設(shè)置或者檢索組件屬性,下載

Applet,以及執(zhí)行用其他方法更難于編碼和耗時(shí)的功能。通過開發(fā)定制化標(biāo)識(shí)庫,JSP技術(shù)

是可以擴(kuò)展的。今后,第三方開發(fā)人員和其他人員可以為常用功能創(chuàng)建自己的標(biāo)識(shí)庫。這使

得Web頁面開發(fā)人員能夠使用熟悉的工具和如同標(biāo)識(shí)一樣的執(zhí)行特定功能的構(gòu)件來工作。

JSP技術(shù)很容易整合到多種應(yīng)用體系結(jié)構(gòu)中,以利用現(xiàn)存的工具和技巧,并且擴(kuò)展到能

夠支持企業(yè)級(jí)的分布式應(yīng)用。作為采用Java技術(shù)家族的一部分,以及Java2(企業(yè)版體系

結(jié)構(gòu))的個(gè)組成部分,JSP技術(shù)能夠支持高度復(fù)雜的基于Web的應(yīng)用。

由于JSP頁面的內(nèi)置腳本語言是基于Java編程語言的,而且所有的JSP頁面都被編譯

成為JavaServlet,JSP頁面就具有Java技術(shù)的所有好處,包括健壯的存儲(chǔ)管理和安全性。

作為Java平臺(tái)的一部分,JSP擁有Java編程語言“一次編寫,各處運(yùn)行”的特點(diǎn)。隨

著越來越多的供應(yīng)商將JSP支持添加到他們的產(chǎn)品中,您可以使用自己所選擇的服務(wù)器和工

具,更改工具或服務(wù)器并不影響當(dāng)前的應(yīng)用。

與其它動(dòng)態(tài)網(wǎng)頁技術(shù)的比較:

與傳統(tǒng)的CG1方式相比

a.后臺(tái)實(shí)現(xiàn)邏輯是基于JavaComponent的,具有跨平臺(tái)的特點(diǎn)

b.將應(yīng)用邏輯與頁面表現(xiàn)分離,使得應(yīng)用邏輯能夠最大程度得到復(fù)用,從而提高開發(fā)

效率

c.運(yùn)行比CGI方式高,尤其對(duì)于數(shù)據(jù)庫訪問時(shí),提供了連接池緩沖機(jī)制,使運(yùn)行所需

資源最小

d.安全,由于后臺(tái)是完全基于Java技術(shù)的,安全性由Java的安全機(jī)制予以保障

e.由于與ASP很近似,不需要太多的編程知識(shí)就可以動(dòng)手編寫JSP

f.內(nèi)置支持XML,使用XML從而使頁面具有更強(qiáng)的表現(xiàn)力和減少編程工作量

與Asp和php的比較:

目前,最常用的三種動(dòng)態(tài)網(wǎng)頁語言有ASP(ActiveServerPages),JSP(JavaServer

Pges),PHP(HypertextPreprocessor)?

ASP全名ActiveServerPages,是一個(gè)WEB服務(wù)器端的開發(fā)環(huán)境,利用它可以產(chǎn)生

和運(yùn)行動(dòng)態(tài)的、交互的、高性能的WEB服務(wù)應(yīng)用程序。ASP采用腳本語言VBScript(Java

script)作為自己的開發(fā)語言。

PHP是?種跨平臺(tái)的服務(wù)器端的嵌入式腳本語言.它大量地借用C,Java和Perl語言的

語法,并耦合PHP自己的特性,使WEB開發(fā)者能夠快速地寫出動(dòng)態(tài)生成頁面.它支持目前絕多

數(shù)數(shù)據(jù)庫。還有一點(diǎn),PHP是完全免費(fèi)的,不用花錢,你可以從PHP官方站點(diǎn)

(http://www.php.net)自由下載。而且你可以不受限制地獲得源碼,甚至可以從中加進(jìn)你自

己需要的特色。

JSP是Sun公司推出的新一代站點(diǎn)開發(fā)語言,他完全解決了目前ASP,PHP的一個(gè)通病

一一腳本級(jí)執(zhí)行(據(jù)說PHP4也已經(jīng)在Zend的支持下,實(shí)現(xiàn)編譯運(yùn)行).Sun公司借助自己

在Java上的不凡造詣,將Java從Java應(yīng)用程序和JavaApplet之外,又有新的碩果,

就是JspJavaServerPage。Jsp可以在Serverlet和JavaBean的支持下,完成功能

強(qiáng)大的站點(diǎn)程序。

三者都提供在HTML代碼中混合某種程序代碼、由語言引擎解釋執(zhí)行程序代碼的能力。

但JSP代碼被編譯成Servlet并由Java虛擬機(jī)解釋執(zhí)行,這種編譯操作僅在對(duì)JSP頁面

的第一次請(qǐng)求時(shí)發(fā)生。在ASP、PHP、JSP環(huán)境下,HTML代碼主要負(fù)責(zé)描述信息的顯示樣

式,而程序代碼則用來描述處理邏輯。普通的HTML頁面只依賴于Web服務(wù)器,而ASP、

PHP、JSP頁面需要附加的語言引擎分析和執(zhí)行程序代碼。程序代碼的執(zhí)行結(jié)果被重新嵌入

到HTML代碼中,然后一起發(fā)送給瀏覽器。ASP、PHP、JSP三者都是面向Web服務(wù)器的

技術(shù),客戶端瀏覽器不需要任何附加的軟件支持。

JSPvsASP

JSP跨平臺(tái),而且支持Apache,Netscape,IIS,IBMHttpServer在內(nèi)的所有主流Web

Server(市場(chǎng)份額在85%以上),而ASP目前只支持NT+IIS(市場(chǎng)份額在20%左右);提供

了更好的安全機(jī)制,這對(duì)于e-business這樣的應(yīng)用來說是至關(guān)重要的;JSP可以跨操作系

統(tǒng)、WebServer和應(yīng)用服務(wù)器,而ASP只限于NT+HS;

JSP是一個(gè)開放的標(biāo)準(zhǔn),得到了Oracle,Netscape,IBM&WebLogic,Inprise等的支

持;JSP的組件編寫更為容易,而且JSP的性能由于ASP;

JSPvsPHP

JSP是一個(gè)業(yè)界標(biāo)準(zhǔn),得到Sun,IBM,Oracle,BEA,Apache等的支持,PHP只是一個(gè)開

發(fā)組織并不強(qiáng)的freeware;PHP的性能不好,是解釋型的,JSP采用JIT編譯后,和c不

相上下,而且支持多線程;JSP支持的平臺(tái)眾多,從Win98,NT,Unix,Linux,FreeBSD到

AS/400,0S/390,而PHP支持的平臺(tái)有限;JSP可以利用JDBC和眾多主流關(guān)系數(shù)據(jù)庫連接,

而PHP目前只支持MySql和Oracle等有限的幾種;JSP中的組件,JavaBean和EJB開發(fā)非

常容易,而且還可以在JSP中使用Java所有的類和功能。而PHP只能用C寫一些功能有限

的組件,而且編寫較為復(fù)雜;利用JSP可以支持EJB,以支持Transaction和CORBA標(biāo)準(zhǔn),

而且還可以支持LDAP,Message等服務(wù),使得訪問ERP,C1CS,MQ等企業(yè)應(yīng)用非常容易。而

PHP在這方面先天不足,所以對(duì)于電子商務(wù)這樣的Mission-critical的應(yīng)用來說,PHP并不

適合。

性能比較

有人做過試驗(yàn),對(duì)這三種語言分別做循環(huán)性能測(cè)試及存取Oracle數(shù)據(jù)庫測(cè)試。在循環(huán)

性能測(cè)試中,JSP只用了令人吃驚的四秒鐘就結(jié)束了20000*20000的循環(huán)。而ASP、PHP測(cè)

試的是2000*2000循環(huán)(少一個(gè)數(shù)量級(jí)),卻分別用了63秒和84秒。

數(shù)據(jù)庫測(cè)試中,三者分別對(duì)Oracle8進(jìn)行1000次Insert,Update,Select,和

Delete:Jsp需要13秒,Php需要69秒,ASP則需要73秒。

前景分析

目前在國內(nèi)PHP與ASP應(yīng)用最為廣泛。而JSP由于是一種較新的技術(shù),國內(nèi)采用的較

少。但在國外,JSP已經(jīng)是比較流行的一種技術(shù),尤其是電子商務(wù)類的網(wǎng)站,多采用JSP。

采用PHP的網(wǎng)站如新浪網(wǎng)(sina)、中國人(Chinaren)等,但由于PHP本身存在的一

些缺點(diǎn),使得它不適合應(yīng)用于大型電子商務(wù)站點(diǎn),而更適合些小型的商業(yè)站點(diǎn)。

首先,PHP缺乏規(guī)模支持。其次,缺乏多層結(jié)構(gòu)支持。對(duì)于大負(fù)荷站點(diǎn),解決方法只有

?個(gè):分布計(jì)算。數(shù)據(jù)庫、應(yīng)用邏輯層、表示邏輯層彼此分開,而且同層也可以根據(jù)流量分

開,組成二維陣列。而PHP則缺乏這種支持。還有上面提到過的一點(diǎn),PHP提供的數(shù)據(jù)庫接

口支持不統(tǒng)一,這就使得它不適合運(yùn)用在電子商務(wù)中。

ASP和JSP則沒有以上缺陷,ASP可以通過MicrosoftWindowsd的COM/DCOM獲得

ActiveX規(guī)模支持,通過DCOM和TranscationServer獲得結(jié)構(gòu)支持;JSP可以通過SUNJava

的JavaClass和EJB獲得規(guī)模支持,通過EJB/CORBA以及眾多廠商的ApplicationServer

獲得結(jié)構(gòu)支持。

三者中,JSP應(yīng)該是未來發(fā)展的趨勢(shì)。世界匕些大的電子商務(wù)解決方案提供商都采用

JSP/Servleto比較出名的如IBM的E-business,它的核心是采用JSP/Servlet的

WebSphere;西方另外一-個(gè)非常著名的電子商務(wù)軟件提供商,Intershop。它原來的產(chǎn)品

Intershopl2,3,4占據(jù)了主要的電子商務(wù)軟件份額。它們都是通過CG1來提供支持的。

但去年10月后它推出了Enfinity,一個(gè)采用JSP/Servlet的電子商務(wù)ApplicationServer,

而且聲言不再開發(fā)傳統(tǒng)軟件。

JSP應(yīng)用范圍:

JSP同PHP類似,幾乎可以運(yùn)行于所有平臺(tái)。如WinNT,Linux,Unix.NT下HS通過一

個(gè)插件,例如JRUN或者ServletExec,就能支持JSP。著名的Web服務(wù)器Apache已經(jīng)能夠

支持JSP。由于Apache廣泛應(yīng)用在NT、Unix和Linux上,因此JSP有更廣泛的運(yùn)行平臺(tái)。

雖然現(xiàn)在NT操作系統(tǒng)占了很大的市場(chǎng)份額,但是在服務(wù)器方面Unix的優(yōu)勢(shì)仍然很大,而新

崛起的Linux更是來勢(shì)不小。從一-個(gè)平臺(tái)移植到另外一個(gè)平臺(tái),JSP和JavaBean甚至不用

重新編譯,因?yàn)镴ava字節(jié)碼都是標(biāo)準(zhǔn)的與平臺(tái)無關(guān)的。

新手入門:JSP中“預(yù)定義變量”的使用

為了簡(jiǎn)化JSP表達(dá)式和scriptlets中的代碼,提供了8種自動(dòng)定義的變量,有時(shí)稱做

implicitobjects(固有對(duì)象)。它們是:

request,response,out,session,application,config,pageContext,和page。下面我們來

詳細(xì)的了解它們。

request

與request相聯(lián)系的是HttpServletRequest類,使您可以得到request的參數(shù)(通過

getParameter方法),request的類型(GET,POST,HEAD,等等),和引入的HTTP頭

(cookies,Referer,等等)。嚴(yán)格來說,request是類ServletRequest的一個(gè)子類而不是

HttpServletRequest類的,事實(shí)上,如果request的協(xié)議不是HTTP,那麼它幾乎不會(huì)工作。

response

對(duì)客戶端的response與HttpServletResponse相連。請(qǐng)注意,因?yàn)檩敵隽魇欠湃刖彌_

的,所以可以設(shè)置HTTP狀態(tài)碼和response頭,盡管在標(biāo)準(zhǔn)的servlets中不允許將之發(fā)送

到客戶端。

out

這里使用PrintWriter類來發(fā)送輸出到客戶端。然而,為了使response對(duì)象有效,可

使用一個(gè)PrintWrite類的使用緩沖的版本JspWriter。使用session的屬性pagedirective,

您可以自己定義緩沖的大小,甚至可以在使用了buffer屬性后關(guān)閉緩沖。也請(qǐng)注意,out

僅用于scriptlets之中,因?yàn)镴SP表達(dá)式自動(dòng)的放入輸出流,所以極少需要明確的聲明out。

session

應(yīng)用與request相聯(lián)系的IlttpSession類。因?yàn)閟ession是自動(dòng)創(chuàng)建的,即使沒有一

個(gè)引入的session,這種變量仍可綁定。有一個(gè)例外是,如果您用pagedirective關(guān)閉

session,再試圖使用session時(shí)將導(dǎo)致錯(cuò)誤(在JSP頁面向servlet轉(zhuǎn)換時(shí))。

application

使用ServeletContext類,通過使用getServletConfig().getContext()得到。

config

是一個(gè)ServletConfig類的對(duì)象。

pageContext

這是JSP中的一個(gè)新的類PageContext,用于精練特定服務(wù)器的特點(diǎn)時(shí)使用,如提高

JspWriters的執(zhí)行效率。如果您通過這個(gè)類訪問而不是直接的,您的代碼將仍然運(yùn)行在“規(guī)

則”的JSP/servlet引擎。

page

在JAVA中不是很有用,它僅僅是用來保存在腳本的語言不是JAVA時(shí)的時(shí)間。

JSP基本語法與簡(jiǎn)單表單處理

jsp語法:

jsp指令元素

(1)include:導(dǎo)入其它文件夾

(2)page:

language:用什么語言,只能為JAVA

contentType:MIME類型

import:導(dǎo)入java包

(3)taglib:自定義標(biāo)簽庫

jsp常用標(biāo)準(zhǔn)元素

(1)jsp:forward:跳轉(zhuǎn)到其它頁面

(2)jsp:include:插入其它文件eg:

(3)jsp:plugin:插入applet小程序

(4)jsp:param:參數(shù)傳值

jsp內(nèi)置對(duì)象

(1)request:常用方法

getParameterO:提取表單元素的值

getRemoteAddr():獲取客戶端IP值

(2)response:

sendRedirect():重定向到其它網(wǎng)頁

setcontentTypeO;設(shè)置MIME值

(3)out:向網(wǎng)頁輸出

(4)application

setAttribute(String,Object)把變量的值保存在application中;

getAttribute(String)獲取保存在applicaion中的值

removeAttribute(String)刪除保存在application中的值

(5)session

setAttribute(String,Object)把變量的值保存在session中;

getAttribute(String)獲取保存在session中的值

removeAttribute(String)刪除保存在

getID:獲取session編號(hào)

jsp簡(jiǎn)單表單處理

<%@pagecontentType=,,text/html;charset=gb2312z,%>

<%@pagelanguage二〃java〃%>

<html>

<head>〈title>表單處理</titleX/head>

<formname二〃frm〃method二〃GET”

action="ch-show.jsp〃>

<tableboder=0>

<tr>〈td>用戶名:</td><td><inputtype=text

name二〃Tname〃></td></tr>

<trXtd>密碼:</td><td><inputtype=password

name=/,Tpassz,></td></tr>

<trXtd>性別:</td>

<td><inputtype=radioname二〃Tsex〃value=〃男”

checked)男

<inputtype=radioname二〃Tsex〃value二〃女">女</{(1>

</tr>

<tr〉<td>愛好:</td>

<td><inputtype=checkboxname=Tchlvalue二〃體育〃〉

體育

<inputtype=checkboxname=Tch2value二〃美術(shù)〃〉美術(shù)

<inputtype=checkboxname=Tch3value二〃音樂〃〉音樂

</td>

</tr>

<trXtd>專業(yè):</td><td><selectname=Ty>

<optionvalue二〃計(jì)算機(jī)〃〉計(jì)算機(jī)</option>

<optionvalue二〃文學(xué)〃〉文學(xué)〈/option》

<optionvalue=〃數(shù)學(xué)〃》數(shù)學(xué)〈/option〉

</select>

<tr><td>^[g*:</td><td><textareaname=Tlrows=5

cols=20></textarea></td></tr>

<tr><td><inputtype=submitvalue=〃用戶信息

〃X/tdX/tr>

</table></form>

<%

StringTname=request.getParameter(z,Tname,z);

StringTpass=request.getParameter(^Tpass^);

StringTsex=request.getParameter(z/Tsex,z);

StringTlovel=request.getParameter(^TchrO;

StringTlove2=request.getParameter(zzTch2/z);

StringTlove3=request.getParameterCzTch3,z);

StringTy=request.getParameter(z,Tyz,);

StringT1=request.getParameter(ZZT1Z,);

bytebl[]=Tsex.getBytes("ISO-8859T〃);

Tsex=newString(bl);

if(Tlovel==null)

(

Tlovel二〃〃;

}

else

byteb2[]=Tlovel.getBytes("IS0-8859T");

Tlovel=newString(b2);

)

if(Ty==null)

{

Ty=;

)

else

{

byteb5[]=Ty.getBytes("ISO8859T");

Ty=newString(b5);

)

if(Tlove2==null)

(

Tlove2="";

}

else

{

byteb3[]=Tlove2.getBytes("IS0-8859T");

Tlove2=newString(b3);

)

if(Tlove3==null)

{

Tlove3=;

)

else

(

byteb4[]=Tlove3.getBytes(,,IS0-8859-l,/);

Tlove3=newString(b4);

}

。ut.print(〃你的信息是:〃+〃<br>〃);

out.print(〃用戶名〃+Tname+〃〈br>〃);

out.print(〃密碼〃+Tname+〃〈br>〃);

out.print(〃性別〃+Tsex+〃〈br>〃);

out.print(〃愛好〃+Tlovel+Tlove2+Tlove3+〃〈br>〃);

out.print(〃專業(yè)〃+Ty+〃〈br>〃);

out.print(〃留言〃+Tl+〃〈br>〃);

</body>

Javascript操作select控件大全

1判斷select選項(xiàng)中是否存在Value—paraValue〃的Item

2向select選項(xiàng)中加入一個(gè)Item

3從select選項(xiàng)中刪除一個(gè)Item

4刪除select中選中的項(xiàng)

5修改select選項(xiàng)中value二〃paraValue〃的text為"paraText”

6設(shè)置select中text=〃paraText〃的第一個(gè)Item為選中

7設(shè)置select中value="paraValue〃的Item為選中

8得到select的當(dāng)前選中項(xiàng)的value

9得到selec

溫馨提示

  • 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)論