第2章 Java Web開發(fā)基礎_第1頁
第2章 Java Web開發(fā)基礎_第2頁
第2章 Java Web開發(fā)基礎_第3頁
第2章 Java Web開發(fā)基礎_第4頁
第2章 Java Web開發(fā)基礎_第5頁
已閱讀5頁,還剩110頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、2.1HTML語言語言2.22.3JSP基礎基礎Servlet技術技術2.4Java Web綜合開發(fā)實戰(zhàn):網絡留言系統(tǒng)綜合開發(fā)實戰(zhàn):網絡留言系統(tǒng)2.1.1 HTML文件的基本結構文件的基本結構HTML文件的基本結構如圖2.1所示。下面的例子,文檔頭部分有網頁標題標記,文檔主體部分有圖片標記、超鏈接標記及一些文字。把這段代碼命名為a.html,保存在想要保存的路徑。雙擊該文件就可以運行了。只要該路徑下有b.html文件,單擊超鏈接就可以跳轉到b.html?!纠?.1】第一個網頁。第一個html網頁超鏈接這是我的第一個網頁1HTML標記標記HTML標記表示文檔內容的開始和結束。是開始標記,是結束標

2、記,其他所有的HTML代碼都位于這兩個標記之間。瀏覽器將該標記中的內容視為一個Web文檔,按照HTML語言規(guī)則對文檔內的標記進行解釋。2首部標記首部標記首部標記中提供與網頁有關的各種信息。在首部標記中,一般使用下列標記。.:制定網頁的標題。.:定義文檔內容樣式表。. :插入腳本語言程序。:描述網頁信息。3標題欄標記標題欄標記標題欄標記的內容是在瀏覽器標題欄中顯示的文本。通常,Web搜索工具用它作為索引。4描述標記描述標記描述文檔屬性參數。5正文標記正文標記正文標記的格式如下:正文標記中包含文檔的內容。其常用屬性如下。 background:文檔背景圖像的URL 地址。 bgcolor:文檔的背

3、景顏色。 text:文檔中文本的顏色。 link:文檔中鏈接的顏色。 vlink:文檔中已被訪問過的鏈接的顏色。 alink:文檔中正被選中的鏈接的顏色。6分段標記分段標記 段落是文檔的基本信息單位。利用分段標記,可以忽略文檔中原有的回車和換行。單獨使用標記時會空一行,使后續(xù)內容隔一行顯示。同時使用,則將段落包圍起來,表示一個分段的塊。其最常用的屬性為align,其值如下。left:左對齊(默認值)center:居中對齊right:右對齊justify:兩邊對齊7換行標記換行標記該標記強行中斷當前行,使后續(xù)內容在下一行顯示,這個標記很簡單,也很常用。8標題標記標題標記標題標記的格式如下:其常用

4、屬性也是align。9對中標記對中標記該標記中間的內容全部居中。10塊標記塊標記塊標記的作用是定義文檔塊。其常用屬性也是align。11水平線標記水平線標記在標記位置畫一條線。常用屬性如下。 align:段落的水平對齊方式。 color:線的顏色。 size:線的寬度(以像素為單位)。 width:線的長度(像素或占頁面寬度的百分數)。 noshade:顯示一條無陰影的實線。12字體標記字體標記字體標記用來設置文本的字符格式,主要包括字體、字號和顏色等。常用屬性如下。 face:字體名表。 size:字號值。 color:顏色值。設置字體的顏色。13圖像標記圖像標記圖像標記的常用屬性如下。 s

5、rc:圖像文件的URL 地址。 alt:圖像的簡單文本說明,在瀏覽器下不能顯示圖像或圖像加載時間過長時顯示該文本。 height:顯示圖像的高度(像素或百分比)。 width:顯示圖像的寬度(像素或百分比)。 align:圖像大小小于顯示區(qū)域大小時的對齊方式。14超鏈接標記超鏈接標記超鏈接內容超鏈接的常用屬性如下。 href:目標端點的URL 地址(可以包含一個或多個參數)。 target:窗口或框架的名稱。1顏色顏色 使用顏色名稱來表示。例如,紅色、綠色和藍色分別用red、green和blue表示。 使用十六進制格式數值#RRGGBB來表示,RR、GG和BB分別表示顏色中的紅、綠、藍三原色的

6、兩位十六進制數據。例如,紅色、綠色和藍色分別用#FF0000、#00FF00和#0000FF表示。表2.1列出了16種標準顏色及其十六進制數值。2字符實體字符實體一個字符實體以&符號打頭后跟實體名字或者是#加上實體編號,最后是一個分號。最常用的字符實體如表2.2所示。3常用屬性常用屬性有些屬性在HTML許多標記中出現(xiàn)。 類名:class。 唯一標識:id。 內樣式: style。 提示信息:title。4常用事件常用事件事件處理描述是一個或一系列以分號隔開的 JavaScript 表達式、方法和函數調用,并用引號引起來。當事件發(fā)生時,瀏覽器會執(zhí)行這些代碼。事件包括窗口事件、表單及其元素

7、事件、鍵盤事件、鼠標事件。1表單表單表單用來從用戶(站點訪問者)處收集信息,然后將這些信息提交給服務器進行處理。表單中可以包含允許用戶進行交互的各種控件,例如,文本框、列表框、復選框和單選按鈕等。用戶在表單中輸入或選擇數據后提交,該數據就會提交到相應的表單處理程序,以各種不同的方式進行處理。表單結構如下: form標記的屬性如下。標記的屬性如下。 name:表單的名稱。 method:表單數據傳輸到服務器的方法。 action:接收表單數據的服務器端程序或動態(tài)網頁的URL地址。 target:目標窗口。form標記有以下事件。標記有以下事件。 onsubmit:提交表單時調用的時間處理程序。

8、onreset:重置表單時調用的處理程序。2表單:輸入控件表單:輸入控件(1)單行文本框。)單行文本框。創(chuàng)建單行文本框方法如下:單行文本框的屬性如下。 name:單行文本框的名稱,通過它可以在腳本中引用該文本框控件。 value:文本框的值。 default value:文本框的初始值。 size:文本框的寬度(字符數)。 maxlength:允許在文本框內輸入的最大字符數。 form:所屬的表單(只讀)。單行文本框的方法如下。 click():單擊該文本框。 focus():得到焦點。 blur():失去焦點。 select():選擇文本框的內容。單行文本框的事件如下。 onclick:單擊

9、該文本框時執(zhí)行的代碼。 onblur:失去焦點時執(zhí)行的代碼。 onchange:內容變化時執(zhí)行的代碼。 onfocus:得到焦點時執(zhí)行的代碼。 onselect:選擇內容時執(zhí)行的代碼。(2)密碼文本框。)密碼文本框。創(chuàng)建密碼文本框方法如下:密碼文本框的屬性、方法和事件與單行文本框的設置基本相同,只是密碼文本框沒有onclick事件。(3)隱藏域。)隱藏域。創(chuàng)建隱藏域方法如下:隱藏域的屬性、方法和事件與單行文本框的設置基本相同,只是沒有default value屬性。(4)復選框。)復選框。創(chuàng)建復選框方法如下:選項文本復選框的屬性如下。 name:復選框的名稱。 value:選中時提交的值。 c

10、hecked:當第一次打開表時該復選框處于選中狀態(tài)。 defaultchecked:判斷復選框是否定義了checked屬性。復選框的方法如下。 focus():得到焦點。 blur():失去焦點。 click():單擊該復選框。復選框的事件如下。 onfocus:得到焦點時執(zhí)行的代碼。 onblur:失去焦點時執(zhí)行的代碼。 onclick:單擊該文本框時執(zhí)行的代碼。(5)單選按鈕。)單選按鈕。創(chuàng)建單選按鈕方法如下:選項文本單選按鈕的屬性如下。 name:單選按鈕的名稱,若干個名稱相同的單選按鈕構成一個控件組,在該組中只能選中一個選項。 value:提交時的值。 checked:當第一次打開表單

11、時該單選按鈕處于選中狀態(tài)。該屬性是可選的。(6)按鈕。)按鈕。使用input標記可以在表單中添加3種類型的按鈕:提交按鈕、重置按鈕和自定義按鈕。創(chuàng)建按鈕的方法如下:按鈕的屬性如下。 type:按鈕種類,具體如下。 name:按鈕的名稱。 value:顯示在按鈕上的標題文本。按鈕的事件如下。 onclick:單擊按鈕執(zhí)行的腳本代碼。(7)文件域。)文件域。創(chuàng)建文件域的方法如下:其中,“屬性=值”部分可以進行如下設置。 name:文件域的名稱。 value:初始文件名。 size:文件名輸入框的寬度。3表單:滾動文本框表單:滾動文本框初始值其屬性如下。 name:滾動文本框控件的名稱。 rows:

12、控件的高度。 cols:控件的寬度。 readonly:表示文本框中的內容是只讀的,不能被修改。4表單:選項選單表單:選項選單創(chuàng)建選項選單方法如下:選項1選項2其屬性如下。 name:選項選單控件的名稱。 size:在列表中一次可以看到的選項數目,默認值為1。 multiple:允許做多項選擇。 selected:該選項的初始狀態(tài)為選中。【例2.2】表單控件的使用。將下面的文件命名為all.html,保存到磁盤上。雙擊all.html文件,在頁面上就會出現(xiàn)如圖2.2所示的界面。5表格表格表格由表頭、行和單元格組成,常用于組織和顯示信息,還可以用于安排頁面布局。表格的表頭、行和單元格分別用不同的

13、標記來定義??梢杂胻able標記定義表格;表格中的每一行用tr標記來表示;行中的單元格用td或th標記定義。其中th標記定義表格的列標題單元格,表格的標題說明則用caption標記來定義。定義表格的格式圖解,如圖2.3所示?!纠?.3】表格的使用。把這段代碼保存,命名為table.html,雙擊該文件會看到如圖2.4所示的界面。(1)設置表格的屬性)設置表格的屬性用table標記創(chuàng)建表格時,可以設置以下屬性。 align:表格的對齊方式,其屬性值如下。 background:表格背景圖片的URL地址。 bgcolor:表格的背景顏色。 border:表格邊框的寬度(像素),默認值為0。 bor

14、dercolor:表格邊框的顏色,border0時起作用。 bordercolordark:三維邊框的陰影顏色,border0時起作用。 bordercolorlight:三維邊框的高亮顯示顏色,border0時起作用。 cellpandding:單元格內數據與單元格邊框之間的間距(像素)。 width:表格的寬度(像素或百分比)。(2)設置行的屬性)設置行的屬性表格中的每一行是用tr標記來定義的,可以設置下列屬性。 align:行中單元格的水平對齊方式,其屬性值如下。 background:行的背景圖片的URL地址。 bgcolor:行的背景顏色。 bordercolor:行的邊框顏色,只有

15、當table標記的border0時起作用。 bordercolordark:行的三維邊框的陰影顏色,只有當table標記的border0時起作用。 bordercolorlight:行的三維邊框的高亮顯示顏色,只有當table標記的border0時起作用。 valign:行中單元格內容的垂直對齊方式,其屬性值如下。(3)設置單元格的屬性)設置單元格的屬性td標記和th標記的屬性如下。 align:行中單元格的水平對齊方式,其屬性值如下。 background:單元格的背景圖片的URL 地址。 bgcolor:單元格的背景顏色。 bordercolor:單元格的邊框顏色,只有當table標記的b

16、order0時起作用。 bordercolordark:單元格的三維邊框的陰影顏色,只有當table標記的border0時起作用。 bordercolorlight:單元格的三維邊框的高亮顯示顏色,只有當table標記的border0時起作用。 colspan:合并單元格時一個單元格跨越的表格列數。 rowspan:合并單元格時一個單元格跨越的表格行數。 valign:單元格中文本的垂直對齊方式,其屬性值如下。 nowrap:若指定該屬性,則要避免Web瀏覽器將單元格里的文本換行。下面再來看看【例2.2】中all.html文件使用表格后的情況,布局后的界面,如圖2.5所示?!纠?.4】用表格呈

17、現(xiàn)表單。將下面的文件命名為form_table.html,保存到磁盤上:框架網頁通過一個frameset(框架集)標記和多個frame(框架)標記來定義。在框架網頁中,將frameset標記置于head之后,以取代body的位置,還可以使用noframes標記生成不能被瀏覽器顯示時的替換內容??蚣芫W頁的基本結構如下:框架網頁的基本結構1框架集框架集可以使用frameset標記的下列屬性對框架的結構進行設置。 cols:創(chuàng)建縱向分隔框架時指定各個框架的列寬。取值有3種形式,即像素、百分比(%)和相對尺寸(*)。 rows:橫向分隔框架時各個框架的行高。 frameborder:框架周圍是否顯示三

18、維邊框。 framespacing:框架之間的間隔(以像素為單位,默認值為0)。例如,創(chuàng)建一個嵌套框架集。創(chuàng)建框架網頁 /把框架分為3個部分(行分),分別是20%、400及剩余部分 /將第一行部分分為2列,300及剩余部分此網頁使用了框架,但您的瀏覽器不支持框架。2框架框架frame標記具有下列屬性。 name:框架的名稱。 frameboder:框架周圍是否顯示三維邊框。 marginheight:框架的高度(以像素為單位)。 marginwidth:框架的寬度(以像素為單位)。 noresize:不能調整框架的大小。 scrolling:指定框架是否可以滾動,其屬性值如下。 src:在框架

19、中顯示的HTML文件?!纠?.5】學生信息管理系統(tǒng)。首先看實現(xiàn)主界面,如圖2.6所示。單擊【學生成績查詢】超鏈接,出現(xiàn)如圖2.7所示的界面。單擊【學生信息顯示】超鏈接,出現(xiàn)如圖2.8所示的界面。代碼實現(xiàn)如下。(1)head.html學生信息管理系統(tǒng)(2)left.html 學生成績查詢學生信息顯示返回開始頁面(3)right.html這里是首頁。(4)frame.html在框架中顯示網頁此網頁使用了框架,但您的瀏覽器不支持框架2.2.1 JSP語法語法1JSP數據定義數據定義在JSP中可以用定義一個或多個變量。在其中定義的變量為該頁面級別的共享變量,可以被訪問此頁面的所有用戶訪問。其語法格式如

20、下:如下面的代碼片段:此外,這種聲明方式還可以定義一個方法或類,定義方法的格式如下:定義一個類,如下面的代碼片段:2JSP程序塊程序塊來看下面這段JSP代碼,命名為circle.jsp:(頁面有中文用UTM-8) 3JSP表達式表達式從上面的例子中可以發(fā)現(xiàn),要輸出面積s的值,先計算s的值,然后輸出結果。JSP中提供了一種表達式,可以很方便地輸出運算結果,其格式如下:于是,circle.jsp文件的代碼可以修改如下:4JSP指令指令JSP指令主要用來提供整個JSP頁面的相關信息和設定JSP頁面的相關屬性,如設定網頁的編碼方式、腳本語言及導入需要用到的包等。其語法格式如下:常用的有3條指令:pag

21、e、include和taglib。(1)page指令指令page指令主要用來設定整個JSP文件的屬性和相關功能,如:一般用到的page指令還有導入需要的包,用法如下:(2)include指令指令include指令用來解決這個問題,其用來導入包含靜態(tài)的文件,如JSP網頁文件、HTML網頁文件,但不能包含用表示的代表表達式的文件。其語法格式如下:如有head.jsp文件,其內容如下:現(xiàn)在在另一個文件中調用它:輸出頁面這句話是我想輸出的(3)taglib指令指令taglib指令語法格式如下:其中uri=tagLibraryURI指明標簽庫文件的存放位置。而prefix=tagPrefix則表示該標簽

22、使用時的前綴。例如,在Struts 2中用到標簽:5JSP動作動作(1)的語法規(guī)則如下:例如:通常與、或等一起使用。(2)的語法規(guī)則如下: jsp:include page= relativeurl | flush=true /或者為:jsp:include page= relativeurl | flush=true jsp:param name=paramName value= paramValue | /可以向一個對象提出請求,并可以將結果包含在一個JSP文件中。(3)的語法規(guī)則如下: 語法參數說明如下。 id:設置JavaBean的名稱,利用此id,可以識別在同一個JSP程序中使用不同

23、的JavaBean組件實例。 class:指定JavaBean對應的Java類名查找該JavaBean的路徑。 scope:指定JavaBean對象的作用域。scope的值可能是page、request、session和application。 typeSpec:可能是如下的4種形式之一。class=className /僅指明應用的類名class=className type=typeName /指明應用的類名及類型beanName=beanName type=typeName /指明應用的其他Bean的名稱及類型type=typeName /僅指明類型【例2.6】useBean動作元素的應

24、用。在項目Practice的WebRoot文件夾下創(chuàng)建JSP文件,命名為bean.jsp,其代碼如下:useBean動作元素的應用(包下面的類)在src文件夾下創(chuàng)建包test,在包test下創(chuàng)建TestBean.java,其代碼如下:package test;public class TestBeanprivate String str=null;public TestBean() public void setString(String value)str=value;public String getStringValue()return str;(4)的語法規(guī)則如下:語法參數說明如下。

25、name:指定目標Bean對象。 property:指定要設置Bean的屬性名。 value:指定Bean屬性的值。 param:指定從request對象的某一參數取值以設置Bean的同名屬性,即要將其值賦給一個Bean屬性的HTTP請求的參數名稱。(5)的語法規(guī)則如下:其中屬性name是JavaBean實例的名稱,property是要顯示的屬性的名稱。根據語法規(guī)則,如下代碼是合法的。Get of string :可以獲取Bean的屬性值。(6)的語法規(guī)則如下:jsp:forward page= relativeurl | /或者為:jsp:forward page= relativeurl

26、| jsp:param name=paramName value= paramValue | /標記只有一個屬性page。page屬性指定要轉發(fā)資源的相對URL。page的值既可以直接給出,也可以在請求時動態(tài)計算。例如:jsp:forward page= /(7)的語法規(guī)則如下: jsp:params name=paramName value= parameterValue | /+ text message for user 語法參數說明如下。 type:指定被執(zhí)行的Java程序的類型是JavaBean還是Java Applet。 code:指定會被JVM執(zhí)行的Java Class的名字,必

27、須以.class結尾命名。 codebase:指定會被執(zhí)行的Java Class文件所在的目錄或路徑,默認值為調用指令的JSP文件的目錄。 name:確定這個JavaBean或者Java Applet程序的名字,它可以在JSP程序的其他地方被調用。 archive:表示包含對象Java類的.jar文件。 align:對圖形、對象、Applet等進行定位,可以選擇的值為bottom、top、middle、left和right五種。 height:JavaBean或者Java Applet將要顯示出來的高度、寬度的值,此值為數字,單位為像素。 hspace和vspace:JavaBean或者Jav

28、a Applet顯示時在瀏覽器顯示區(qū)左、右、上、下所需留下的空間,單位為像素。 jreversion:JavaBean或者Java Applet被正確運行所需要的Java運行時環(huán)境的版本,默認值是1.2。 nspluginurl:可以為Netscape Navigator用戶下載JRE插件的地址。 iepluginurl:IE用戶下載JRE的地址。 和:使用操作指令,可以向JavaBean或者Java Applet傳送參數和參數值。 和:該指令中間的一段文字用于Java插件不能啟動時顯示給用戶;如果插件能夠正確啟動,而JavaBean或者Java Applet的程序代碼不能找到并被執(zhí)行,那么瀏

29、覽器將會顯示這個出錯信息。6JSP注釋注釋(1)輸出注釋)輸出注釋輸出注釋的語法規(guī)則如下:!- 注釋內容-這種注釋和HTML文件中的注釋很相似,唯一不同的是,前者可以在這個注釋中用表達式,以便動態(tài)生成不同內容的注釋。這些注釋的內容在客戶端是可見的,也就是可以在HTML文件的源代碼中看到。如下面一段注釋:!- 現(xiàn)在時間是: -把上面代碼放在一個JSP文件的body體中運行后,可以在其源代碼中看到:(2)隱藏注釋)隱藏注釋隱藏注釋的語法規(guī)則如下:隱藏注釋與輸出注釋不同的是,這個注釋雖然寫在JSP程序中,但是不會發(fā)送給用戶。1page對象對象page對象代表JSP頁面本身,是this引用的一個代名詞

30、。對JSP頁面創(chuàng)建者通常不可訪問,所以一般很少用到該對象。2config對象對象config對象是ServletConfig類的一個對象,存放著一些Servlet初始化信息,且只有在JSP頁面范圍內才有效。其常用方法如下。 getInitParameter(name):取得指定名字的Servlet初始化參數值。 getInitParameterNames():取得Servlet初始化參數列表,返回一個枚舉實例。 getServletContext():取得Servlet上下文(ServletContext)。 getServletName():取得生成的Servlet的名字。3out對象對象J

31、SP頁面的主要目的是動態(tài)產生客戶端需要的HTML結果,前面已經用過out.print()和out.println()來輸出結果。此外,out對象還提供了一些其他方法來控制管理輸出緩沖區(qū)和輸出流。例如,要獲得當前緩存區(qū)大小,可以用下面的語句:out.getBufferSize();要獲得剩余緩存區(qū)大小應為:out.getRemaining();4response對象對象以下是response對象的主要方法。 addHeader(String name,String value):添加HTTP頭文件,該頭文件將會傳到客戶端去,如果有同名的頭文件存在,那么原來的頭文件會被覆蓋。 setHeader(

32、String name,String value):設定指定名字的HTTP文件頭的值,如果該值存在,那么它將會被新的值覆蓋。 containsHeader(String name):判斷指定名字的HTTP文件頭是否存在,并返回布爾值。 flushBuffer():強制將當前緩沖區(qū)的內容發(fā)送到客戶端。 addCookie(Cookie cookie):添加一個Cookie對象,用來保存客戶端的用戶信息,可以用request對象的getCookies()方法獲得這個Cookie。 sendError(int sc):向客戶端發(fā)送錯誤信息。例如,“505”指示服務器內部錯誤,“404”指示網頁找不到

33、的錯誤。 setRedirect(url ):把響應發(fā)送到另一個指定的頁面(URL)進行處理。5request對象對象request對象包括很多方法,下面介紹其主要的方法。 getParameter(String name):以字符串的形式返回客戶端傳來的某一個請求參數的值,該參數由name指定。 getParameterValue(String name):以字符串數組的形式返回指定參數所有值。 getParameterNames():返回客戶端傳送給服務器端所有的參數名,結果集是一個Enumeration(枚舉)類的實例。 getAttribute(String name):返回name指

34、定的屬性值,若不存在指定的屬性,則返回null。 setAttribute(String name,java.lang.Object obj):設置名字為name的request參數的值為obj。 getCookies():返回客戶端的Cookie對象,結果是一個Cookie數組。 getHeader(String name):獲得HTTP協(xié)議定義的傳送文件頭信息,例如,request.getHeader (User-Agent)含義為返回客戶端瀏覽器的版本號、類型。 getDateHeader():返回一個Long類型的數據,表示客戶端發(fā)送到服務器的頭信息中的時間信息。 getHeaderN

35、ame():返回所有request Header的名字,結果集是一個Enumeration(枚舉)類的實例。 getServerPort():獲得服務器的端口號。 getServerName():獲得服務器的名稱。 getRemoteAddr():獲得客戶端的IP地址。 getRemoteHost():獲得客戶端的主機名,如果該方法失敗,則返回客戶端的IP地址。 getProtocol():獲得客戶端向服務器端傳送數據所依據的協(xié)議名稱。 getMethod():獲得客戶端向服務器端傳送數據的方法。 getServletPath():獲得客戶端所請求的腳本文件的文件路徑。 getCharacte

36、rEncoding ():獲得請求中的字符編碼方式。 getSession(Boolean create):返回和當前客戶端請求相關聯(lián)的HttpSession對象。 getQuertString():返回查詢字符串,該字符串由客戶端以get方法向服務器端傳送。 getRequestURI():獲得發(fā)出請求字符串的客戶端地址。 getContentType():獲取客戶端請求的MIME類型。6session對象對象session對象的主要方法如下。 getAttribute(String name):獲得指定名字的屬性,如果該屬性不存在,將會返回null。 getAttributeNames()

37、:返回session對象存儲的每一個屬性對象,結果集是一個Enumeration類的實例。 getCreationTime():返回session對象被創(chuàng)建的時間,單位為毫秒。 getId():返回session對象在服務器端的編號。 getLastAccessedTime():返回當前session對象最后一次被操作的時間,單位為毫秒。 getMaxInactiveInterval ():獲取sessionn對象的生存時間,單位為秒。 setMaxInactiveInterval (int interval):設置session對象的有效時間(超時時間),單位為秒。 removeAttrib

38、ute(String name):刪除指定屬性的屬性名和屬性值。 setAttribute(String name,Java.lang.Object value):設定指定名字的屬性,并且把它存儲在session對象中。 invalidate():注銷當前的session對象。7application對象對象application對象的主要方法如下。 getAttribute(String name):返回由name指定名字的application對象的屬性值。 getAttributeNames():返回所有application對象屬性的名字,結果集是一個Enumeration類型的實例。

39、 getInitParameter(String name):返回由name指定名字的application對象的某個屬性的初始值,如果沒有參數,就返回null。 getServerInfo():返回Servlet編譯器當前版本信息。 setAttribute(String name, Object obj):將參數Object指定的對象obj添加到application對象中,并為添加的對象指定一個屬性。 removeAttribute(String name):刪除一個指定的屬性?!纠?.7】request對象、session對象與application對象區(qū)別與聯(lián)系。首先,建立一個JSP

40、頁面first.jsp,用于這三個對象保存數據。 然后,再建立另一個JSP頁面second.jsp,用于獲取這三個對象保存的值。 % out.println(request:+(String)request.getAttribute(request)+); out.println(session:+(String)session.getAttribute(session)+); out.print(application:+(String)application.getAttribute(application)+); %部署運行,打開IE,輸入“http:/localhost:9080/Pr

41、actice/first.jsp”,會發(fā)現(xiàn)這三個對象保存的內容都能取出,如圖2.9所示。由于在first.jsp中運用了,頁面跳轉到second.jsp,但是在瀏覽器中的地址也就是請求并沒有改變,屬于同一請求。這時這三個對象保存的內容都可以取到,也就是說在同一請求范圍內,該三個對象都有效,在該IE瀏覽器中輸入“http:/localhost:9080/Practice/ second.jsp”,結果如圖2.10所示。在不同請求中,request對象就失效了,但是由于用的是同一個IE,也就是同一會話,session對象和application對象仍然有效。如果再重新打開一個IE,然后直接輸入“h

42、ttp:/localhost:9080/Practice/second.jsp”,結果如圖2.11所示。8pageContext對象對象pageContext對象的主要方法如下。 getAttribute():返回與指定范圍內名稱有關的變量或null。 forward(String relativeurl Path):把頁面重定向到另一個頁面或Servlet組件上。 findAttribute():按照頁面請求、會話及應用程序范圍的順序實現(xiàn)對某個已經命名屬性的搜索。 getException():返回當前的exception對象。 setAttribute():設置默認頁面的范圍或指定范圍中的

43、已命名對象。 removeAttribute():刪除默認頁面范圍或指定范圍中已命名的對象。9exception對象對象exception對象的主要方法如下。 getMessage():返回錯誤信息。 printStackTrace():以標準錯誤的形式輸出一個錯誤和錯誤堆棧。 toString():以字符串的形式返回一個對異常的描述。1JavaBean形式和要素形式和要素 如果類的成員變量的名字是XXX,那么為了更改或獲取成員變量的值,即更改或獲取屬性,在類中可以使用兩種方法。 getXXX():用來獲取屬性XXX。 setXXX():用來修改屬性XXX。 對于boolean類型的成員變量,

44、即布爾邏輯類型的屬性,允許使用is代替上面的get和set。 類中方法的訪問屬性都必須是public的。 類中如果有構造方法,那么這個構造方法也是public的并且無參數。下面通過一個簡單的實例來說明JavaBean的形式與要素。【例2.8】一個典型的JavaBean類。2JavaBean屬性屬性(1)Simple屬性屬性一個Simple屬性表示一個伴隨有一對get/set方法的變量。屬性名與該屬性相關的get/set方法名對應。例如,如果有setX()和getX()方法,則暗指有一個名為“X”的屬性。如果有一個方法名為isX,則通常暗指“X”是一個布爾屬性(即X的值為true或false)。

45、(2)Indexed屬性屬性Indexed屬性表示一個數組值,使用與該屬性對應的set/get方法可以取得數組中的數值。該屬性也可一次設置或取得整個數組的值。對于Indexed屬性,必須提供兩對相匹配的getXXX()與setXXX()方法,一對用來設置整個數組,另一對用來獲得或設定數組中的某個元素。使用Indexed屬性除了表示數組之外,還可以表示集合類。(3)Bound屬性屬性Bound屬性是指當該屬性的值發(fā)生變化時,要通知其他的對象。每次屬性值改變時,這種屬性就觸發(fā)一個PropertyChange事件(在Java程序中,事件也是一個對象)。事件中封裝了屬性名、屬性的原值、屬性變化后的新值

46、。這種事件傳遞到其他的Bean,至于接收事件的Bean應該做什么動作由自己定義。(4)Constrained屬性屬性Constrained屬性是指當這個屬性的值要發(fā)生變化時,與這個屬性已建立了某種連接的其他Java對象可否決屬性值的改變。監(jiān)聽器實現(xiàn)了VectorChangeListener接口,并接受由JavaBean組件產生的PropertyChangeEvent對象,JavaBean組件可以使用VetoableChangeSupport輔助程序類激發(fā)由監(jiān)聽器接受的實際事件。使用JavaBean組件實例的引用來構造VetoableChangeSupport對象,JavaBean實現(xiàn)了用add

47、VetoableChangeListener()方法和removeVetoableChangeListener()方法來加入或刪除監(jiān)聽器。VetoableChangeSupport.fireVetoableChange()方法可以用來傳遞屬性的名字、舊屬性值和新屬性值等信息。3JavaBean方法和事件方法和事件(1)JavaBean的方法的方法JavaBean處理數據的方法提供了改變Bean狀態(tài)并由此采取行動的方式。如同普通的Java類一樣,Bean能夠擁有不同訪問類型的方法。例如,私有方法只有在Bean內部才可以訪問,而保護方法在Bean的內部和由它派生的Bean中都可以訪問。最具訪問能力

48、的方法是公共方法,它在Bean的內部從派生的Bean或者從諸如應用程序和其他組件等外界部分都可以訪問。(2)JavaBean的事件的事件JavaBean通過事件進行信息的傳遞,事件從源聽眾注冊或發(fā)表,并通過方法調用傳遞到一個或幾個目標聽眾。事件有許多不同的用途,如在Windows系統(tǒng)中常要處理的鼠標事件、窗口邊界改變事件、鍵盤事件等。在JavaBean中定義了一個一般的、可擴充的事件機制,這種機制能夠實現(xiàn)以下功能。 對事件類型和傳遞模型的定義和擴充提供一個公共框架,并適于廣泛的應用;能完成JavaBean事件模型與相關的其他組件體系結構事件模型的中立映射。 事件能被掃描環(huán)境捕獲和激活;能夠發(fā)現(xiàn)

49、指定的對象類可以觀察監(jiān)聽到的事件。 能使其他構造工具采用某種技術在設計時直接控制事件,以及事件源和事件監(jiān)聽者之間的聯(lián)系;提供一個常規(guī)的注冊機制,允許動態(tài)操縱事件源與事件監(jiān)聽之間的關系;事件源與監(jiān)聽者之間可以進行高效的事件傳遞。 與Java語言和環(huán)境有較高的集成度;事件機制本身不依賴于復雜的開發(fā)工具;不需要其他的虛擬機和語言即可實現(xiàn)。JavaBean事件是用對象進行傳遞的,用戶應弄清楚以下事件的內容。 事件狀態(tài)對象。 事件監(jiān)聽者接口。 事件監(jiān)聽者的注冊與注銷。4JavaBean作用域作用域(1)page作用域作用域當scope為page時,它的作用域在四種類型中范圍最小,客戶端每次請求訪問時都會

50、創(chuàng)建一個JavaBean對象。JavaBean對象的有效范圍是客戶端請求訪問的當前頁面文件,當客戶端執(zhí)行完當前的頁面文件后,JavaBean對象結束生命。在page范圍內,每次訪問頁面文件時都會生成新的JavaBean對象,原有的JavaBean對象已經結束了生命周期。(2)request作用域作用域當scope為request時,JavaBean對象被創(chuàng)建后,它將存在于整個request的生命周期內,request對象是一個內建對象,使用它的getParameter方法可以獲取表單中的數據信息。request范圍的JavaBean與request對象有著很大的關系,它的存取范圍除了page外

51、,還包括使用動作元素和包含的網頁,所有通過這兩個操作指令連接在一起的JSP程序都可以共享同一個JavaBean對象。(3)session作用域作用域當scope為session時,JavaBean對象被創(chuàng)建后,它將存在于整個session的生命周期內,session對象是一個內建對象,當用戶使用瀏覽器訪問某個網頁時,就創(chuàng)建了一個代表該鏈接的session對象,同一個session中的文件共享這個JavaBean對象??蛻舳藢膕ession生命周期結束時,JavaBean對象的生命也結束了。在同一個瀏覽器內,JavaBean對象就存在于一個session中。當重新打開新的瀏覽器時,就會開始一

52、個新的session,每個session中擁有各自的JavaBean對象。(4)application作用域作用域當scope為application時,JavaBean對象被創(chuàng)建后,它將存在于整個主機或虛擬主機的生命周期內,application范圍是JavaBean的生命周期中最長的。同一個主機或虛擬主機中的所有文件共享這個JavaBean對象。如果服務器不重新啟動,scope為application的JavaBean對象會一直存放在內存中,隨時處理客戶端的請求,直到服務器關閉,它在內存中占用的資源才會被釋放。在此期間,服務器并不會創(chuàng)建新的JavaBean組件,而是創(chuàng)建源對象的一個同步復制

53、,任何復制對象發(fā)生改變都會使源對象隨之改變,不過這個改變不會影響其他已經存在的復制對象。1Model1開發(fā)模式開發(fā)模式遵循Model1模式開發(fā)出的Java EE項目,其系統(tǒng)結構如圖2.12所示?;贛odel1架構的Java EE程序,其工作流程都是按如下4步進行的。 瀏覽器發(fā)出請求,該請求由JSP頁面接收。 JavaBean用于實現(xiàn)業(yè)務邏輯,JSP根據請求的需要與不同的JavaBean進行交互。 JavaBean執(zhí)行業(yè)務處理,通過JDBC操作數據庫。 JSP將程序運行的結果信息生成動態(tài)Web網頁發(fā)回瀏覽器。2舉例舉例【實例二】采用JSP+JavaBean+JDBC方式開發(fā)一個Web登錄程序。

54、要求:在【實例一】(1.3.2節(jié))基礎上修改而成,建立userTable表對應的JavaBean,實現(xiàn)對數據庫的面向對象操作。(1)創(chuàng)建)創(chuàng)建Java EE項目項目新建Java EE項目,項目命名為jsp_javabean_jdbc,具體操作方法見【實例一】。(2)構造)構造JavaBean在項目src文件夾下建立包org.easybooks.test.model.vo,其中創(chuàng)建名為UserTable的Java類,嚴格按照2.2.3節(jié)所講的一個JavaBean的通行結構、形式和要素,為數據庫userTable表構造一個JavaBean,代碼所示。(3)創(chuàng)建)創(chuàng)建JDBC在項目src文件夾下建立

55、包org.easybooks.test.jdbc,在包下創(chuàng)建SqlSrvDBConn類,其代碼同【實例一】,完成后也要往項目中添加JDBC驅動包,操作方法一樣。(4)編寫)編寫JSP同【實例一】一樣,本例也要編寫login.jsp(登錄頁)、validate.jsp(驗證頁)、main.jsp(主頁)和error.jsp(出錯頁)這4個JSP文件,其中l(wèi)ogin.jsp和error.jsp的代碼與【實例一】的完全相同,另外兩個文件的源碼修改如下。validate.jsp代碼。main.jsp代碼:留言板信息,您好!歡迎登錄留言板。(5)運行程序)運行程序部署項目、啟動Tomcat 8.x,打開

56、IE輸入“http:/localhost:9080/jsp_javabean_jdbc/”并運行程序。在不輸入用戶名密碼的情況下,直接單擊【登錄】按鈕,會發(fā)現(xiàn)頁面又一次成功轉到歡迎主頁了,如圖2.13所示。2.3.1 Servlet的概念的概念Servlet是位于Web 服務器內部的服務器端的Java應用程序,它擔當客戶(Web瀏覽器)請求與服務器(Web服務器上的應用程序)響應的中間層,基于這種“請求/響應”模型,Servlet模塊的運行模式如圖2.14所示。Servlet模塊是用Servlet API編寫的,Servlet API包含兩個包:javax.servlet和javax.serv

57、let.http。圖2.15清晰地描繪了這兩個包中主要類、接口之間的關系。1實現(xiàn)實現(xiàn)Servlet接口接口這種情況Servlet不是獨立的應用程序,沒有main()方法,而是生存在容器中,由容器來管理。編程時需要實現(xiàn)javax.servlet.Servlet接口(見圖2.15中的)的5個方法。2繼承繼承GenericServlet類類由javax.servlet包提供一個抽象類GenericServlet(見圖2.15中的)。它給出了Servlet接口中除service()方法外的其他4個方法的簡單實現(xiàn),并且還實現(xiàn)了ServletConfig接口,編程時直接繼承這個類,代碼會簡化很多。3繼承繼

58、承HttpServlet、覆蓋、覆蓋doXXX()方法方法在大部分網絡中,都是客戶端通過HTTP協(xié)議來訪問服務器端的資源。為了快速開發(fā)應用于HTTP協(xié)議的Servlet類,在javax.servlet.http包中提供了一個抽象類HttpServlet(見圖2.15中的),它繼承了GenericServlet類。編寫一個Servlet類繼承HttpServlet,只需要覆蓋相應的doXXX()方法即可。4繼承繼承HttpServlet、重寫、重寫service()方法方法其本質就是擴展HttpServlet類,用戶只需重寫service()方法,Servlet模塊執(zhí)行service()方法時,

59、會自動調用doPost()和doGet()這兩個方法,實現(xiàn)Servlet的邏輯處理功能?!纠?.9】用繼承HttpServlet、覆蓋doGet()和doPost()方法的方式編寫一個Servlet程序,實現(xiàn)在頁面上輸出“Hello World!”的功能。(1)創(chuàng)建包)創(chuàng)建包在項目Practice的src目錄下創(chuàng)建名為servlet的包。(2)編寫自己的)編寫自己的Servlet類類在servlet包下創(chuàng)建一個Servlet類(類名_2_3hello),編寫代碼如下:package servlet;import java.io.*;import javax.servlet.*;import j

60、avax.servlet.http.*;public class _2_3hello extends HttpServletprotected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException PrintWriter out=response.getWriter();out.println();out.println(Hello World!);out.println();protected void doPost(HttpServletReq

溫馨提示

  • 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

提交評論