使用Java Bean組件
特點(diǎn):是可以在任何地方重用包括了可以在應用程序中、其它組件、文檔、web站點(diǎn)和應用程序構造器工具的多種方案中再利用。
JavaBean的概念
JavaBean是一種獨立于平臺和結構的應用程序接口,它本身可以忽略?xún)炔康慕Y構及細節問(wèn)題,只需定義其外部的特征及對外功能就行。
它有三種接口面可以獨立對外進(jìn)行開(kāi)發(fā),就是:屬性、方法和事件
JavaBean的屬性
JSP組件的屬性有兩種:?jiǎn)沃祵傩?、索引屬?div style="height:15px;">
單值屬性:
相當于平時(shí)編程中定義的一個(gè)成員變量,它只能有一個(gè)數據值,這個(gè)數據值的類(lèi)型可以是Java中的任意數據類(lèi)型,包括類(lèi)和接口。
如:
int counter;
float tax;
String name;
Date datetime;
注:一種特殊的單值屬性(布爾屬性),它只有兩種允許的值:true、false
索引屬性:
相當于平時(shí)說(shuō)的數組,當存放一批同類(lèi)型的數據時(shí),需要用到索引屬性。
如:int ID[];
String name[];
Float score[];
JavaBean的方法
方法包括構造方法和訪(fǎng)問(wèn)方法。
構造方法:
類(lèi)似于類(lèi)中的構造器(即對它及它的成員變量進(jìn)行初始化),它的方法名要和此JavaBean的類(lèi)相同。如:
package student;
public class student{
int counter;ind ID[];
String name[];
float score[];
boolean whiszkid;
public student(){
ID=new int[50];
name=new String[50];
score=new float[50];
counter=0;
}
}
訪(fǎng)問(wèn)方法:
就是對組件中定義的屬性的訪(fǎng)問(wèn),包括讀和寫(xiě)(一般情況與在Java中定義和使用的方法差不多),注意它的取名規則:
讀取一個(gè)屬性:getXXX()
改寫(xiě)一個(gè)屬性:setXXX()
訪(fǎng)問(wèn)單值屬性:如對上面的counter單值屬性,它的兩個(gè)訪(fǎng)問(wèn)方法可以為:
讀取屬性值:
public int getCounter{
return counter;
}
改寫(xiě)屬性值:
public void setCounter(int counter){
this.counter=counter;
}
訪(fǎng)問(wèn)布爾型的單值屬性:對讀取屬性值采用isXXX()方法
如對上面的布爾型的屬性whizkid的訪(fǎng)問(wèn)可以為:
public boolean isWhizkid(){
return whizkid;
}
訪(fǎng)問(wèn)索引屬性:有時(shí)要定義好幾個(gè)訪(fǎng)問(wèn)方法,但它們的取名規則還是一樣的,如對上面的姓名屬性,它的讀取和改寫(xiě)方法需這樣定義:
讀取索引屬性中的一個(gè)屬性值:
public String getName(int index){
return name[index];
}
讀取索引屬性中的所有屬性值:
public String[] getName(){
return name;
}
改寫(xiě)索引屬性中的一個(gè)屬性值:
public void setName(int index,String str){
name[index]=str;
}
改寫(xiě)索引屬性中的所有屬性值:
public void setName(String[] str){
name=str;
}
在JSP中創(chuàng )建用JavaBean編寫(xiě)的一個(gè)bean,實(shí)際上就是創(chuàng )建此類(lèi)的一個(gè)對象。
客戶(hù)端做的工作
客戶(hù)端的工作可分兩部分:
一、向服務(wù)器端發(fā)出請求即向服務(wù)器端發(fā)出提交
二、在客戶(hù)端進(jìn)行校驗、以及頁(yè)面的修飾等功能
客戶(hù)端提交的方法
客戶(hù)端的提交方法分兩種:get與post提交
get可傳遞的信息只有2kb左右,而且是明碼傳送信息,所有的信息均可在地址欄中看見(jiàn)。
post可傳遞大量信息,加密傳送,所有的信息均可在地址欄中是不可見(jiàn)的。
post提交
所有的post提交只能在form中產(chǎn)生,提交方式又分兩種:直接提交(submit提交)、間接提交(腳本提交)
1)直接提交:點(diǎn)擊提交按鈕,立即發(fā)生提交
<form method=post action=*.asp>
<input type=submit value="注冊">
注:submit按鈕有一個(gè)默認事件,就是提交
<input type=submit value="注冊" onclick="alert(‘hello‘);return ture or false;">
注:在提交前,首先在屏幕上返回一個(gè)警告框"hello",若return的是true,則頁(yè)面發(fā)生提交;若return的是false,頁(yè)面不會(huì )發(fā)生提交。</form>
2)間接提交:是指點(diǎn)擊按鈕本身并不能完成提交,而只有通過(guò)腳本才能完成的提交,稱(chēng)為間接提交。
<input type=button value="注冊" onclick="check();submit();">
注:
在onclick處還可為onmousedown、onmouseup等事件名稱(chēng)
button只是普通按鈕,本身并不能發(fā)生提交,只能通過(guò)onclick指定的腳本程序才能完成提交
點(diǎn)擊"注冊"后,先執行onclick事件觸發(fā)的函數,若返回值為true則發(fā)生提交,否則提交中止。
get提交
get提交發(fā)生在form表單和url中
1)在form中產(chǎn)生的
<form method=get action=*.asp>
2)在所有的url中產(chǎn)生的
在地址欄中輸入url地址,后跟所要傳遞的參數http://*.asp?name=www&age=20
在超鏈接上<a href="*.asp>mode=1&grade=1">click me </a>
在圖片的src屬性中<img src="*.asp?name=www">
在幀里的src屬性中<frame src=" *.asp?name=www" name=框架名>
在asp重定向語(yǔ)句中response.redirect " *.asp?name=www"
在客戶(hù)端對象document中:document.location=" http:// *.asp?name=www"
在客戶(hù)端對象window中:window.open(" http:// *.asp?name=www")
服務(wù)器端做的工作
獲得客戶(hù)端信息的方法是通過(guò)request對象來(lái)完成的。
客戶(hù)端提交到服務(wù)器端的信息分為三類(lèi):
第一類(lèi):客戶(hù)機信息(包括客戶(hù)端的ip地址、端口號、主機名、提交方式等等)
第二類(lèi):通過(guò)form或url方式提交到服務(wù)器端的信息
第三類(lèi):cookie信息
獲得第一類(lèi)信息用:
request.getHeader("User-agent")返回客戶(hù)端瀏覽器的版本號、類(lèi)型
getHeader(String name):獲得http協(xié)議定義的傳送文件頭信息
request. getMethod():獲得客戶(hù)端向服務(wù)器端傳送數據的方法有GET、POST、PUT等類(lèi)型
request. getRequestURI():獲得發(fā)出請求字符串的客戶(hù)端地址
request. getServletPath():獲得客戶(hù)端所請求的腳本文件的文件路徑
request. getServerName():獲得服務(wù)器的名字
request.getServerPort():獲得服務(wù)器的端口號
request.getRemoteAddr():獲得客戶(hù)端的IP地址
request.getRemoteHost():獲得客戶(hù)端電腦的名字,若失敗,則返回客戶(hù)端電腦的IP地址
request.getProtocol():
request.getHeaderNames():返回所有request header的名字,結果集是一個(gè)Enumeration(枚舉)類(lèi)的實(shí)例
request.getHeaders(String name):返回指定名字的request header的所有值,結果集是一個(gè)Enumeration(枚舉)類(lèi)的實(shí)例
獲得第二類(lèi) get 信息用:
request. getQueryString("變量名呀或控件名")獲得查詢(xún)字符串,該串由客戶(hù)端以GET方法向服務(wù)器端傳送
獲得第二類(lèi) post 信息用:
request.getParameter(String name):獲得客戶(hù)端傳送給服務(wù)器端的參數值,該參數由name指定
request.getParameterNames():獲得客戶(hù)端傳送給服務(wù)器端的所有的參數名,結果集是一個(gè)Enumeration(枚舉)類(lèi)的實(shí)例
request.getParameterValues(String name):獲得指定參數所有值
獲得第三類(lèi)Cookie信息用:
request.getCookies( "cookie變量名"):返回客戶(hù)端的cookie對象,結果是一個(gè)cookie數組