版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
一◆◆◆◆http協(xié)議◆HTTP協(xié)議用于在Internet上發(fā)送和接收消息。是一種請求-應答式的協(xié)議—客戶端發(fā)送一個請求,服務器返回該求的應答,所有的請求與應答都是HTTP包。HTTP協(xié)議使用可靠的TCP連接,默認端口是80。是一種無狀態(tài)協(xié)議,在HTTP中,Client/Server之間的會話總是由客戶端通過建立連接和發(fā)送HTTP請求包初始化,服務器不會主動聯(lián)系客戶端或要求與客戶端建立連接.瀏覽器和服務器都可以隨時中斷連接,例如,在瀏覽網(wǎng)頁時你可以隨時點擊“停止”按鈕中斷當前的文件下載過程,關(guān)閉與Web服務器的HTTP連接.不維持狀態(tài),一次請求和響應構(gòu)成一個獨立的事務,不同事務之間沒有狀態(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應答包:三部分,分別是:協(xié)議-狀態(tài)代碼-描述,應答頭,應答正文(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請求最為常見,它后面跟隨一個網(wǎng)頁的位置,服務器接受請求并返回其請求的頁面。除了頁面位置作參數(shù)之外,請求還可以跟隨協(xié)議的版本如HTTP/1.0等作為參數(shù),以發(fā)送給服務器更多的信息.POST請求要求服務器接收大量的信息,除了POST后面跟隨的參數(shù)之外,瀏覽器還會在后面持續(xù)發(fā)送數(shù)據(jù),讓服務器進行處理。通常,POST方法是和CGI程序分不開的,服務器應該啟動一個CGI程序來處理POST發(fā)送來的數(shù)據(jù).◆URI與URL:URI--UniversalResourceIdentifier通用資源標志符(1訪問資源的命名機制2存放資源的主機名3資源自身的名稱,由路徑表示),Web上可用的每種資源,如HTML文檔,圖像,視頻片段,程序等,由URI進行定位。URL--UniformResourceLocation統(tǒng)一資源定位符,Internet上用來描述信息資源的字符串,主要用在各種WWW客戶程序和服務器程序上,采用URL可以用一種統(tǒng)一的格式來描述各種信息資源,包括文件,服務器的地址和目錄等?!魎rl的語法:三部分:1.訪問資源的命名機制。2.存放資源的主機名。3.資源自身的名稱,由路徑表示。由三部分組成:一是協(xié)議;二是存有該資源的主機IP地址(有時也包括端口號);三是主機資源的具體地址,目錄和文件名等。第一部分和第二部分之間用“://”符號隔開,第二部分和第三部分用“/”符號隔開。第一部分和第二部分是不可缺少的,第三部分有時可以省略。語法如下:http_URL=http://host[“:”port][path]例如:http//:/◆狀態(tài)代碼:400BadRequest請求出現(xiàn)語法錯誤401Unauthorized客戶試圖未經(jīng)授權(quán)訪問受密碼保護的頁面403Forbidden資源不可用。服務器理解客戶的請求,但拒絕處理它。通常由于服務器上文件或目錄的權(quán)限設置導致404NotFound無法找到指定位置的資源。這也是一個常用的應答500InternalServerError服務器遇到了意料不到的情況,不能完成客戶的請求501NotImplemented服務器不支持實現(xiàn)請求所需要的功能。例如,客戶發(fā)出了一個服務器不支持的PUT請求;◆◆web應用程序:◆Web應用程序是servlets,jsp頁面HTML頁面,類,和其他資源等的集合缺省情形下,Web應用程序的實例必須運行在一個JVM(javavirtualmachine)中以兩種方式存在于文件系統(tǒng):一是web歸檔文件,以.war擴展名結(jié)尾;一是web歸檔文件展開后的目錄結(jié)構(gòu)◆Web應用程序的元素:Servlets,JSP頁面,幫助類,靜態(tài)文檔(HTML,images,sounds,etc.),客戶端的Javaapplets,beans,andclasses等,把上述元素組合起來的描述性的元信息(后綴.xml)◆web目錄結(jié)構(gòu)web應用程序的標準規(guī)劃被定義為層次結(jié)構(gòu)的目錄和文件。該層次結(jié)構(gòu)有兩種組織形式。一種是“unpacked”方式,這種情況下每個目錄和文件分散的保存在文件系統(tǒng)中,在開發(fā)期間比較有用;另一種是“packed”方式,如WebArchive或稱WAR文件,主要用于應用程序的發(fā)布安裝。web應用程序?qū)哟谓Y(jié)構(gòu)的頂級目錄也即應用程序的documentroot(根文檔),通常在該位置放置包含應用程序用戶界面的HTML文件和JSP頁面。當系統(tǒng)管理員將應用程序部署到一個特定的服務器上時,他將分配一個contextpath(上下文路徑)給應用程序。因此,如果系統(tǒng)管理員給應用程序分配的上下文路徑為/catalog,則指向/catalog/index.html的URI請求將從根文檔下獲取index.html文件。應用程序的"根文檔"目錄放置內(nèi)容:1◆*.html,*.jsp,etc.:應用程序中的HTML文件、JSP頁面文件及其他必須對客戶端瀏覽器可見的文件(如JavaScript,stylesheet文件,images文件)。對于大型應用程序,你需要考慮把這些文件分別放置在不同的子目錄結(jié)構(gòu)中,但對于一個小應用程序,通常簡單地把這些文件保存在同一個目錄下。2◆/WEB-INF是根文檔下一個特殊的目錄。/WEB-INF/web.xml:Web應用程序的部署描述器(WebApplicationDeploymentDescriptor)。一個XML文件,描述servlets和其他組件,同時包括一些初始化參數(shù)、及需要服務器執(zhí)行的容器管理的安全限制等。/WEB-INF/classes/:這個目錄下保存所有的應用程序需要的、沒有被打包到JAR文件中的Java類文件(及相關(guān)資源),包括servlet和non-servlet類。如果類被組織成Java的包,則必須在/WEB-INFO/classes/下以目錄層次結(jié)構(gòu)的方式保存。例如,一個名com.mycompany.mypackage.MyServlet的類,就應該保存為/WEB-INF/classes/com/mycompany/mypackage/MyServlet.class。/WEB-INF/lib/:這個目錄下保存打包了Java類文件(及相關(guān)的資源)的JAR文件,如第三方的類庫或JDBC驅(qū)動程序等。/WEB-INF是根文檔下一個特殊的目錄◆web部署描述符:在每一個Web應用程序路徑的WEB-INF下存在一個web.xml配置文件,用來設定Web應用程序的配置。通常包括如下類型的配置和部署信息:1.ServletContextInitParameters2.SessionConfiguration3.Servlet/JSPDefinitions4.Servlet/JSPMappings5.MIMETypeMappings6.WelcomeFilelist7.ErrorPages8.Security9.FordetailstoseeDeploymentDescriptorDiagram1.servletElementStructure2.servlet-mappingElementStructure3.session-configElementStructure4.welcome-file-listElementStructure二◆◆◆◆J2EE應用程序◆◆C/S模型從本質(zhì)上講是一種軟件結(jié)構(gòu),它包括三種邏輯成分:表示邏輯,業(yè)務處理邏輯,數(shù)據(jù)管理邏輯.◆C/S模型的缺陷:系統(tǒng)維護困難,系統(tǒng)的性能隨用戶數(shù)的增加而下降,系統(tǒng)的安全性差,系統(tǒng)的伸縮性差,客戶機負載過重◆B/S模型:表示邏輯,業(yè)務處理邏輯,數(shù)據(jù)處理邏輯集中,客戶端只需要安裝一個瀏覽器Browser.優(yōu):維護和升級方式簡單.成本降低,選擇更多.不限制客戶平臺,客戶端統(tǒng)一采用瀏覽器即可運行全部的模塊.劣:應用服務器運行數(shù)據(jù)負荷較重◆分布式多層應用程序模型(右圖)◆J2EE組件:是一個包含一定功能的軟件單元,它有相關(guān)的類和文件一起組成,并與其他組件進行通信,J2EE應用程序由許多不同的組件組成(包括EJB組件,Web組件,客戶層組件)J2EE客戶端包括以下三個◆Web客戶端:由兩部分組成:1由運行在Web層的Web組件生成的包含各種標記語言(HTML,XML等等)的動態(tài)Web頁面(①交互性,②自動更新,③因時因人而變)2接收從服務器傳送來的頁面并將它顯示出來的Web瀏覽器(一般是瘦客戶端,不做數(shù)據(jù)庫查詢,執(zhí)行復雜的商業(yè)規(guī)則及連接傳統(tǒng)應用程序這樣的操作◆applet(客戶端小型應用程序)從Web層接收的一個Web頁面可以包含內(nèi)嵌的applet,一個applet是一個用Java編程語言編寫的小的客戶端應用程序,它在安裝在Web瀏覽器中的Java虛擬機中運行,為了在Web瀏覽器中成功地運行applet,客戶端系統(tǒng)很可能需要Java插件和安全策略文件.◆Application客戶端◆Web組件:既可以是servlet也可以是JSP頁面.Servlets是一個Java類,它可以動態(tài)地處理請求并作出響應.JSP頁面是一個基于文本的文檔,它以servlet的方式執(zhí)行,但是它可以更方便建立靜態(tài)內(nèi)容.靜態(tài)的HTML頁面,applet,服務器端的功能類并不被J2EE規(guī)范視為Web組件◆Business組件:由運行在業(yè)務層的enterprisebeans(EJB)處理,包括:會話beans,實體beans,and消息驅(qū)動beans.◆EIS層:企業(yè)信息系統(tǒng)層處理企業(yè)信息系統(tǒng)軟件并包含諸如企業(yè)資源計劃(ERP)、主機事務處理、數(shù)據(jù)庫系統(tǒng)和其它傳統(tǒng)系統(tǒng)這樣的底層系統(tǒng)。J2EE應用程序組件可能需要訪問企業(yè)信息系統(tǒng),例如獲得一個數(shù)據(jù)庫連接?!鬔2EE容器:容器為J2EE應用程序組件提供了運行時支持,容器充當組件與支持組件的底層特定于平臺的功能之間的接口,J2EE服務器以容器的形式為每一個組件類型提供底層服務?!羧萜鞣眨喝萜魇且粋€組件和支持組件的底層平臺特定功能之間的接口,在一個Web組件、enterprisebean或者是一個應用程序客戶端組件可以被執(zhí)行前,它們必須被裝配到一個J2EE應用程序中,并且部署到它們的容器。裝配的過程包括為J2EE應用程序中的每一個組件以及J2EE應用程序本身指定容器的設置。容器設置定制了由J2EE服務器提供的底層支持,這將包括諸如安全性、事務管理、Java命名目錄接口(JNDI)搜尋以及遠程序連接。J2EE的安全性模式可以讓你對一個Web組件或enterprisebean進行配置以使得只有授權(quán)用戶訪問系統(tǒng)資源。J2EE的事務模式可以讓你指定方法之間的關(guān)系以組成一個單個的事務,這樣在一個事務中的所有方法將被視為一個單一的整體。JNDI搜尋服務為企業(yè)中的多種命名目錄服務提供一個統(tǒng)一的接口,這使得應用程序組件可以訪問命名目錄服務。J2EE遠程連接模式管理客戶端和enterprisebean之間的底層通信。在一個enterprisebean被建立后,客戶端在調(diào)用其中的方法時就象這個enterprisebean就運行在同一個虛擬機上一樣。J2EE體系結(jié)構(gòu)提供了可配置的服務意味著在相同的J2EE應用程序中的應用程序組件根據(jù)其被部署在什么在地方在實際運行時會有所不同。容器還管理諸如一個enterprisebean和servlet的生存周期、數(shù)據(jù)庫連接資源池等不能配置服務。◆容器類型:EJB容器是執(zhí)行J2EE應用程序的EJB組件所必需的,Applet容器用于管理Applet執(zhí)行所必需的,其中,Web瀏覽器和Java插件將一起在客戶端上運,Web容器管理J2EE應用程序的Servlet和JSP頁面的執(zhí)行,應用程序客戶端容器是管理應用程序客戶端組件執(zhí)行所必需的?!鬔2EE核心技術(shù):JavaServlet,JavaServerPages,JDBC,JNDI,EnterpriseJavaBeans(EJB),Java郵件API,用于XML處理的JavaAPI,用于基于XML的RPC的JavaAPI,用于Java的帶有附件API的SOAP,Java事務處理API,Java命名和目錄接口◆開發(fā)、封裝和部署J2EE應用程序:1開發(fā)環(huán)境搭建:(操作系統(tǒng)平臺的選擇,應用服務器的選擇,數(shù)據(jù)庫服務器的選擇,開發(fā)工具的選擇)2創(chuàng)建組件—封裝組件—應用程序匯編—應用程序部署,三種角色:應用程序組件提供者,應用程序匯編者,部署者三◆◆◆◆Servlet技術(shù)◆JavaServlets:是基于Java技術(shù)的Web組件,用來擴展以請求/響應為模型的服務器的能力,提供動態(tài)內(nèi)容。Servlet是使用JavaServlet應用程序設計接口(API)及相關(guān)類和方法的Java程序。因為是對象字節(jié)碼,可動態(tài)地從網(wǎng)絡加載。Servlet由容器或引擎來管理,通過請求/響應模型與Web客戶進行交互◆servlet容器:servlet由servlet容器管理,servlet容器也叫servlet引擎,是servlet的運行環(huán)境,servlet容器是web服務器或應用服務器的一部分管理和維護servlet的整個生命周期必須支持http協(xié)議,負責處理客戶請求、把請求傳送給適當?shù)膕ervlet并把結(jié)果返回給客戶。雖然容器的實現(xiàn)可能各不相同,但容器與servlet之間的接口是由servletAPI定義好的,規(guī)定了servlet容器在servlet上要調(diào)用的方法及傳遞給servlet的對象類。◆實現(xiàn)servletd的三種方法:publicclassExampleimplementsServlet(extendsGenericServlet,extendsHttpServlet)◆servlet接口,定義在javax.servlet.Servlet,當在編寫某個servlet的時必須直接或間接的實現(xiàn)這個接口.一般趨向于間接實現(xiàn):通過從javax.servlet.GenericServlet或javax.servlet.http.HttpServlet派生.,在實現(xiàn)servlet接口時必須實現(xiàn)它的五個方法1publicvoidinit(ServletConfigconfig)throwsServletException,一旦對servlet實例化后,容器就調(diào)用此方法.容器把一個ServletConfig對象傳統(tǒng)給此方法,這樣servlet的實例就可以把與容器相關(guān)的配置數(shù)據(jù)保存起來供以后使用.如果此方法沒有正常結(jié)束就會拋出一個ServletException.一旦拋出該異常,servlet就不再執(zhí)行,而隨后對它的調(diào)用會導致容器對它重新載入并再次運行此方法.接口規(guī)定對任何servlet實例,此方法只能被調(diào)用一次,在任何請求傳遞給servlet之前,此方法可以在不拋出異常的情況下運行完畢.2publicvoidservice(ServletRequestreq,ServletResponseres)throwsServletException,IOException,只有成功初始化后此方法才能被調(diào)用處理用戶請求.前一個參數(shù)提供訪問初始請求數(shù)據(jù)的方法和字段,后一個提供servlet構(gòu)造響應的方法.3publicvoiddestroy()容器可以在任何時候終止servlet服務.容器調(diào)用此方法前必須給service()線程足夠時間來結(jié)束執(zhí)行,因此接口規(guī)定當service()正在執(zhí)行時destroy()不被執(zhí)行4publicServletConfiggetServletConfig()在servlet初始化時,容器傳遞進來一個ServletConfig對象并保存在servlet實例中,該對象允許訪問兩項內(nèi)容:初始化參數(shù)和ServletContext對象,前者通常由容器在文件中指定,允許在運行時向sevrlet傳遞有關(guān)調(diào)度信息,后者為servlet提供有關(guān)容器的信息.此方法可以讓servlet在任何時候獲得該對象及配置信息.5publicStringgetServletInfo()此方法返回一個String對象,該對象包含servlet的信息,例如開發(fā)者、創(chuàng)建日期、描述信息等.該方法也可用于容器.◆GenericServlet類1實現(xiàn)Servlet、ServletConfig、Serializable2提供了servlet接口的基本實現(xiàn)部分,其service()方法被申明為abstract,因此需要被派生.3init(ServletConfigconf)方法把servletConfig對象存儲在一個privatetransient(私有臨時)實例變量里4getServletConfig()方法返回指向本對象的指針,如果重載此方法,將不能使用getServletConfig來獲得ServletConfig對象,如果確實想重載,記住要包含對super.config的調(diào)用.5log(Stringmsg)方法將servlet的名稱和msg參數(shù)寫到容器的日志中6getservletContext(),得到一個context實例,用于和環(huán)境交互,每個web只有一個context,context是定義在<web-app><context-param>中的全局參數(shù)。Context對象也可以用getServletConfig.getservletContext()得到,但只能訪問與之對應的servlet中的<init-parameter>7this.getInitParameter(“name”)=this.getServletConfig.getInitParameter(“name”)◆HttpServlet類1擴展了GenericServlet類并對servlet接口提供了與HTTP更相關(guān)的實現(xiàn)2protectedvoidservice(HttpServletRequestreq,HttpServletResponseres)throwsServletException,IOException該方法作為HTTP請求的分發(fā)器,任何時候都不能被重載.當請求到來時,service()方法根據(jù)請求的類型(GET,POST,HEAD,OPTIONS,DELETE,PUT,TRACE),并把請求分發(fā)給相應的處理方法(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文件在用戶第一次請求時,會被編譯成Servlet,然后由這個Servlet處理用戶的請求,所以Servlet可以看成是運行時的jsp,jsp容器(也就是Servlet容器)管理jsp頁面聲明周期分為兩個階段.即轉(zhuǎn)換階段和執(zhí)行階段,當有一個對jsp頁面的請求到來時,jsp容器檢查jsp頁面的語法是否正確,將jsp頁面轉(zhuǎn)換為Servlet源文件,然后調(diào)用javac命令編譯Servlet源文件生成字節(jié)碼文件.這是轉(zhuǎn)換階段,Servlet容器加載轉(zhuǎn)換后的Servlet類,這是執(zhí)行階段?!鬔SP隱式對象:◆1輸入/輸出對象:控制頁面的輸入和輸出,訪問與所有請求和響應有關(guān)的數(shù)據(jù),輸入和輸出對象包括request、response和out。request對象:表示客戶端對網(wǎng)頁的請求,實javax.servlet.http.HttpServletRequest接口,使用HTTP協(xié)議處理客戶端的請求.常用方法StringgetParameter(Stringname)根據(jù)頁面表單組件名稱獲取請求頁面提交數(shù)據(jù)String[]getParameterValues(Stringname)獲取頁面請求中一個表單組件對應多個值時的用戶的請求數(shù)據(jù),例如;Stringname=formatStr(request.getParameter("name"));response對象:處理JSP生成的響應,將響應發(fā)送給客戶端,實現(xiàn)javax.servlet.http.HttpServletResponse接口,使用HTTP協(xié)議將響應發(fā)送給客戶端。常用方法voidsetContentType(Stringname)設置作為響應生成的內(nèi)容的類型和字符編碼voidsendRedirect(Stringname)發(fā)送一個響應給瀏覽器,指示其應請求另一個URL。例如:response.setContentType("text/html;charset=GBK");response.sendRedirect("response2.jsp");out對象:表示輸流,javax.servlet.jsp.JspWriter類的實例,以字符流的形式輸出數(shù)據(jù).通過page指令的,buffer屬性來制定緩沖區(qū)的大小,默認是8kb,使用write()、print()和println()方法。例如:out.print(“歡迎來到JSP:隱式對象”);out.write(“歡迎來到JSP:隱式對象”);◆2作用域通信對象:包括:session對象:Web服務器為單個用戶發(fā)送的多個請求創(chuàng)建會話,存儲有關(guān)用戶會話的所有信息,javax.servlet.http.HttpSession接口的實例,最常用的方法有:voidsetAttribute(Stringname,Objectvalue)以鍵/值的方式,將一個對象的值存放到session中,voidgetAttribute(Stringname)根據(jù)名稱去獲取session中存放對象的值,例如:Stringname=(String)session.setAttribute(“name”);application對象:表示JSP頁面所屬的應用程序,應用程序的JSP頁面組合起來形成一個應用程序,javax.servlet.ServletContext接口實例,常用的方法有:voidsetAttribute(Stringname,Objectvalue)以鍵/值的方式,將一個對象的值存放到application中,voidgetAttribute(Stringname)根據(jù)名稱去獲取application中存放對象的值,例如:application.setAttribute(“ChartRecord”,“hihi”);pageContext對象:使用戶可以訪問頁面作用域中定義的所有隱式對象,它的作用范圍是在同一頁面,javax.servlet.jsp.PageContext類的實例,常用的方法有:voidsetAttribute(Stringname,Objectvalue)以鍵/值的方式,將一個對象的值存放到pageContext中voidgetAttribute(Stringname)根據(jù)名稱去獲pageContext中存放對象的值。例如:(Integer)pageContext.getAttribute("pageCount");pageContext.setAttribute("pageCount",newInteger(Value()+1));◆3Servlet對象:JSP引擎為每個JSP生成一Servlet,Servlet對象提供了訪問Servlet信息的方法和變量,Servlet對象包括page,config。page對象:使用page對象可以訪問Servlet類的所有變量和方法(jsp頁面中很少使用該對象),java.lang.Object類的一個實例。例如:<%=((javax.servlet.jsp.HttpJspPage)page).getServletInfo()%>config對象:存儲在編譯JSP頁面的過程中創(chuàng)建的Servlet的信息,在Servlet初始化時向其傳遞配置信息,javax.servlet.ServletConfig接口的實例,提供了檢索Servlet初始化參數(shù)的方法。例如:(String)config.getInitParameter(”PropertyFile”);exception對象:exception對象用于處理JSP頁面中的錯誤,exception對象用于訪問執(zhí)行JSP的過程中引發(fā)的異常,◆4exception對象是java.lang.Throwable類的實例。例如:<%exception.printStackTrace(out);%>◆其他隱式對象:pageContext:提供對頁面屬性的訪問param:返回客戶端的請求參數(shù)的字符串值paramValues:返回映射至客戶端的請求參數(shù)的一組值header:返回一個請求標題名稱,然后將該值映射至單個字符串值headerValues:返回映射至請求標題的一組值cookie:返回映射至單個Cookie對象的Cookie名稱initParam:返回映射至單個值的上下文初始化參數(shù)名稱pageScope:返回頁面范圍的變量名,這些名稱已映射至相應的值requestScope:返回對請求對象的屬性的訪問權(quán)限sessionScope:返回會話范圍的變量名,這些名稱已映射至相應的值applicationScope:返回應用范圍內(nèi)的變量,并將變量名映射至相應的值五◆◆◆◆JavaBean簡述◆JavaBean:用Java語言描述的軟件組件模型,與一般類的差別:遵循某些特定約定的Java類,分為可視化組件和非可視化組件,簡單的GUI元素,如按鈕或文本框,也可以是復雜的,如報表組件,沒有GUI表現(xiàn)形式,用于封裝業(yè)務邏輯,數(shù)據(jù)庫操作等,最大的優(yōu)點在于可以實現(xiàn)代碼的可重用性,可移植性強JavaBean組件主要用于存儲狀態(tài)信息.◆編程規(guī)范:1需要特定的命空間(默認包是不允許的)2必須具備一個無參數(shù)(空)的構(gòu)造函數(shù)(辦法:省略所有的構(gòu)造函數(shù)顯式定義一個無參數(shù)構(gòu)造函數(shù))3不應該有public的類屬性(字段)4應該通過getXxx和setXxx方法來訪問類的屬性,布爾型的屬性使用isXxx,而非getXxx.◆不應使用public字段:可以對值加以約束,可以在不改變接口的情況下修改內(nèi)部的表達,可以執(zhí)行任意的邊界效應。例子: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本身是個商標名而不是一個縮寫字“JavaDatabaseConnectivity”.一種用于執(zhí)行SQL語句的JavaAPI,由一組類和接口組成.為工具/數(shù)據(jù)庫開發(fā)人員提供了一個標準的API,使他們能夠用純JavaAPI來編寫數(shù)據(jù)庫應用程序.采用JDBC,不需要針對各種關(guān)系數(shù)據(jù)庫編寫不同的數(shù)據(jù)庫程序.將Java和JDBC結(jié)合起來將使程序員只須寫一遍程序就可讓它在任何平臺上運行.◆體系結(jié)構(gòu):應用程序-JDBCAPI-JDBCDriverManager-數(shù)據(jù)庫驅(qū)動◆數(shù)據(jù)庫驅(qū)動有四種;Type1;JDBC-ODBC
Bridge,Type橋接器驅(qū)動程序之一,特色是必須在使用者端的計算機上事先安裝好ODBC驅(qū)動程序,然后通過JDBC-ODBC的調(diào)用方法,進而通過ODBC來存取數(shù)據(jù)庫.ApplicationJDBC-ODBC
BridgeJDBC-ODBC
LibraryODBC
DriverDatabase
,適用于快速的原型系統(tǒng),沒有提供JDBC驅(qū)動的數(shù)據(jù)庫如Access
◆2;JDBC-Native
API
Bridge,Type;橋接器驅(qū)動程序之一,這類驅(qū)動程序也必須先在使用者計算機上先安裝好特定的驅(qū)動程序(類似ODBC),然后通過JDBC-Native
API橋接器的轉(zhuǎn)換,把Java
API調(diào)用轉(zhuǎn)換成特定驅(qū)動程序的調(diào)用方法,進而存取數(shù)據(jù)庫.利用開發(fā)商提供的本地庫直接與數(shù)據(jù)庫通信.ApplicaJDBC
DriverNative
Database
libraryDatabase
比A類性能略好◆3;JDBC-middleware,好處;省好處:省去了在使用者計算機上安裝任何驅(qū)動程序的麻煩,只需在服務器端安裝好middleware,而middleware會負責所有存取數(shù)據(jù)庫必要的轉(zhuǎn)換。具有最大的靈活性,通常由那些非數(shù)據(jù)庫廠商提供.ApplicationJdbc
Driverjava
middlewareJDBC
DriverDatabase,
◆Type4;Pure
JDBC
driver這類型的驅(qū)動程序是最成熟的JDBC驅(qū)動程序,不但無需在使用者計算機上安裝任何額外(不包括JDBC
Driver即JDBC
API)的驅(qū)動程序,也不需要在服務器端安裝任何中介程序(middleware),所有存取數(shù)據(jù)庫的操作,都直接由驅(qū)動程序來完成.ApplicationJdbc
driver>database
enginedatabase最高的性能,通過自己的本地協(xié)議直接與數(shù)據(jù)庫引擎通信,具備在Internet裝配的能力.◆JDBCAPI;JDBC是一種低級API,是高級API的基礎(chǔ)JDBC是個“低級”接口,用于直接調(diào)用SQL命令.在這方面功能極佳,并比其它的數(shù)據(jù)庫連接API易于使用.高級接口是“對用戶友好的”接口,它使用的是一種更易理解和更為方便的API,這種API在幕后被轉(zhuǎn)換為諸如JDBC這樣的低級接口.核心的JDBCAPI在包java.sql中.JDBCAPI實現(xiàn)了四個基本的功能;建立與數(shù)據(jù)的連接,執(zhí)行SQL語句和處理執(zhí)行結(jié)果,關(guān)閉數(shù)據(jù)庫的連接.JDBCAPI實現(xiàn)了四個基本的功能:建立與數(shù)據(jù)的連接、執(zhí)行SQL語句和處理執(zhí)行結(jié)果,關(guān)閉數(shù)據(jù)庫的連接.◆Driver接口;JDBC驅(qū)動程序必須實現(xiàn)Driver接口,且該實現(xiàn)必須包含一個靜態(tài)的初始化塊,靜態(tài)的初始化塊使用DriverManager注冊自身一個新實例.PublicclassMeDriverimplementsjava.sql.Driver{static{java.sql.DriverManager.registerDiver(newMeDriver())}}當使用Class.forName(“com.acme.jdbc.AcmeJdbcDriver”),加載該驅(qū)動的實例時靜態(tài)的代碼塊將自動的注冊該驅(qū)動的實例.當DriverManager試圖建立某個數(shù)據(jù)庫連接時,DriverManager調(diào)用驅(qū)動程序的connect()方法,并把數(shù)據(jù)庫連接的URL傳遞給它.JDBCURL提供了一種標識數(shù)據(jù)庫的方法.可以使相應的驅(qū)動程序能識別該數(shù)據(jù)庫并與之建立連接.URL語法jdbc:<subprotocol>:<subname>JDBCURL中的協(xié)議總是jdbc,<subprotocol>子協(xié)議用來標識一種特定種類的數(shù)據(jù)庫連接機制,<subname>的內(nèi)容依賴于子協(xié)議,推薦的語法是://hostname:port/subsubname例;jdbc:mysql://localhost:3306/jpetstore?autoReconnect=true或jdbc:odbc:fredodbc子協(xié)議,是一種特殊情況.用于指定ODBC風格的數(shù)據(jù)資源名稱的URL而保留的,并具有下列特性;允許在子名稱(數(shù)據(jù)資源名稱)后指定任意多個屬性值.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對象表示一個數(shù)據(jù)源,并提供了該數(shù)據(jù)源的連接使用DataSource對象增加了應用程序的可移植性(使用邏輯名稱表示一個數(shù)據(jù)源,取代為驅(qū)動程序提供特定的連接信息)DataSource的屬性改變,應用程序代碼不需要改變.DataSource接口屬性:databaseName,dataSourceName,description,networkProtocol(int),password,portNumber,roleName,serverName,user.DataSource屬性遵循JavaBeans組件中屬性的命名約定,DataSource的實現(xiàn)必須為每個支持的屬性提供存取方法“getter”and“setter”,DataSource的屬性對于JDBC客戶端來說不是直接可訪問的.使用JNDIAPI,指定邏輯名來訪問DataSource對象,把邏輯名映射到相應的數(shù)據(jù)源.◆DriverManager類;負責管理JDBC驅(qū)動程序。使用JDBC驅(qū)動程序之前,必須先將驅(qū)動程序加載并向DriverManager注冊后才可以使用,同時提供方法來建立與數(shù)據(jù)庫的連接。通過指定的URL查找合適的驅(qū)動DriverManager關(guān)鍵方法registerDriver,getConnection(Stringurl),getConnection(Stringurl,java.util.Propertiesprop)◆Connection類:Connection對象代表與數(shù)據(jù)庫的連接。建立到底層數(shù)據(jù)源的連接有兩種DriverManager,DataSource連接過程包括所執(zhí)行的SQL語句和在該連接上所返回的結(jié)果。一個應用程序可與單個數(shù)據(jù)庫有一個或多個連接,或者可與許多數(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類:可以利用標準的SQL命令,對數(shù)據(jù)庫直接新增、刪除或修改操作
實現(xiàn)這種功能的類有三個:Statement、PreparedStatement,CallableStatement。創(chuàng)建Statements對象:通過Connection對象建立可創(chuàng)建多個Statements對象,供程序并發(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對數(shù)據(jù)庫進行新增、刪除和修改操作:introws=sb1.
executeUpdate("update簡X表setname='SEX'"+"whereNo=18")
;void
close()
throws
SQLException://結(jié)束Statement類對象對數(shù)據(jù)庫的聯(lián)機調(diào)用此方法表明已完成sql的執(zhí)行創(chuàng)建Statement的Connection對象關(guān)閉,將導致Statement對象關(guān)閉關(guān)閉Statement對象將會導致,由Statement對象獲得的ResultSet對象不在有效。◆PreparedStatement類
:是Statement的子類,在創(chuàng)建PreparedStatement時,會提供一個SQL語句。區(qū)別在于:PreparedStatement類對象會將傳入的SQL命令事先編好等待使用,當有單一的SQL指令比多次執(zhí)行時,用PreparedStatement類會比Statement類有效率。一般來說,使用PreparedStatement對象都是帶輸入?yún)?shù)的。例子(當前的表中有如下幾個字段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,"這是個測試的應用程序");insertStatement.setString(5,"備注");intresult=insertStatement.executeUpdate();con.close();
◆CallableStatement類:是Statement的子類為所有的DBMS提供了一種以標準形式調(diào)用儲存過程的方法。儲存過程儲存在數(shù)據(jù)庫中。這種調(diào)用是用一種換碼語法來寫的,有兩種形式:一種形式帶結(jié)果參,另一種形式不帶結(jié)果參數(shù)。結(jié)果參數(shù)是一種輸出(OUT)參數(shù),是已儲存過程的返回值。兩種形式都可帶有數(shù)量可變的輸入(IN參數(shù))、輸出(OUT參數(shù))或輸入和輸出(INOUT參數(shù))的參數(shù)。問號將用作參數(shù)的占位符。
例子:CallableStatementcstm=connection.prepareCall("{callreturn_student[?,?]}");cstm.setString(1,"8623034");cstm.registerOutparameter(2,Types.REAL);cstm.execute();floatgpa=cstm.getFloat(2);◆ResultSet類:在以下方面確定了ResultSet的功能:光標操作的方式對于底層數(shù)據(jù)源的改變?nèi)绾畏从车絉esultSet對象.有三種類型:TYPE_FORWARD_ONLY〔默認值〕TYPE_SCROLL_INSENSITIVETYPE_SCROLL_SENSITIVE.ResultSetConcurrency〔并發(fā)性〕:有兩個并發(fā)性層次:CONCUR_READ_ONLY〔默認值〕CONCUR_UPDATABLE。ResultSet持久性:holdability常量有:HOLD_CURSORS_OVER_COMMITCLOSE_CURSORS_AT_COMMIT◆光標移動:光標指向ResultSet對象的當前行,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度個人店面租賃合同租賃費用調(diào)整辦法
- 二零二五年度高層建筑消防改造勞務分包合同范本2篇
- 二零二五年度內(nèi)部承包合作協(xié)議范本12篇
- 《特種設備安全法》解析-浙江
- 酒店管理工作中的客戶服務
- 科技應用在小班教育中的探索計劃
- 二零二五年度個人租賃山地別墅及園林使用權(quán)合同4篇
- 二零二五年度寵物領(lǐng)養(yǎng)合同范本3篇
- 二零二五年度企業(yè)收入證明修訂協(xié)議3篇
- 二零二五年度離婚方式適用條件及技巧解析合同3篇
- 廣西南寧市2024-2025學年八年級上學期期末義務教育質(zhì)量檢測綜合道德與法治試卷(含答案)
- 2025年供應鏈管理培訓課件
- 2025中智集團招聘高頻重點提升(共500題)附帶答案詳解
- 《攜程旅行營銷環(huán)境及營銷策略研究》10000字(論文)
- 餐飲行業(yè)優(yōu)化食品供應鏈管理計劃
- 復工復產(chǎn)六個一方案模板
- 2024夏季廣東廣州期貨交易所招聘高頻難、易錯點500題模擬試題附帶答案詳解
- 浙江省2024年高考化學模擬試題(含答案)2
- 2024新人教七年級英語上冊 Unit 2 Were Family!(大單元教學設計)
- 中國醫(yī)美行業(yè)2024年度洞悉報告-德勤x艾爾建-202406
- 藥用植物種植制度和土壤耕作技術(shù)
評論
0/150
提交評論