版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
一◆◆◆◆http協(xié)議◆HTTP協(xié)議用于在Internet上發(fā)送和接收消息。是一種請求-應(yīng)答式的協(xié)議—客戶端發(fā)送一個(gè)請求,服務(wù)器返回該求的應(yīng)答,所有的請求與應(yīng)答都是HTTP包。HTTP協(xié)議使用可靠的TCP連接,默認(rèn)端口是80。是一種無狀態(tài)協(xié)議,在HTTP中,Client/Server之間的會(huì)話總是由客戶端通過建立連接和發(fā)送HTTP請求包初始化,服務(wù)器不會(huì)主動(dòng)聯(lián)系客戶端或要求與客戶端建立連接.瀏覽器和服務(wù)器都可以隨時(shí)中斷連接,例如,在瀏覽網(wǎng)頁時(shí)你可以隨時(shí)點(diǎn)擊“停止”按鈕中斷當(dāng)前的文件下載過程,關(guān)閉與Web服務(wù)器的HTTP連接.不維持狀態(tài),一次請求和響應(yīng)構(gòu)成一個(gè)獨(dú)立的事務(wù),不同事務(wù)之間沒有狀態(tài)聯(lián)系?!粽埱蟀喝糠謩e是:方法-URI-協(xié)議/版本,請求頭,請求正文(GET/index.jspHTTP/1.1)(Accept-Language:zh-cn;Connection:Keep-Alive;Host:06;Content-Length:37)(userName=new_andy&password=new_andy)◆HTTP應(yīng)答包:三部分,分別是:協(xié)議-狀態(tài)代碼-描述,應(yīng)答頭,應(yīng)答正文(HTTP/1.1200OK)(Server:Microsoft-IIS/4.0;Date:Mon,3Jan200513:13:33GMT;Content-Type:text/html;Last-Modified:Mon,1Jan200413:23:42GMT;Content-Length:90)(<html><head><title>解讀HTTP包示例</title></head><body>HelloWORLD!</body></html>)◆HTTP最基本的請求類型GET和POST:HTTP1.1支持七種請求方法:GET,POST,HEAD,OPTIONS,PUT,DELETE和TRACE等.GET請求最為常見,它后面跟隨一個(gè)網(wǎng)頁的位置,服務(wù)器接受請求并返回其請求的頁面。除了頁面位置作參數(shù)之外,請求還可以跟隨協(xié)議的版本如HTTP/1.0等作為參數(shù),以發(fā)送給服務(wù)器更多的信息.POST請求要求服務(wù)器接收大量的信息,除了POST后面跟隨的參數(shù)之外,瀏覽器還會(huì)在后面持續(xù)發(fā)送數(shù)據(jù),讓服務(wù)器進(jìn)行處理。通常,POST方法是和CGI程序分不開的,服務(wù)器應(yīng)該啟動(dòng)一個(gè)CGI程序來處理POST發(fā)送來的數(shù)據(jù).◆URI與URL:URI--UniversalResourceIdentifier通用資源標(biāo)志符(1訪問資源的命名機(jī)制2存放資源的主機(jī)名3資源自身的名稱,由路徑表示),Web上可用的每種資源,如HTML文檔,圖像,視頻片段,程序等,由URI進(jìn)行定位。URL--UniformResourceLocation統(tǒng)一資源定位符,Internet上用來描述信息資源的字符串,主要用在各種WWW客戶程序和服務(wù)器程序上,采用URL可以用一種統(tǒng)一的格式來描述各種信息資源,包括文件,服務(wù)器的地址和目錄等。◆url的語法:三部分:1.訪問資源的命名機(jī)制。2.存放資源的主機(jī)名。3.資源自身的名稱,由路徑表示。由三部分組成:一是協(xié)議;二是存有該資源的主機(jī)IP地址(有時(shí)也包括端口號(hào));三是主機(jī)資源的具體地址,目錄和文件名等。第一部分和第二部分之間用“://”符號(hào)隔開,第二部分和第三部分用“/”符號(hào)隔開。第一部分和第二部分是不可缺少的,第三部分有時(shí)可以省略。語法如下:http_URL=http://host[“:”port][path]例如:http//:/◆狀態(tài)代碼:400BadRequest請求出現(xiàn)語法錯(cuò)誤401Unauthorized客戶試圖未經(jīng)授權(quán)訪問受密碼保護(hù)的頁面403Forbidden資源不可用。服務(wù)器理解客戶的請求,但拒絕處理它。通常由于服務(wù)器上文件或目錄的權(quán)限設(shè)置導(dǎo)致404NotFound無法找到指定位置的資源。這也是一個(gè)常用的應(yīng)答500InternalServerError服務(wù)器遇到了意料不到的情況,不能完成客戶的請求501NotImplemented服務(wù)器不支持實(shí)現(xiàn)請求所需要的功能。例如,客戶發(fā)出了一個(gè)服務(wù)器不支持的PUT請求;◆◆web應(yīng)用程序:◆Web應(yīng)用程序是servlets,jsp頁面HTML頁面,類,和其他資源等的集合缺省情形下,Web應(yīng)用程序的實(shí)例必須運(yùn)行在一個(gè)JVM(javavirtualmachine)中以兩種方式存在于文件系統(tǒng):一是web歸檔文件,以.war擴(kuò)展名結(jié)尾;一是web歸檔文件展開后的目錄結(jié)構(gòu)◆Web應(yīng)用程序的元素:Servlets,JSP頁面,幫助類,靜態(tài)文檔(HTML,images,sounds,etc.),客戶端的Javaapplets,beans,andclasses等,把上述元素組合起來的描述性的元信息(后綴.xml)◆web目錄結(jié)構(gòu)web應(yīng)用程序的標(biāo)準(zhǔn)規(guī)劃被定義為層次結(jié)構(gòu)的目錄和文件。該層次結(jié)構(gòu)有兩種組織形式。一種是“unpacked”方式,這種情況下每個(gè)目錄和文件分散的保存在文件系統(tǒng)中,在開發(fā)期間比較有用;另一種是“packed”方式,如WebArchive或稱WAR文件,主要用于應(yīng)用程序的發(fā)布安裝。web應(yīng)用程序?qū)哟谓Y(jié)構(gòu)的頂級(jí)目錄也即應(yīng)用程序的documentroot(根文檔),通常在該位置放置包含應(yīng)用程序用戶界面的HTML文件和JSP頁面。當(dāng)系統(tǒng)管理員將應(yīng)用程序部署到一個(gè)特定的服務(wù)器上時(shí),他將分配一個(gè)contextpath(上下文路徑)給應(yīng)用程序。因此,如果系統(tǒng)管理員給應(yīng)用程序分配的上下文路徑為/catalog,則指向/catalog/index.html的URI請求將從根文檔下獲取index.html文件。應(yīng)用程序的"根文檔"目錄放置內(nèi)容:1◆*.html,*.jsp,etc.:應(yīng)用程序中的HTML文件、JSP頁面文件及其他必須對(duì)客戶端瀏覽器可見的文件(如JavaScript,stylesheet文件,images文件)。對(duì)于大型應(yīng)用程序,你需要考慮把這些文件分別放置在不同的子目錄結(jié)構(gòu)中,但對(duì)于一個(gè)小應(yīng)用程序,通常簡單地把這些文件保存在同一個(gè)目錄下。2◆/WEB-INF是根文檔下一個(gè)特殊的目錄。/WEB-INF/web.xml:Web應(yīng)用程序的部署描述器(WebApplicationDeploymentDescriptor)。一個(gè)XML文件,描述servlets和其他組件,同時(shí)包括一些初始化參數(shù)、及需要服務(wù)器執(zhí)行的容器管理的安全限制等。/WEB-INF/classes/:這個(gè)目錄下保存所有的應(yīng)用程序需要的、沒有被打包到JAR文件中的Java類文件(及相關(guān)資源),包括servlet和non-servlet類。如果類被組織成Java的包,則必須在/WEB-INFO/classes/下以目錄層次結(jié)構(gòu)的方式保存。例如,一個(gè)名com.mycompany.mypackage.MyServlet的類,就應(yīng)該保存為/WEB-INF/classes/com/mycompany/mypackage/MyServlet.class。/WEB-INF/lib/:這個(gè)目錄下保存打包了Java類文件(及相關(guān)的資源)的JAR文件,如第三方的類庫或JDBC驅(qū)動(dòng)程序等。/WEB-INF是根文檔下一個(gè)特殊的目錄◆web部署描述符:在每一個(gè)Web應(yīng)用程序路徑的WEB-INF下存在一個(gè)web.xml配置文件,用來設(shè)定Web應(yīng)用程序的配置。通常包括如下類型的配置和部署信息:1.ServletContextInitParameters2.SessionConfiguration3.Servlet/JSPDefinitions4.Servlet/JSPMappings5.MIMETypeMappings6.WelcomeFilelist7.ErrorPages8.Security9.FordetailstoseeDeploymentDescriptorDiagram1.servletElementStructure2.servlet-mappingElementStructure3.session-configElementStructure4.welcome-file-listElementStructure二◆◆◆◆J2EE應(yīng)用程序◆◆C/S模型從本質(zhì)上講是一種軟件結(jié)構(gòu),它包括三種邏輯成分:表示邏輯,業(yè)務(wù)處理邏輯,數(shù)據(jù)管理邏輯.◆C/S模型的缺陷:系統(tǒng)維護(hù)困難,系統(tǒng)的性能隨用戶數(shù)的增加而下降,系統(tǒng)的安全性差,系統(tǒng)的伸縮性差,客戶機(jī)負(fù)載過重◆B/S模型:表示邏輯,業(yè)務(wù)處理邏輯,數(shù)據(jù)處理邏輯集中,客戶端只需要安裝一個(gè)瀏覽器Browser.優(yōu):維護(hù)和升級(jí)方式簡單.成本降低,選擇更多.不限制客戶平臺(tái),客戶端統(tǒng)一采用瀏覽器即可運(yùn)行全部的模塊.劣:應(yīng)用服務(wù)器運(yùn)行數(shù)據(jù)負(fù)荷較重◆分布式多層應(yīng)用程序模型(右圖)◆J2EE組件:是一個(gè)包含一定功能的軟件單元,它有相關(guān)的類和文件一起組成,并與其他組件進(jìn)行通信,J2EE應(yīng)用程序由許多不同的組件組成(包括EJB組件,Web組件,客戶層組件)J2EE客戶端包括以下三個(gè)◆Web客戶端:由兩部分組成:1由運(yùn)行在Web層的Web組件生成的包含各種標(biāo)記語言(HTML,XML等等)的動(dòng)態(tài)Web頁面(①交互性,②自動(dòng)更新,③因時(shí)因人而變)2接收從服務(wù)器傳送來的頁面并將它顯示出來的Web瀏覽器(一般是瘦客戶端,不做數(shù)據(jù)庫查詢,執(zhí)行復(fù)雜的商業(yè)規(guī)則及連接傳統(tǒng)應(yīng)用程序這樣的操作◆applet(客戶端小型應(yīng)用程序)從Web層接收的一個(gè)Web頁面可以包含內(nèi)嵌的applet,一個(gè)applet是一個(gè)用Java編程語言編寫的小的客戶端應(yīng)用程序,它在安裝在Web瀏覽器中的Java虛擬機(jī)中運(yùn)行,為了在Web瀏覽器中成功地運(yùn)行applet,客戶端系統(tǒng)很可能需要Java插件和安全策略文件.◆Application客戶端◆Web組件:既可以是servlet也可以是JSP頁面.Servlets是一個(gè)Java類,它可以動(dòng)態(tài)地處理請求并作出響應(yīng).JSP頁面是一個(gè)基于文本的文檔,它以servlet的方式執(zhí)行,但是它可以更方便建立靜態(tài)內(nèi)容.靜態(tài)的HTML頁面,applet,服務(wù)器端的功能類并不被J2EE規(guī)范視為Web組件◆Business組件:由運(yùn)行在業(yè)務(wù)層的enterprisebeans(EJB)處理,包括:會(huì)話beans,實(shí)體beans,and消息驅(qū)動(dòng)beans.◆EIS層:企業(yè)信息系統(tǒng)層處理企業(yè)信息系統(tǒng)軟件并包含諸如企業(yè)資源計(jì)劃(ERP)、主機(jī)事務(wù)處理、數(shù)據(jù)庫系統(tǒng)和其它傳統(tǒng)系統(tǒng)這樣的底層系統(tǒng)。J2EE應(yīng)用程序組件可能需要訪問企業(yè)信息系統(tǒng),例如獲得一個(gè)數(shù)據(jù)庫連接?!鬔2EE容器:容器為J2EE應(yīng)用程序組件提供了運(yùn)行時(shí)支持,容器充當(dāng)組件與支持組件的底層特定于平臺(tái)的功能之間的接口,J2EE服務(wù)器以容器的形式為每一個(gè)組件類型提供底層服務(wù)?!羧萜鞣?wù):容器是一個(gè)組件和支持組件的底層平臺(tái)特定功能之間的接口,在一個(gè)Web組件、enterprisebean或者是一個(gè)應(yīng)用程序客戶端組件可以被執(zhí)行前,它們必須被裝配到一個(gè)J2EE應(yīng)用程序中,并且部署到它們的容器。裝配的過程包括為J2EE應(yīng)用程序中的每一個(gè)組件以及J2EE應(yīng)用程序本身指定容器的設(shè)置。容器設(shè)置定制了由J2EE服務(wù)器提供的底層支持,這將包括諸如安全性、事務(wù)管理、Java命名目錄接口(JNDI)搜尋以及遠(yuǎn)程序連接。J2EE的安全性模式可以讓你對(duì)一個(gè)Web組件或enterprisebean進(jìn)行配置以使得只有授權(quán)用戶訪問系統(tǒng)資源。J2EE的事務(wù)模式可以讓你指定方法之間的關(guān)系以組成一個(gè)單個(gè)的事務(wù),這樣在一個(gè)事務(wù)中的所有方法將被視為一個(gè)單一的整體。JNDI搜尋服務(wù)為企業(yè)中的多種命名目錄服務(wù)提供一個(gè)統(tǒng)一的接口,這使得應(yīng)用程序組件可以訪問命名目錄服務(wù)。J2EE遠(yuǎn)程連接模式管理客戶端和enterprisebean之間的底層通信。在一個(gè)enterprisebean被建立后,客戶端在調(diào)用其中的方法時(shí)就象這個(gè)enterprisebean就運(yùn)行在同一個(gè)虛擬機(jī)上一樣。J2EE體系結(jié)構(gòu)提供了可配置的服務(wù)意味著在相同的J2EE應(yīng)用程序中的應(yīng)用程序組件根據(jù)其被部署在什么在地方在實(shí)際運(yùn)行時(shí)會(huì)有所不同。容器還管理諸如一個(gè)enterprisebean和servlet的生存周期、數(shù)據(jù)庫連接資源池等不能配置服務(wù)?!羧萜黝愋停篍JB容器是執(zhí)行J2EE應(yīng)用程序的EJB組件所必需的,Applet容器用于管理Applet執(zhí)行所必需的,其中,Web瀏覽器和Java插件將一起在客戶端上運(yùn),Web容器管理J2EE應(yīng)用程序的Servlet和JSP頁面的執(zhí)行,應(yīng)用程序客戶端容器是管理應(yīng)用程序客戶端組件執(zhí)行所必需的?!鬔2EE核心技術(shù):JavaServlet,JavaServerPages,JDBC,JNDI,EnterpriseJavaBeans(EJB),Java郵件API,用于XML處理的JavaAPI,用于基于XML的RPC的JavaAPI,用于Java的帶有附件API的SOAP,Java事務(wù)處理API,Java命名和目錄接口◆開發(fā)、封裝和部署J2EE應(yīng)用程序:1開發(fā)環(huán)境搭建:(操作系統(tǒng)平臺(tái)的選擇,應(yīng)用服務(wù)器的選擇,數(shù)據(jù)庫服務(wù)器的選擇,開發(fā)工具的選擇)2創(chuàng)建組件—封裝組件—應(yīng)用程序匯編—應(yīng)用程序部署,三種角色:應(yīng)用程序組件提供者,應(yīng)用程序匯編者,部署者三◆◆◆◆Servlet技術(shù)◆JavaServlets:是基于Java技術(shù)的Web組件,用來擴(kuò)展以請求/響應(yīng)為模型的服務(wù)器的能力,提供動(dòng)態(tài)內(nèi)容。Servlet是使用JavaServlet應(yīng)用程序設(shè)計(jì)接口(API)及相關(guān)類和方法的Java程序。因?yàn)槭菍?duì)象字節(jié)碼,可動(dòng)態(tài)地從網(wǎng)絡(luò)加載。Servlet由容器或引擎來管理,通過請求/響應(yīng)模型與Web客戶進(jìn)行交互◆servlet容器:servlet由servlet容器管理,servlet容器也叫servlet引擎,是servlet的運(yùn)行環(huán)境,servlet容器是web服務(wù)器或應(yīng)用服務(wù)器的一部分管理和維護(hù)servlet的整個(gè)生命周期必須支持http協(xié)議,負(fù)責(zé)處理客戶請求、把請求傳送給適當(dāng)?shù)膕ervlet并把結(jié)果返回給客戶。雖然容器的實(shí)現(xiàn)可能各不相同,但容器與servlet之間的接口是由servletAPI定義好的,規(guī)定了servlet容器在servlet上要調(diào)用的方法及傳遞給servlet的對(duì)象類?!魧?shí)現(xiàn)servletd的三種方法:publicclassExampleimplementsServlet(extendsGenericServlet,extendsHttpServlet)◆servlet接口,定義在javax.servlet.Servlet,當(dāng)在編寫某個(gè)servlet的時(shí)必須直接或間接的實(shí)現(xiàn)這個(gè)接口.一般趨向于間接實(shí)現(xiàn):通過從javax.servlet.GenericServlet或javax.servlet.http.HttpServlet派生.,在實(shí)現(xiàn)servlet接口時(shí)必須實(shí)現(xiàn)它的五個(gè)方法1publicvoidinit(ServletConfigconfig)throwsServletException,一旦對(duì)servlet實(shí)例化后,容器就調(diào)用此方法.容器把一個(gè)ServletConfig對(duì)象傳統(tǒng)給此方法,這樣servlet的實(shí)例就可以把與容器相關(guān)的配置數(shù)據(jù)保存起來供以后使用.如果此方法沒有正常結(jié)束就會(huì)拋出一個(gè)ServletException.一旦拋出該異常,servlet就不再執(zhí)行,而隨后對(duì)它的調(diào)用會(huì)導(dǎo)致容器對(duì)它重新載入并再次運(yùn)行此方法.接口規(guī)定對(duì)任何servlet實(shí)例,此方法只能被調(diào)用一次,在任何請求傳遞給servlet之前,此方法可以在不拋出異常的情況下運(yùn)行完畢.2publicvoidservice(ServletRequestreq,ServletResponseres)throwsServletException,IOException,只有成功初始化后此方法才能被調(diào)用處理用戶請求.前一個(gè)參數(shù)提供訪問初始請求數(shù)據(jù)的方法和字段,后一個(gè)提供servlet構(gòu)造響應(yīng)的方法.3publicvoiddestroy()容器可以在任何時(shí)候終止servlet服務(wù).容器調(diào)用此方法前必須給service()線程足夠時(shí)間來結(jié)束執(zhí)行,因此接口規(guī)定當(dāng)service()正在執(zhí)行時(shí)destroy()不被執(zhí)行4publicServletConfiggetServletConfig()在servlet初始化時(shí),容器傳遞進(jìn)來一個(gè)ServletConfig對(duì)象并保存在servlet實(shí)例中,該對(duì)象允許訪問兩項(xiàng)內(nèi)容:初始化參數(shù)和ServletContext對(duì)象,前者通常由容器在文件中指定,允許在運(yùn)行時(shí)向sevrlet傳遞有關(guān)調(diào)度信息,后者為servlet提供有關(guān)容器的信息.此方法可以讓servlet在任何時(shí)候獲得該對(duì)象及配置信息.5publicStringgetServletInfo()此方法返回一個(gè)String對(duì)象,該對(duì)象包含servlet的信息,例如開發(fā)者、創(chuàng)建日期、描述信息等.該方法也可用于容器.◆GenericServlet類1實(shí)現(xiàn)Servlet、ServletConfig、Serializable2提供了servlet接口的基本實(shí)現(xiàn)部分,其service()方法被申明為abstract,因此需要被派生.3init(ServletConfigconf)方法把servletConfig對(duì)象存儲(chǔ)在一個(gè)privatetransient(私有臨時(shí))實(shí)例變量里4getServletConfig()方法返回指向本對(duì)象的指針,如果重載此方法,將不能使用getServletConfig來獲得ServletConfig對(duì)象,如果確實(shí)想重載,記住要包含對(duì)super.config的調(diào)用.5log(Stringmsg)方法將servlet的名稱和msg參數(shù)寫到容器的日志中6getservletContext(),得到一個(gè)context實(shí)例,用于和環(huán)境交互,每個(gè)web只有一個(gè)context,context是定義在<web-app><context-param>中的全局參數(shù)。Context對(duì)象也可以用getServletConfig.getservletContext()得到,但只能訪問與之對(duì)應(yīng)的servlet中的<init-parameter>7this.getInitParameter(“name”)=this.getServletConfig.getInitParameter(“name”)◆HttpServlet類1擴(kuò)展了GenericServlet類并對(duì)servlet接口提供了與HTTP更相關(guān)的實(shí)現(xiàn)2protectedvoidservice(HttpServletRequestreq,HttpServletResponseres)throwsServletException,IOException該方法作為HTTP請求的分發(fā)器,任何時(shí)候都不能被重載.當(dāng)請求到來時(shí),service()方法根據(jù)請求的類型(GET,POST,HEAD,OPTIONS,DELETE,PUT,TRACE),并把請求分發(fā)給相應(yīng)的處理方法(doGet(),doPost(),doHead(),doOptions(),doDelete(),screen-->在客戶端頁面源程序中顯示為:<!--Thisfiledisplaystheuserloginscreen-->例2<!-頁面調(diào)用日期為:<%=(newjava.util.Date()).toLocaleString()%>-->在客戶端頁面源程序中顯示為:<!--頁面調(diào)用日期為:January1,2000-->◆JSP頁面的生命周期:翻譯和編譯(轉(zhuǎn)換階段),執(zhí)行階段?!鬔SP執(zhí)行過程:jsp文件在用戶第一次請求時(shí),會(huì)被編譯成Servlet,然后由這個(gè)Servlet處理用戶的請求,所以Servlet可以看成是運(yùn)行時(shí)的jsp,jsp容器(也就是Servlet容器)管理jsp頁面聲明周期分為兩個(gè)階段.即轉(zhuǎn)換階段和執(zhí)行階段,當(dāng)有一個(gè)對(duì)jsp頁面的請求到來時(shí),jsp容器檢查jsp頁面的語法是否正確,將jsp頁面轉(zhuǎn)換為Servlet源文件,然后調(diào)用javac命令編譯Servlet源文件生成字節(jié)碼文件.這是轉(zhuǎn)換階段,Servlet容器加載轉(zhuǎn)換后的Servlet類,這是執(zhí)行階段?!鬔SP隱式對(duì)象:◆1輸入/輸出對(duì)象:控制頁面的輸入和輸出,訪問與所有請求和響應(yīng)有關(guān)的數(shù)據(jù),輸入和輸出對(duì)象包括request、response和out。request對(duì)象:表示客戶端對(duì)網(wǎng)頁的請求,實(shí)javax.servlet.http.HttpServletRequest接口,使用HTTP協(xié)議處理客戶端的請求.常用方法StringgetParameter(Stringname)根據(jù)頁面表單組件名稱獲取請求頁面提交數(shù)據(jù)String[]getParameterValues(Stringname)獲取頁面請求中一個(gè)表單組件對(duì)應(yīng)多個(gè)值時(shí)的用戶的請求數(shù)據(jù),例如;Stringname=formatStr(request.getParameter("name"));response對(duì)象:處理JSP生成的響應(yīng),將響應(yīng)發(fā)送給客戶端,實(shí)現(xiàn)javax.servlet.http.HttpServletResponse接口,使用HTTP協(xié)議將響應(yīng)發(fā)送給客戶端。常用方法voidsetContentType(Stringname)設(shè)置作為響應(yīng)生成的內(nèi)容的類型和字符編碼voidsendRedirect(Stringname)發(fā)送一個(gè)響應(yīng)給瀏覽器,指示其應(yīng)請求另一個(gè)URL。例如:response.setContentType("text/html;charset=GBK");response.sendRedirect("response2.jsp");out對(duì)象:表示輸流,javax.servlet.jsp.JspWriter類的實(shí)例,以字符流的形式輸出數(shù)據(jù).通過page指令的,buffer屬性來制定緩沖區(qū)的大小,默認(rèn)是8kb,使用write()、print()和println()方法。例如:out.print(“歡迎來到JSP:隱式對(duì)象”);out.write(“歡迎來到JSP:隱式對(duì)象”);◆2作用域通信對(duì)象:包括:session對(duì)象:Web服務(wù)器為單個(gè)用戶發(fā)送的多個(gè)請求創(chuàng)建會(huì)話,存儲(chǔ)有關(guān)用戶會(huì)話的所有信息,javax.servlet.http.HttpSession接口的實(shí)例,最常用的方法有:voidsetAttribute(Stringname,Objectvalue)以鍵/值的方式,將一個(gè)對(duì)象的值存放到session中,voidgetAttribute(Stringname)根據(jù)名稱去獲取session中存放對(duì)象的值,例如:Stringname=(String)session.setAttribute(“name”);application對(duì)象:表示JSP頁面所屬的應(yīng)用程序,應(yīng)用程序的JSP頁面組合起來形成一個(gè)應(yīng)用程序,javax.servlet.ServletContext接口實(shí)例,常用的方法有:voidsetAttribute(Stringname,Objectvalue)以鍵/值的方式,將一個(gè)對(duì)象的值存放到application中,voidgetAttribute(Stringname)根據(jù)名稱去獲取application中存放對(duì)象的值,例如:application.setAttribute(“ChartRecord”,“hihi”);pageContext對(duì)象:使用戶可以訪問頁面作用域中定義的所有隱式對(duì)象,它的作用范圍是在同一頁面,javax.servlet.jsp.PageContext類的實(shí)例,常用的方法有:voidsetAttribute(Stringname,Objectvalue)以鍵/值的方式,將一個(gè)對(duì)象的值存放到pageContext中voidgetAttribute(Stringname)根據(jù)名稱去獲pageContext中存放對(duì)象的值。例如:(Integer)pageContext.getAttribute("pageCount");pageContext.setAttribute("pageCount",newInteger(Value()+1));◆3Servlet對(duì)象:JSP引擎為每個(gè)JSP生成一Servlet,Servlet對(duì)象提供了訪問Servlet信息的方法和變量,Servlet對(duì)象包括page,config。page對(duì)象:使用page對(duì)象可以訪問Servlet類的所有變量和方法(jsp頁面中很少使用該對(duì)象),java.lang.Object類的一個(gè)實(shí)例。例如:<%=((javax.servlet.jsp.HttpJspPage)page).getServletInfo()%>config對(duì)象:存儲(chǔ)在編譯JSP頁面的過程中創(chuàng)建的Servlet的信息,在Servlet初始化時(shí)向其傳遞配置信息,javax.servlet.ServletConfig接口的實(shí)例,提供了檢索Servlet初始化參數(shù)的方法。例如:(String)config.getInitParameter(”PropertyFile”);exception對(duì)象:exception對(duì)象用于處理JSP頁面中的錯(cuò)誤,exception對(duì)象用于訪問執(zhí)行JSP的過程中引發(fā)的異常,◆4exception對(duì)象是java.lang.Throwable類的實(shí)例。例如:<%exception.printStackTrace(out);%>◆其他隱式對(duì)象:pageContext:提供對(duì)頁面屬性的訪問param:返回客戶端的請求參數(shù)的字符串值paramValues:返回映射至客戶端的請求參數(shù)的一組值header:返回一個(gè)請求標(biāo)題名稱,然后將該值映射至單個(gè)字符串值headerValues:返回映射至請求標(biāo)題的一組值cookie:返回映射至單個(gè)Cookie對(duì)象的Cookie名稱initParam:返回映射至單個(gè)值的上下文初始化參數(shù)名稱pageScope:返回頁面范圍的變量名,這些名稱已映射至相應(yīng)的值requestScope:返回對(duì)請求對(duì)象的屬性的訪問權(quán)限sessionScope:返回會(huì)話范圍的變量名,這些名稱已映射至相應(yīng)的值applicationScope:返回應(yīng)用范圍內(nèi)的變量,并將變量名映射至相應(yīng)的值五◆◆◆◆JavaBean簡述◆JavaBean:用Java語言描述的軟件組件模型,與一般類的差別:遵循某些特定約定的Java類,分為可視化組件和非可視化組件,簡單的GUI元素,如按鈕或文本框,也可以是復(fù)雜的,如報(bào)表組件,沒有GUI表現(xiàn)形式,用于封裝業(yè)務(wù)邏輯,數(shù)據(jù)庫操作等,最大的優(yōu)點(diǎn)在于可以實(shí)現(xiàn)代碼的可重用性,可移植性強(qiáng)JavaBean組件主要用于存儲(chǔ)狀態(tài)信息.◆編程規(guī)范:1需要特定的命空間(默認(rèn)包是不允許的)2必須具備一個(gè)無參數(shù)(空)的構(gòu)造函數(shù)(辦法:省略所有的構(gòu)造函數(shù)顯式定義一個(gè)無參數(shù)構(gòu)造函數(shù))3不應(yīng)該有public的類屬性(字段)4應(yīng)該通過getXxx和setXxx方法來訪問類的屬性,布爾型的屬性使用isXxx,而非getXxx.◆不應(yīng)使用public字段:可以對(duì)值加以約束,可以在不改變接口的情況下修改內(nèi)部的表達(dá),可以執(zhí)行任意的邊界效應(yīng)。例子:1.javabean編寫:(Putin…/WEB-INF/classes/coreservlets/StringBean.class)Packagecoreservlets;publicclassStringBean{privateStringmessage="Nomessagespecified";publicStringgetMessage(){return(message);}publicvoidsetMessage(Stringmessage){this.message=message;}}2.頁面使用<jsp:useBeanid="stringBean"class="coreservlets.StringBean"/><OL><LI>Initialvalue(fromjsp:getProperty):<I><jsp:getPropertyname="stringBean"property="message"/></I>LI>Initialvalue(fromJSPexpression):<I><%=stringBean.getMessage()%></I><LI><jsp:setPropertyname="stringBean"property="message"value="Beststringbean:Fortex"/>Valueaftersettingpropertywithjsp:setProperty:<I><jsp:getPropertyname="stringBean"property="message"/></I>LI><%stringBean.setMessage("Myfavorite:KentuckyWonder");%>Valueaftersettingpropertywithscriptlet:<I><%=stringBean.getMessage()%></I></OL>六◆◆◆◆JDBC簡介◆JDBC本身是個(gè)商標(biāo)名而不是一個(gè)縮寫字“JavaDatabaseConnectivity”.一種用于執(zhí)行SQL語句的JavaAPI,由一組類和接口組成.為工具/數(shù)據(jù)庫開發(fā)人員提供了一個(gè)標(biāo)準(zhǔn)的API,使他們能夠用純JavaAPI來編寫數(shù)據(jù)庫應(yīng)用程序.采用JDBC,不需要針對(duì)各種關(guān)系數(shù)據(jù)庫編寫不同的數(shù)據(jù)庫程序.將Java和JDBC結(jié)合起來將使程序員只須寫一遍程序就可讓它在任何平臺(tái)上運(yùn)行.◆體系結(jié)構(gòu):應(yīng)用程序-JDBCAPI-JDBCDriverManager-數(shù)據(jù)庫驅(qū)動(dòng)◆數(shù)據(jù)庫驅(qū)動(dòng)有四種;Type1;JDBC-ODBC
Bridge,Type橋接器驅(qū)動(dòng)程序之一,特色是必須在使用者端的計(jì)算機(jī)上事先安裝好ODBC驅(qū)動(dòng)程序,然后通過JDBC-ODBC的調(diào)用方法,進(jìn)而通過ODBC來存取數(shù)據(jù)庫.ApplicationJDBC-ODBC
BridgeJDBC-ODBC
LibraryODBC
DriverDatabase
,適用于快速的原型系統(tǒng),沒有提供JDBC驅(qū)動(dòng)的數(shù)據(jù)庫如Access
◆2;JDBC-Native
API
Bridge,Type;橋接器驅(qū)動(dòng)程序之一,這類驅(qū)動(dòng)程序也必須先在使用者計(jì)算機(jī)上先安裝好特定的驅(qū)動(dòng)程序(類似ODBC),然后通過JDBC-Native
API橋接器的轉(zhuǎn)換,把Java
API調(diào)用轉(zhuǎn)換成特定驅(qū)動(dòng)程序的調(diào)用方法,進(jìn)而存取數(shù)據(jù)庫.利用開發(fā)商提供的本地庫直接與數(shù)據(jù)庫通信.ApplicaJDBC
DriverNative
Database
libraryDatabase
比A類性能略好◆3;JDBC-middleware,好處;省好處:省去了在使用者計(jì)算機(jī)上安裝任何驅(qū)動(dòng)程序的麻煩,只需在服務(wù)器端安裝好middleware,而middleware會(huì)負(fù)責(zé)所有存取數(shù)據(jù)庫必要的轉(zhuǎn)換。具有最大的靈活性,通常由那些非數(shù)據(jù)庫廠商提供.ApplicationJdbc
Driverjava
middlewareJDBC
DriverDatabase,
◆Type4;Pure
JDBC
driver這類型的驅(qū)動(dòng)程序是最成熟的JDBC驅(qū)動(dòng)程序,不但無需在使用者計(jì)算機(jī)上安裝任何額外(不包括JDBC
Driver即JDBC
API)的驅(qū)動(dòng)程序,也不需要在服務(wù)器端安裝任何中介程序(middleware),所有存取數(shù)據(jù)庫的操作,都直接由驅(qū)動(dòng)程序來完成.ApplicationJdbc
driver>database
enginedatabase最高的性能,通過自己的本地協(xié)議直接與數(shù)據(jù)庫引擎通信,具備在Internet裝配的能力.◆JDBCAPI;JDBC是一種低級(jí)API,是高級(jí)API的基礎(chǔ)JDBC是個(gè)“低級(jí)”接口,用于直接調(diào)用SQL命令.在這方面功能極佳,并比其它的數(shù)據(jù)庫連接API易于使用.高級(jí)接口是“對(duì)用戶友好的”接口,它使用的是一種更易理解和更為方便的API,這種API在幕后被轉(zhuǎn)換為諸如JDBC這樣的低級(jí)接口.核心的JDBCAPI在包java.sql中.JDBCAPI實(shí)現(xiàn)了四個(gè)基本的功能;建立與數(shù)據(jù)的連接,執(zhí)行SQL語句和處理執(zhí)行結(jié)果,關(guān)閉數(shù)據(jù)庫的連接.JDBCAPI實(shí)現(xiàn)了四個(gè)基本的功能:建立與數(shù)據(jù)的連接、執(zhí)行SQL語句和處理執(zhí)行結(jié)果,關(guān)閉數(shù)據(jù)庫的連接.◆Driver接口;JDBC驅(qū)動(dòng)程序必須實(shí)現(xiàn)Driver接口,且該實(shí)現(xiàn)必須包含一個(gè)靜態(tài)的初始化塊,靜態(tài)的初始化塊使用DriverManager注冊自身一個(gè)新實(shí)例.PublicclassMeDriverimplementsjava.sql.Driver{static{java.sql.DriverManager.registerDiver(newMeDriver())}}當(dāng)使用Class.forName(“com.acme.jdbc.AcmeJdbcDriver”),加載該驅(qū)動(dòng)的實(shí)例時(shí)靜態(tài)的代碼塊將自動(dòng)的注冊該驅(qū)動(dòng)的實(shí)例.當(dāng)DriverManager試圖建立某個(gè)數(shù)據(jù)庫連接時(shí),DriverManager調(diào)用驅(qū)動(dòng)程序的connect()方法,并把數(shù)據(jù)庫連接的URL傳遞給它.JDBCURL提供了一種標(biāo)識(shí)數(shù)據(jù)庫的方法.可以使相應(yīng)的驅(qū)動(dòng)程序能識(shí)別該數(shù)據(jù)庫并與之建立連接.URL語法jdbc:<subprotocol>:<subname>JDBCURL中的協(xié)議總是jdbc,<subprotocol>子協(xié)議用來標(biāo)識(shí)一種特定種類的數(shù)據(jù)庫連接機(jī)制,<subname>的內(nèi)容依賴于子協(xié)議,推薦的語法是://hostname:port/subsubname例;jdbc:mysql://localhost:3306/jpetstore?autoReconnect=true或jdbc:odbc:fredodbc子協(xié)議,是一種特殊情況.用于指定ODBC風(fēng)格的數(shù)據(jù)資源名稱的URL而保留的,并具有下列特性;允許在子名稱(數(shù)據(jù)資源名稱)后指定任意多個(gè)屬性值.odbc子協(xié)議的完整語法為;jdbc:odbc:<數(shù)據(jù)資源名稱>[;<屬性名>=<屬性值>]*合法的名稱;jdbc:odbc:qeor7,jdbc:odbc:wombat,jdbc:odbc:wombat;CacheSize=20;ExtensionCase=LOWER,jdbc:odbc:qeora;UID=kgh;PWD=fooey◆DataSource接口;DataSource對(duì)象表示一個(gè)數(shù)據(jù)源,并提供了該數(shù)據(jù)源的連接使用DataSource對(duì)象增加了應(yīng)用程序的可移植性(使用邏輯名稱表示一個(gè)數(shù)據(jù)源,取代為驅(qū)動(dòng)程序提供特定的連接信息)DataSource的屬性改變,應(yīng)用程序代碼不需要改變.DataSource接口屬性:databaseName,dataSourceName,description,networkProtocol(int),password,portNumber,roleName,serverName,user.DataSource屬性遵循JavaBeans組件中屬性的命名約定,DataSource的實(shí)現(xiàn)必須為每個(gè)支持的屬性提供存取方法“getter”and“setter”,DataSource的屬性對(duì)于JDBC客戶端來說不是直接可訪問的.使用JNDIAPI,指定邏輯名來訪問DataSource對(duì)象,把邏輯名映射到相應(yīng)的數(shù)據(jù)源.◆DriverManager類;負(fù)責(zé)管理JDBC驅(qū)動(dòng)程序。使用JDBC驅(qū)動(dòng)程序之前,必須先將驅(qū)動(dòng)程序加載并向DriverManager注冊后才可以使用,同時(shí)提供方法來建立與數(shù)據(jù)庫的連接。通過指定的URL查找合適的驅(qū)動(dòng)DriverManager關(guān)鍵方法registerDriver,getConnection(Stringurl),getConnection(Stringurl,java.util.Propertiesprop)◆Connection類:Connection對(duì)象代表與數(shù)據(jù)庫的連接。建立到底層數(shù)據(jù)源的連接有兩種DriverManager,DataSource連接過程包括所執(zhí)行的SQL語句和在該連接上所返回的結(jié)果。一個(gè)應(yīng)用程序可與單個(gè)數(shù)據(jù)庫有一個(gè)或多個(gè)連接,或者可與許多數(shù)據(jù)庫有連接。使用DriverManager的例子:StringclassName,url,uid,pwd;className=“com.microsoft.jdbc.sqlserver.SQLServerDriver”;url=“jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=testJDC;User=user;Password=password;//thehard-codeURLuid=”sa“;pwd=“sa”;Class.forName(className);//loadthedriverConnectioncn=DriverManager.getConnection(url);//Connectioncn=DriverManager.getConnection(url,uid,pwd)使用DataSource的例子:Stringjndi="jdbc/jpetstore1";Contextctx=(Context)newInitialContext().lookup("java:comp/env");DataSourceds=(DataSource)ctx.lookup(jndi);Connectioncn=ds.getConnection();◆Statement類:可以利用標(biāo)準(zhǔn)的SQL命令,對(duì)數(shù)據(jù)庫直接新增、刪除或修改操作
實(shí)現(xiàn)這種功能的類有三個(gè):Statement、PreparedStatement,CallableStatement。創(chuàng)建Statements對(duì)象:通過Connection對(duì)象建立可創(chuàng)建多個(gè)Statements對(duì)象,供程序并發(fā)使用conn=DriverManager.getConnection(url,"簡X","sb");Statementsb1=conn.creatStatement();Statementsb2=conn.creatStatement();執(zhí)行select:ResultSet
executeQuery(String
sql)
throws
SQLException
:ResultSet
rs=sb1.executeQuery("select*from簡X表")
;使用INSERT\DELETE\UPDATE對(duì)數(shù)據(jù)庫進(jìn)行新增、刪除和修改操作:introws=sb1.
executeUpdate("update簡X表setname='SEX'"+"whereNo=18")
;void
close()
throws
SQLException://結(jié)束Statement類對(duì)象對(duì)數(shù)據(jù)庫的聯(lián)機(jī)調(diào)用此方法表明已完成sql的執(zhí)行創(chuàng)建Statement的Connection對(duì)象關(guān)閉,將導(dǎo)致Statement對(duì)象關(guān)閉關(guān)閉Statement對(duì)象將會(huì)導(dǎo)致,由Statement對(duì)象獲得的ResultSet對(duì)象不在有效。◆PreparedStatement類
:是Statement的子類,在創(chuàng)建PreparedStatement時(shí),會(huì)提供一個(gè)SQL語句。區(qū)別在于:PreparedStatement類對(duì)象會(huì)將傳入的SQL命令事先編好等待使用,當(dāng)有單一的SQL指令比多次執(zhí)行時(shí),用PreparedStatement類會(huì)比Statement類有效率。一般來說,使用PreparedStatement對(duì)象都是帶輸入?yún)?shù)的。例子(當(dāng)前的表中有如下幾個(gè)字段ID,NAME,PASSWORD,TEXT,NOTE):Connectioncon=DriverManager.getConnection(url,user,password);PreparedStatementinsertStatement=con.prepareStatement("INSERTINTOrbac_applicationvalues(?,?,?,?,?)");insertStatement.setInt(1,10);insertStatement.setString(2,"thinkersky");insertStatement.setString(3,"88888");insertStatement.setString(4,"這是個(gè)測試的應(yīng)用程序");insertStatement.setString(5,"備注");intresult=insertStatement.executeUpdate();con.close();
◆CallableStatement類:是Statement的子類為所有的DBMS提供了一種以標(biāo)準(zhǔn)形式調(diào)用儲(chǔ)存過程的方法。儲(chǔ)存過程儲(chǔ)存在數(shù)據(jù)庫中。這種調(diào)用是用一種換碼語法來寫的,有兩種形式:一種形式帶結(jié)果參,另一種形式不帶結(jié)果參數(shù)。結(jié)果參數(shù)是一種輸出(OUT)參數(shù),是已儲(chǔ)存過程的返回值。兩種形式都可帶有數(shù)量可變的輸入(IN參數(shù))、輸出(OUT參數(shù))或輸入和輸出(INOUT參數(shù))的參數(shù)。問號(hào)將用作參數(shù)的占位符。
例子:CallableStatementcstm=connection.prepareCall("{callreturn_student[?,?]}");cstm.setString(1,"8623034");cstm.registerOutparameter(2,Types.REAL);cstm.execute();floatgpa=cstm.getFloat(2);◆ResultSet類:在以下方面確定了ResultSet的功能:光標(biāo)操作的方式對(duì)于底層數(shù)據(jù)源的改變?nèi)绾畏从车絉esultSet對(duì)象.有三種類型:TYPE_FORWARD_ONLY〔默認(rèn)值〕TYPE_SCROLL_INSENSITIVETYPE_SCROLL_SENSITIVE.ResultSetConcurrency〔并發(fā)性〕:有兩個(gè)并發(fā)性層次:CONCUR_READ_ONLY〔默認(rèn)值〕CONCUR_UPDATABLE。ResultSet持久性:holdability常量有:HOLD_CURSORS_OVER_COMMITCLOSE_CURSORS_AT_COMMIT◆光標(biāo)移動(dòng):光標(biāo)指向ResultSet對(duì)象的當(dāng)前行,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 魔術(shù)演出合同補(bǔ)充協(xié)議范本
- 全新化糞池供貨合同下載
- 2025年度老舊小區(qū)綠化改造與提升承包合同2篇
- 二零二五年度高端設(shè)備承包裝卸及維護(hù)合同3篇
- 2025年建筑工程分包居間合同2篇
- 2024秋二年級(jí)語文上冊第一單元3植物媽媽有辦法教材解讀素材新人教版
- 二零二五年度馬術(shù)青少年培訓(xùn)與發(fā)展合同
- 二零二五年度駕校入股與交通安全教育項(xiàng)目合同
- 二零二五年度高校與科研機(jī)構(gòu)自主實(shí)習(xí)合作協(xié)議
- 二零二五年度網(wǎng)絡(luò)安全保密技術(shù)合作框架協(xié)議3篇
- 江蘇省蘇州市昆山、太倉、常熟、張家港四市2024-2025學(xué)年九年級(jí)上學(xué)期期末陽光測試道法卷(含答案)
- 溫濕度記錄管理制度模版(3篇)
- wps計(jì)算機(jī)二級(jí)選擇押題單選題100道及答案
- 加油加氣站安全生產(chǎn)風(fēng)險(xiǎn)分級(jí)管控體系全套資料
- 2025的委托拍賣合同范本
- 管理制度醫(yī)療器械質(zhì)量管理制度
- 顱腦損傷的高壓氧治療
- 公司章程模板五篇
- 機(jī)械工程師招聘筆試題及解答
- 2023年基礎(chǔ)會(huì)計(jì)學(xué)課后習(xí)題及參考答案
- 要分手費(fèi)的分手協(xié)議書(標(biāo)準(zhǔn))
評(píng)論
0/150
提交評(píng)論