版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Java Web應(yīng)用開(kāi)發(fā)基礎(chǔ)教程Java Web編程簡(jiǎn)介C/S和B/S 網(wǎng)站和系統(tǒng)靜態(tài)Web和動(dòng)態(tài)Web 核心是有沒(méi)有數(shù)據(jù)庫(kù)Java Web工作原理客戶端和Web服務(wù)器建立連接;客戶端發(fā)送HTTP請(qǐng)求;服務(wù)器端接收客戶端的HTTP請(qǐng)求,生成HTTP響應(yīng)回發(fā);服務(wù)器端關(guān)閉連接,客戶端解析響應(yīng),恢復(fù)頁(yè)面。Java Web相關(guān)技術(shù)面向?qū)ο筌浖こ誊浖?xiàng)目管理HTML + JavaScript JDBC + Servlet + JSP + JavaBean + XML數(shù)據(jù)庫(kù)(數(shù)據(jù)庫(kù)設(shè)計(jì)+MySQL實(shí)現(xiàn))設(shè)計(jì)模式(MVC)環(huán)境搭建需要的軟件運(yùn)行環(huán)境:JDK + MySQL + Tomcat輔助工具:Ec
2、lipse J2ee + UltraEdit + Visio + Navicat注意事項(xiàng)環(huán)境搭建是一個(gè)費(fèi)時(shí)的過(guò)程卻意義重大操作系統(tǒng)和軟件版本的不同會(huì)有一定的區(qū)別其它的輔助軟件可自行考慮安裝面向?qū)ο缶幊袒A(chǔ)OOP的三個(gè)主要概念:封裝、繼承、多態(tài)面向過(guò)程的程序設(shè)計(jì)語(yǔ)言當(dāng)中:程序=算法+數(shù)據(jù)結(jié)構(gòu)面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言當(dāng)中:程序=對(duì)象+消息對(duì)象:屬性+方法的軟件組合,是類的一個(gè)實(shí)例。封裝繼承多態(tài)Thanks for your attention!Java Web應(yīng)用開(kāi)發(fā)基礎(chǔ)教程MYSQL及JDBC初步第3章關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)RDBMS:Relational Database Management S
3、ystems,通過(guò)數(shù)據(jù)、關(guān)系和對(duì)數(shù)據(jù)的約束三者組成的數(shù)據(jù)模型來(lái)存放和管理數(shù)據(jù),以行和列的形式存儲(chǔ)數(shù)據(jù)。 MySQL:MySQL是一個(gè)開(kāi)放源碼的小型關(guān)聯(lián)式數(shù)據(jù)庫(kù)管理系統(tǒng),開(kāi)發(fā)者為瑞典MySQL AB公司。MySQL被廣泛地應(yīng)用在Internet上的中小型網(wǎng)站中。特點(diǎn)是:體積小、速度快、總體擁有成本低,且開(kāi)放源碼。MySQL初步安裝MySQL數(shù)據(jù)庫(kù)啟動(dòng)MySQL數(shù)據(jù)庫(kù)MySQL數(shù)據(jù)庫(kù)的使用MySQL常用命令JDBC概述及基本原理JDBC(Java Database Connectivity) 是一種用于執(zhí)行 SQL 語(yǔ)句的 Java API。它由一組用 Java 編程語(yǔ)言編寫的類和接口組成。JDB
4、C 為工具/數(shù)據(jù)庫(kù)開(kāi)發(fā)人員提供了一個(gè)標(biāo)準(zhǔn)的API,使他們能夠用純Java API 來(lái)編寫數(shù)據(jù)庫(kù)應(yīng)用程序。JDBC 的使用包括注冊(cè)驅(qū)動(dòng)程序獲取數(shù)據(jù)庫(kù)連接發(fā)送 SQL 語(yǔ)句處理結(jié)果連接工具類連接數(shù)據(jù)庫(kù)的代碼在一個(gè)項(xiàng)目中是需要經(jīng)常被使用的,在開(kāi)發(fā)一個(gè)大型項(xiàng)目時(shí),會(huì)有相當(dāng)一部分類需要與數(shù)據(jù)庫(kù)進(jìn)行連接,一旦某個(gè)連接參數(shù)發(fā)生變化,代碼更改的工作量將十分巨大,工具類的出現(xiàn)可以較好地解決這個(gè)問(wèn)題。JDBC 2.0最新版的JDBC 2.0 API被劃分為兩部分:JDBC 2.0核心APIJDBC 2.0標(biāo)準(zhǔn)擴(kuò)展API。java.sql包:JDBC2.0的核心API。javax.sql包:JDBC2.0的標(biāo)準(zhǔn)擴(kuò)展
5、API,其中增加了一些數(shù)據(jù)訪問(wèn)和數(shù)據(jù)源訪問(wèn)的重大功能,其中有一些是主要用來(lái)做企業(yè)計(jì)算的。JDBC2.0核心API JDBC 核心API 2.0 在以下幾個(gè)方面做了比較大的改進(jìn):修改了ResultSet 接口的方法,支持可以滾動(dòng)的記錄集和Java 語(yǔ)言來(lái)更新記錄集。新的Statement 接口支持批操作(Batch Update)。支持最新的SQL3 數(shù)據(jù)類型,特別是對(duì)BLOB、CLOB 等類型的數(shù)據(jù)提供了很好的支持。JDBC2.0核心API新的SQL 語(yǔ)句接口(Statement 接口)Statement 接口PreparesStatement 接口(繼承Statement 接口)以上兩個(gè)接口
6、分別由Connection 接口的createStatement( )方法和prepareStatement( ) 方法創(chuàng)建。JDBC2.0核心API創(chuàng)建Statement的方法public Statement createStatement( )public Statement createStatement(int resuleSetType, int resultSetConcurrency)resuleSetType:返回ResultSet的類型, 如是否允許數(shù)據(jù)庫(kù)游標(biāo)前后移動(dòng),是否對(duì)數(shù)據(jù)庫(kù)更新操作敏感等。resultSetConcurrency:返回的ResultSet 的協(xié)同模式,
7、如允許更新記錄集的數(shù)據(jù)或者僅僅只讀不能更新等。JDBC2.0核心APIClass.forName(“com.mysql.jdbc.Driver);Connection conn = DriverManager.getConnection(“);Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);上面的代碼創(chuàng)建了一個(gè)SQL 語(yǔ)句接口(Statement)的實(shí)例對(duì)象,該實(shí)例對(duì)象允許它執(zhí)行SQL 語(yǔ)句所返回的記錄集中的數(shù)據(jù)庫(kù)游標(biāo)前后移動(dòng),允許更新記錄集中的數(shù)據(jù)
8、。 JDBC2.0核心APIPrepareStatement接口表示預(yù)編譯的 SQL 語(yǔ)句的對(duì)象。 SQL 語(yǔ)句被預(yù)編譯并且存儲(chǔ)在 PreparedStatement 對(duì)象中。然后可以使用此對(duì)象高效地多次執(zhí)行該語(yǔ)句。 PrepareStatement中的SQL語(yǔ)句往往是不完整的,帶有多個(gè)問(wèn)號(hào)以表示缺省參數(shù),可以相應(yīng)的 setter 方法(seInt、setString 等等)指定與輸入?yún)?shù)的已定義 SQL 類型兼容的類型。JDBC2.0核心APIClass.forName(“com.mysql.jdbc.Driver);Connection conn = DriverManager.getCo
9、nnection(“);PrepareStatement prepstat = conn.prepareStatement(insert into table (name, age) values (?,?); prepstat.setString(1, “zhangsan); prepstat.setInt(2, 30); prepstat.executeUpdate( );上面的代碼是PrepareStatement使用的例子JDBC2.0核心APIStatement 、PreparedStatement 和CallableStatement 接口都支持?jǐn)?shù)據(jù)庫(kù)批操作。Statement 接
10、口中有如下方法:public void addBatch(String sql); 將SQL 語(yǔ)句添加到SQL 語(yǔ)句塊中public void clearBatch(); 將SQL 語(yǔ)句塊中的所有SQL 語(yǔ)句全部刪除public int executeBatch(); 將SQL 語(yǔ)句塊發(fā)送到數(shù)據(jù)庫(kù)服務(wù)器去并執(zhí)行,它返回的結(jié)果是一個(gè)整型數(shù)組。JDBC2.0核心API使用JDBC API 執(zhí)行數(shù)據(jù)庫(kù)批操作的方法是:1) 創(chuàng)建Statement 接口的實(shí)例對(duì)象2) 調(diào)用addBatch( )方法往SQL 語(yǔ)句塊中添加若干個(gè)SQL 語(yǔ)句3) 使用executeBatch( )方法完成數(shù)據(jù)庫(kù)批操作JDB
11、C2.0核心API在PreparedStatement 接口實(shí)現(xiàn)數(shù)據(jù)庫(kù)批操作的方法是1) 創(chuàng)建PreparedStatement 接口的實(shí)例對(duì)象2) 使用PreparedStatement 接口中定義的setXXX( )方法設(shè)定SQL 語(yǔ)句參數(shù)的值3) 使用addBatch( )方法添加批處理語(yǔ)句到語(yǔ)句塊4) 使用executeBatch( )方法執(zhí)行批處理語(yǔ)句JDBC2.0核心APIDatabaseMetaData接口:用于獲取有關(guān)數(shù)據(jù)庫(kù)的信息,如數(shù)據(jù)庫(kù)中所有的表名、系統(tǒng)函數(shù)、關(guān)鍵字、數(shù)據(jù)庫(kù)產(chǎn)品名和數(shù)據(jù)庫(kù)支持的JDBC驅(qū)動(dòng)程序名等。 DatabaseMetaData對(duì)象是通過(guò)Connecti
12、on接口的getMetaData()方法創(chuàng)建的。ResultSetMetaData接口:用于獲取結(jié)果集的結(jié)構(gòu),如結(jié)果集中列的類型和屬性信息。JDBC2.0核心API新的記錄集接口(ResultSet 接口)1、新定義了若干個(gè)常數(shù)用于指定游標(biāo)移動(dòng)的方向public static final int FETCH_FORWARD;public static final int FETCH_REVERSE;public static final int FETCH_UNKNOWN;public static final int TYPE_FORWARD_ONLY;public static final
13、 int TYPE_SCROLL_INSENSITIVE;public static final int TYPE_SCROLL_SENSITIVE;public static final int CONCUR_READ_ONLY;public static final int CONCUR_UPDATABLE; JDBC2.0核心APIFETCH_FORWORD: 指定處理記錄集中行的順序是由前到后,即從第一行開(kāi)始處理一直到最后一行。FETCH_REVERSE: 指定處理記錄集中行的順序是由后到前,即從最后一行開(kāi)始處理一直到第一行。FETCH_UNKNOWN: 不指定處理記錄集中行的順序,而
14、由JDBC 驅(qū)動(dòng)程序和數(shù)據(jù)庫(kù)系統(tǒng)決定。TYPE_FORWARD_ONLY: 指定數(shù)據(jù)庫(kù)游標(biāo)的移動(dòng)方向是向前,不允許向后移動(dòng),即只能使用ResultSet 接口的next()方法而不能使用previous()方法,否則會(huì)產(chǎn)生錯(cuò)誤。JDBC2.0核心APITYPE_SCROLL_INSENSITIVE: 指定數(shù)據(jù)庫(kù)游標(biāo)可以在記錄集中前后移動(dòng),并且當(dāng)前數(shù)據(jù)庫(kù)用戶獲取的記錄集對(duì)其他用戶的操作不敏感。TYPE_SCROLL_SENSITIVE: 指定數(shù)據(jù)庫(kù)游標(biāo)可以在記錄集中前后移動(dòng)并且當(dāng)前數(shù)據(jù)庫(kù)用戶獲取的記錄集對(duì)其他用戶的操作敏感。JDBC2.0核心APICONCUR_READ_ONLY: 該常數(shù)的作用
15、是指定當(dāng)前記錄集的協(xié)作方式(concurrency mode)為只讀。一旦使用了這個(gè)常數(shù),那么用戶就不可以更新記錄集中的數(shù)據(jù)。CONCUR_UPDATABLE: 該常數(shù)的作用是指定當(dāng)前記錄集的協(xié)作方式(concurrency mode)為可以更新。一旦使用了這個(gè)常數(shù),那么用戶就可以使用updateXXX()等方法更新記錄集中的數(shù)據(jù)。 JDBC2.0核心API2、ResultSet 接口提供了一整套的定位方法。public boolean absolute(int row); 該方法的作用是將記錄集中的某一行設(shè)定為當(dāng)前行,亦即將數(shù)據(jù)庫(kù)游標(biāo)移動(dòng)到指定的行。參數(shù)row 指定了目標(biāo)行的行號(hào),這是絕對(duì)的
16、行號(hào),由記錄集的第一行開(kāi)始計(jì)算。public boolean relative(int rows); 該方法的作用也是將記錄集中的某一行設(shè)定為當(dāng)前行,但是它的參數(shù)rows 表示目標(biāo)行相對(duì)于當(dāng)前行的行號(hào)。JDBC2.0核心API例子:當(dāng)前行是第3 行現(xiàn)在需要移動(dòng)到第5 行去,怎么處理?既可以使用absolute()方法,也可以使用relative()方法。rs.absolute(5); rs.relative(2);其中rs 代表ResultSet 接口的實(shí)例對(duì)象JDBC2.0核心API例子:當(dāng)前行是第5 行需要移動(dòng)到第3 行去代碼如下rs.absolute(3);rs.relative(-2)
17、;其中rs 代表ResultSet 接口的實(shí)例對(duì)象 傳遞給relative()方法的參數(shù)。如果是正數(shù),那么數(shù)據(jù)庫(kù)游標(biāo)向前移動(dòng);如果是負(fù)數(shù),那么數(shù)據(jù)庫(kù)游標(biāo)向后移動(dòng)。 JDBC2.0核心APIpublic boolean first(); 該方法的作用是將當(dāng)前行定位到數(shù)據(jù)庫(kù)記錄集的第一行。public boolean last(); 該方法的作用剛好和first()方法相反,是將當(dāng)前行定位到數(shù)據(jù)庫(kù)記錄集的最后一行。public boolean isFirst(); 該方法的作用是檢查當(dāng)前行是否記錄集的第一行。如果是,返回true ,否則返回false。public boolean isLast()
18、; 該方法的作用是檢查當(dāng)前行是否記錄集的最后一行。如果是,返回true, 否則返回false。JDBC2.0核心APIpublic void afterLast(); 該方法的作用是將數(shù)據(jù)庫(kù)游標(biāo)移到記錄集的最后,位于記錄集最后一行的后面。如果該記錄集不包含任何的行該方法不產(chǎn)生作用。public void beforeFirst(); 該方法的作用是將數(shù)據(jù)庫(kù)游標(biāo)移到記錄集的最前面,位于記錄集第一行的前面。如果記錄集不包含任何的行,該方法不產(chǎn)生作用。public boolean isAfterLast(); 該方法檢查數(shù)據(jù)庫(kù)游標(biāo)是否處于記錄集的最后面。如果是,返回true, 否則返回false。J
19、DBC2.0核心APIpublic boolean isBeforeFirst( ); 該方法檢查數(shù)據(jù)庫(kù)游標(biāo)是否處于記錄集的最前面。如果是,返回true, 否則返回false。public boolean next( ); 該方法的作用是將數(shù)據(jù)庫(kù)游標(biāo)向前移動(dòng)一位,使得下一行成為當(dāng)前行。當(dāng)剛剛打開(kāi)記錄集對(duì)象時(shí),數(shù)據(jù)庫(kù)游標(biāo)的位置在記錄集的最前面。public boolean previous( ); 該方法的作用是將數(shù)據(jù)庫(kù)游標(biāo)向后移動(dòng)一位,使得上一行成為當(dāng)前行。 JDBC2.0核心API3、ResultSet 接口添加了對(duì)行操作的支持使用JDBC API 2.0 不僅可以任意將數(shù)據(jù)庫(kù)游標(biāo)定位到記錄
20、集中的特定行,而且還可以使用ResultSet 接口新定義的一套方法更新當(dāng)前行的數(shù)據(jù)。在JDBC1.0中更新記錄集中某行的數(shù)據(jù),必須發(fā)送SQL 語(yǔ)句給數(shù)據(jù)庫(kù)以執(zhí)行UPDATE、DELETE、INSERT 等數(shù)據(jù)庫(kù)操作。JDBC2.0核心APIpublic boolean rowDeleted( ); 如果當(dāng)前記錄集的某行被刪除了,那么記錄集中將會(huì)留出一個(gè)空位。調(diào)用該方法,如果探測(cè)到空位的存在,那么就返回true; 如果沒(méi)有探測(cè)到空位的存在,就返回false 值。public boolean rowInserted( ); 如果當(dāng)前記錄集中插入了一個(gè)新行,該方法將返回true,否則返回false
21、。public boolean rowUpdated( ); 如果當(dāng)前記錄集的當(dāng)前行的數(shù)據(jù)被更新,該方法返回true, 否則返回false。JDBC2.0核心APIpublic void insertRow( ); 該方法將執(zhí)行插入一個(gè)新行到當(dāng)前記錄集的操作。public void updateRow( ); 該方法將更新當(dāng)前記錄集當(dāng)前行的數(shù)據(jù)。public void deleteRow( ); 該方法將刪除當(dāng)前記錄集的當(dāng)前行。 JDBC2.0核心APIpublic void updateString(int columnIndex, String x); 該方法更新當(dāng)前記錄集的當(dāng)前行某列的值
22、,該列的數(shù)據(jù)類型是String, 該方法的參數(shù)columnIndex 指定所要更新的列的列索引,第一列的列索引是1 ,以此類推。public void updateString(String columnName, String x); 該方法同上,其第一個(gè)參數(shù)是columnName 代表需要更新的列的列名而不是columnIndex。ResultSet 接口中還定義了很多個(gè)updateXXX( )方法都和上面的兩個(gè)方法相類似。JDBC2.0核心API向數(shù)據(jù)庫(kù)當(dāng)前記錄集插入新行的操作流程如下:1) 調(diào)用moveToInsertRow( )方法2) 調(diào)用updateXXX( )方法指定插入行各列
23、的值3) 調(diào)用insertRow( )方法往數(shù)據(jù)庫(kù)中插入新的行例:rs.moveToInsertRow( ); rs.updateString(name, herry);rs.updateInt(age, 30);rs.insertRow( ); JDBC2.0核心API更新數(shù)據(jù)庫(kù)中某個(gè)記錄的值(某行的值)的方法是:1、定位到需要修改的行2、使用相應(yīng)的updateXXX( )方法設(shè)定某行某列的新值,也可以使用cancelRowUpdates( )方法進(jìn)行回滾3、使用updateRow( )方法完成UPDATE 的操作例:rs.first( );rs.updateString(name,Stev
24、en); rs.updateRow( ); JDBC2.0核心API刪除記錄集中某行(亦即刪除某個(gè)記錄)的方法1、定位到需要修改的行(使用absolute() relative()等方法)2、使用deleteRow()方法 例: rs.first( ); rs.deleteRow( ); JDBC2.0核心API處理BLOB 和CLOB 類型的數(shù)據(jù)BLOB和CLOB 是SQL3 標(biāo)準(zhǔn)支持的新數(shù)據(jù)類型,主要用于保存大型超長(zhǎng)的數(shù)據(jù),如圖片視頻、CD 等。在JDBC API 2.0 中新定義了Blob 接口和Clob 接口,對(duì)這兩種類型數(shù)據(jù)的操作大大簡(jiǎn)化了。ResultSet 、PreparedSt
25、atement 等接口都定義了getBlob()、getClob()、setBlob()和setClob()方法,用以獲取或者設(shè)定BLOB 和CLOB 類型的數(shù)據(jù)。JDBC2.0核心APIBlob 接口的方法public InputStream getBinaryStream(); 該方法從Blob 數(shù)據(jù)中獲取一個(gè)輸入流 Clob 接口的方法public InputStream getAsciiStream(); 該方法從Clob 對(duì)象中返回一個(gè)輸入流。 JDBC2.0核心APIBLOB 和CLOB 數(shù)據(jù)類型的區(qū)別,BLOB 和CLOB 數(shù)據(jù)類型雖然都可以存儲(chǔ)大量超長(zhǎng)的數(shù)據(jù),但兩者是有區(qū)別的。
26、BLOB其實(shí)是Binary Large Object 的縮寫,BLOB 類型的數(shù)據(jù)以二進(jìn)制的格式保存于數(shù)據(jù)庫(kù)中,特別適用于保存程序文件圖片、視頻文件、音頻文件等。CLOB 是Character Large Object的縮寫,CLOB 類型的數(shù)據(jù)以Character 的格式保存于數(shù)據(jù)庫(kù)中,比較適合于保存比較長(zhǎng)的文本文件。Thanks for your attention!Java Web應(yīng)用開(kāi)發(fā)基礎(chǔ)教程XML第4章XML簡(jiǎn)介eXtensible Markup Language( 可擴(kuò)展 標(biāo)記語(yǔ)言)由萬(wàn)維網(wǎng)聯(lián)盟(World Wide Web Consortium,W3C)于1998年2月發(fā)布的推
27、薦標(biāo)準(zhǔn)。XML定義了一種文件格式,一種描述數(shù)據(jù)、保存數(shù)據(jù)的方法,使用這種格式的計(jì)算機(jī)數(shù)據(jù),可以在不同的計(jì)算機(jī)平臺(tái)和不同的計(jì)算機(jī)程序之間方便、平穩(wěn)、快速和無(wú)障礙地轉(zhuǎn)移和流動(dòng),從而大大提高了處理數(shù)據(jù)的效率和靈活性。XML簡(jiǎn)介XML是一種元語(yǔ)言,允許通過(guò)使用自定義的格式、標(biāo)識(shí),交換和處理數(shù)據(jù)庫(kù)可以理解的數(shù)據(jù);基于文本格式,以結(jié)構(gòu)化的方式描述各種類型的數(shù)據(jù),并在各種應(yīng)用之間發(fā)送和交換這些數(shù)據(jù);可以在不同的計(jì)算機(jī)平臺(tái)和不同的計(jì)算機(jī)程序間方便、平穩(wěn)的交換數(shù)據(jù),從而提高了處理數(shù)據(jù)的效率和靈活性。XML標(biāo)準(zhǔn)1998年2月W3C發(fā)布了XML推薦標(biāo)準(zhǔn)XML 1.0。2004年2月4日XML 1.1推薦標(biāo)準(zhǔn)正式發(fā)布
28、。但目前推薦遵循的是W3C于2000年10月6日發(fā)布的XML 1.0標(biāo)準(zhǔn)。 XML的進(jìn)一步認(rèn)識(shí)XML繼承了SGML的許多特性,它有SGML 20%的復(fù)雜性,卻有SGML 80%的功能。XML描述的是結(jié)構(gòu)和語(yǔ)義,而不是格式化 XML將數(shù)據(jù)內(nèi)容和顯示格式相分離XML是元標(biāo)記語(yǔ)言 XML是自描述語(yǔ)言XML是獨(dú)立于平臺(tái)的 XML 不進(jìn)行任何操作XML具有良好的保值性 XML的用途XML是被設(shè)計(jì)用來(lái)存儲(chǔ)數(shù)據(jù)、攜帶數(shù)據(jù)和交換數(shù)據(jù)的,它不是為了顯示數(shù)據(jù)而設(shè)計(jì)的。XML的主要用途包括以下幾個(gè)方面:從HTML中分離數(shù)據(jù)。 交換數(shù)據(jù) 共享數(shù)據(jù) 存儲(chǔ)數(shù)據(jù) 充分利用數(shù)據(jù) 創(chuàng)建新的語(yǔ)言:MusicML 、MathML
29、、CML 、SVG 、WML 、SMIL 等 XML的基本結(jié)構(gòu)標(biāo)記語(yǔ)言的基本特點(diǎn):在表示數(shù)據(jù)內(nèi)容的基礎(chǔ)上,插入各種具有明確含義的標(biāo)記,以起到對(duì)數(shù)據(jù)內(nèi)容進(jìn)行解釋、說(shuō)明、限制等作用。標(biāo)記的表示方法:,一般成對(duì)使用。標(biāo)記的命名規(guī)則 名稱的開(kāi)頭是字母或下劃線“_”;標(biāo)記名稱中不能有空格;名稱的字符串只能包含英文字母、數(shù)字、“_”、“-”、“.”等字符。一個(gè)完整的XML實(shí)例李華男1978.9.1292此學(xué)生愛(ài)好編程,以下是它編的代碼!CDATA function f1(a,b) if (name=cai & a 0) return 1 else return 0 Visual Basic & C#序言文
30、檔元素根元素屬性元素注釋文檔類型聲明XML聲明文本預(yù)處理指令CDATA實(shí)體XML聲明XML 聲明通常在 XML 文檔的第一行出現(xiàn)。XML 聲明不是必選項(xiàng),但是如果使用 XML聲明,則必須在文檔的第一行,前面不得包含任何其他內(nèi)容或空白。文檔映射中的 XML 聲明包含下列內(nèi)容:(1)版本聲明:(2)編碼聲明:(3)獨(dú)立聲明:XML元素XML技術(shù)基礎(chǔ).開(kāi)始標(biāo)記結(jié)束標(biāo)記內(nèi)容空元素TITLE空元素TITLEXML元素1、命名規(guī)則:XML元素命名與Java、C命名規(guī)則類似。2、XML的根元素:每個(gè)XML文檔必須有且只有一個(gè)根元素;根是一個(gè)完全包括文檔中其他所有元素的元素。3、元素是可以擴(kuò)展的,可以攜帶更多
31、的信息。4、元素之間是有關(guān)系的。5、XML元素的內(nèi)容 很豐富。XML元素 實(shí)體實(shí)體相當(dāng)于內(nèi)容占位符,用于內(nèi)容轉(zhuǎn)義,實(shí)體的主要作用有代替一些鍵盤無(wú)法輸入的字符代替一些與XML規(guī)范保留字相沖突的字符代替大段的重復(fù)數(shù)據(jù)代替一些不適合在XML文檔中出現(xiàn)的數(shù)據(jù)預(yù)定義實(shí)體:XML解析器已經(jīng)定義了的實(shí)體,用戶通過(guò)實(shí)體引用將實(shí)體插入到文檔中,實(shí)體引用是將實(shí)體名稱包括在符號(hào) & 和分號(hào) ; 之間。XML元素 實(shí)體預(yù)定義實(shí)體預(yù)定義實(shí)體符號(hào)'CDATA當(dāng)XML文檔元素內(nèi)容中包含大量、&或者“字符時(shí) function f1(a,b) if (name=“cai” & a 0) return 1 else r
32、eturn 0 function f1(a,b) if (name=cai& a 0) return 1 else return 0 CDATA用CDATA節(jié)括起來(lái),則不需要使用替代字符 !CDATA function f1(a,b) if (name=“cai“ & a CDATACDATA節(jié)用于把整段包含大量、&或者“的文本解釋為純字符數(shù)據(jù)而不是標(biāo)記的情況。CDATA節(jié)中的所有字符都會(huì)被當(dāng)作元素字符數(shù)據(jù)的常量部分,而不是XML標(biāo)記。在CDATA部件之內(nèi)的文本會(huì)被解析器忽略。 語(yǔ)法格式:CDATACDATA注意事項(xiàng):可以輸入任意字符(除或者”之間沒(méi)有空格或者換行符??梢岳肅DATA標(biāo)記將含
33、有非法字符的文本括起來(lái)。問(wèn)題的提出兩個(gè)基本的概念格式良好的 XML文檔:符合語(yǔ)法的XML文檔稱為結(jié)構(gòu)良好的XML文檔 。有效XML文檔:內(nèi)容結(jié)構(gòu)嚴(yán)格遵守它自身的標(biāo)記說(shuō)明,能通過(guò)自身的語(yǔ)法檢查;通過(guò)DTD驗(yàn)證的XML文檔稱為有效的XML文檔 。格式良好的XML文檔與有效的XML文檔的區(qū)別?有效地XML文檔肯定是格式良好的XML文檔。反過(guò)來(lái),一個(gè)格式良好的XML文檔不一定是有效的XML文檔。有效的XML文檔遵守DTD或Schema定義的規(guī)則。什么是DTD?文檔類型定義-Document Type DefinitionDTD用來(lái)描述XML文檔的結(jié)構(gòu),一個(gè)DTD文檔包含:元素(ELEMENT)的定義規(guī)
34、則元素之間的關(guān)系規(guī)則屬性(ATTLIST)的定義規(guī)則可使用的實(shí)體(ENTITY)或符號(hào)(NOTATION)規(guī)則DTD與XML文檔實(shí)例的關(guān)系類與對(duì)象數(shù)據(jù)庫(kù)表結(jié)構(gòu)與數(shù)據(jù)記錄什么是XML Schema?Schema的基本思想就是為XML文檔制定一種模式。從本質(zhì)上說(shuō),DTD與XML Schema的作用是相同的,它們以各自不同的方式來(lái)幫助XML的開(kāi)發(fā)者來(lái)描述XML文檔的結(jié)構(gòu)和數(shù)據(jù),都用于XML文檔的有效性驗(yàn)證。Schema與DTD的關(guān)系Schema與DTD的作用相同,它們各自以不同的方式來(lái)描述XML文檔結(jié)構(gòu),都用于文檔驗(yàn)證。Schema囊括了DTD文件所能實(shí)現(xiàn)的全部功能,同時(shí)它也是一個(gè)完全規(guī)范的XML文
35、檔。Schema正在逐步取代DTD成為驗(yàn)證XML文檔合法性的新標(biāo)準(zhǔn)。XML Schema簡(jiǎn)介Schema與DTD的比較DTD使用EBNF語(yǔ)法,Schema基于XML語(yǔ)法。Schema可以像其他XML文檔一樣被解析和處理;DTD描述的是XML文件的結(jié)構(gòu),而非元素內(nèi)容,因此DTD不能進(jìn)行數(shù)據(jù)有效性檢查;例如:文字; Schema大大擴(kuò)充了數(shù)據(jù)類型,可以自定義數(shù)據(jù)類型;Schema提供一個(gè)可擴(kuò)充的內(nèi)容模式,而DTD擴(kuò)展性差;Schema可對(duì)整個(gè)XML文檔或文檔局部進(jìn)行驗(yàn)證,而DTD缺乏這種靈活性;Schema支持名稱空間,DTD不支持命名空間。XML Schema的特點(diǎn)XML Schema文檔本身就
36、是XML文檔,因此遵守XML的語(yǔ)法規(guī)則;XML Schema是用一套預(yù)先規(guī)定的XML元素和屬性創(chuàng)建的;在XML Schema需要完成的任務(wù):定義可以出現(xiàn)在文檔中的元素;定義可以出現(xiàn)在文檔中的屬性;定義元素下的子元素及子元素的順序、數(shù)量;定義元素和屬性的數(shù)據(jù)類型;XML Schema兩種模式兩種模式:W3C XML Schema 和Microsoft XML SchemaMicrosoft版本的XML schema叫做XDR(XML Data Reduced),它基于XML標(biāo)準(zhǔn)提議中的簡(jiǎn)化集合,XDR是一個(gè)專有規(guī)范,但它被相當(dāng)廣泛的采用。W3C的XML Schema叫XSD(XML Schema
37、 Definition Language),它是一個(gè)比XDR更廣泛的規(guī)范,并且它有不可否認(rèn)的非專有的優(yōu)點(diǎn)。命名空間Namespaces翻譯為名字空間或命名空間。當(dāng)我們?cè)谝粋€(gè)XML文檔中使用他人的或者多個(gè)DTD文件,就會(huì)出現(xiàn)這樣的矛盾:因?yàn)閄ML中標(biāo)識(shí)都是自己創(chuàng)建的,在不同的DTD文件中,標(biāo)識(shí)名可能相同但表示的含義不同,這就可能引起數(shù)據(jù)混亂。例如:在一個(gè)文檔中wood table中表示桌子,而在另一個(gè)文檔namelist中表示表格。如果我需要同時(shí)處理這兩個(gè)文檔,就會(huì)發(fā)生名字沖突。命名空間XML命名空間是XML解決元素多義性和名字沖突問(wèn)題的方案。W3C組織的推薦用書對(duì)XML命名空間的解釋是:“XM
38、L命名空間是命名的匯集,它由URI(統(tǒng)一資源標(biāo)識(shí))確定,在XML文件中作為元素標(biāo)識(shí)和屬性名使用”。命名空間是名稱上相關(guān)的一組名稱的匯集,在同一空間中每一個(gè)名稱都必須唯一。命名空間表示了名稱的來(lái)源和使用范圍。通過(guò)命名空間可以區(qū)分來(lái)自不同的XML應(yīng)用但具有相同名稱的標(biāo)識(shí),可以把來(lái)自某種XML應(yīng)用的相關(guān)元素和屬性集合在一起,以方便軟件識(shí)別和處理。命名空間namespaces通過(guò)給標(biāo)識(shí)名稱加一個(gè)網(wǎng)址(URL)定位的方法來(lái)區(qū)別這些名稱相同的標(biāo)識(shí)。命名空間一般用屬性xmlns來(lái)聲明,聲明的語(yǔ)法如下: xmlns:命名空間屬性名,聲明命名空間必需的屬性。prefix:命名空間的前綴,它的值不能為XML。在引
39、用此命名空間中的名稱時(shí),需要在名稱前加“prefix: ”。 URI:統(tǒng)一資源標(biāo)示符(Uniform Resource Identifier),是一個(gè)標(biāo)識(shí)網(wǎng)絡(luò)資源的字符串。最普通的URI應(yīng)該是統(tǒng)一資源定位符(URL),URL用于標(biāo)識(shí)網(wǎng)絡(luò)主機(jī)的地址。另一個(gè)不常用的URI是通用資源名字(URN),URN一個(gè)相對(duì)固定的地址。命名空間引用此名空間中的元素、屬性的方法: 前綴名:元素名 或 前綴名:屬性名聲明時(shí)若前綴名省略,則聲明的是缺省的空間,引用缺省名空間中的元素、屬性時(shí)可不加前綴名;默認(rèn)的命名空間的聲明語(yǔ)法格式為:XML Schema的內(nèi)容XML Schema 是用一套預(yù)先規(guī)定的XML元素和屬性創(chuàng)
40、建的,這些元素和屬性定義了XML文檔的結(jié)構(gòu)和內(nèi)容模式,指定了每個(gè) Schema 元素或?qū)傩缘暮戏ㄓ猛?,如果違反了這些規(guī)則,解析器就會(huì)拒絕解析該 Schema 以及任何與它相聯(lián)系的XML文檔。它主要包括以下內(nèi)容:定義可以出現(xiàn)在文檔里的元素;定義元素之間的關(guān)系;定義可以出現(xiàn)在文檔里的屬性;定義元素或?qū)傩缘臄?shù)據(jù)類型。連接Schema 到XML有目標(biāo)命名空間:無(wú)目標(biāo)命名空間:此處為targetNamespace,與后面的模式文檔的文件名以空格分隔XML應(yīng)用程序接口W3C以及XML_DEV郵件列表的成員分別提出了兩個(gè)訪問(wèn)XML的標(biāo)準(zhǔn)應(yīng)用程序接口:DOM和SAX。DOM:文檔對(duì)象模型。DOM是HTML和X
41、ML文檔的編程接口規(guī)范,它與平臺(tái)和語(yǔ)言是無(wú)關(guān)的,該模型定義了HTML和XML文件在內(nèi)存中文檔結(jié)構(gòu),提供了對(duì)HTML和XML文件的訪問(wèn)、存取方法。利用DOM規(guī)范,可以實(shí)現(xiàn)DOM文檔和XML之間的相互轉(zhuǎn)換,對(duì)相應(yīng)DOM文檔的內(nèi)容進(jìn)行遍歷或其他操作。DOM DOM處理文檔的時(shí)候,實(shí)際上是先把整個(gè)文檔讀入,行成一棵文檔樹(shù),然后用戶就可以針對(duì)這個(gè)樹(shù)形的文檔模型進(jìn)行各種元素操作了。優(yōu)點(diǎn):自然易懂,文檔中的數(shù)據(jù)和節(jié)點(diǎn)一目了然。缺點(diǎn):針對(duì)較大的文檔,不僅消耗很多的內(nèi)存而且處理速度很慢。當(dāng)提及DOM的時(shí)候,不僅僅指代的是DOM文檔對(duì)象模型,而且也包含處理這個(gè)模型的一系列API。SAXSAX(Simple API
42、 for XML)也是解析XML的一種規(guī)范,由一系列接口組成,但不是W3C推薦的標(biāo)準(zhǔn),SAX是公開(kāi)的、開(kāi)放源代碼的,最新的版本是SAX2.0。SAX解析器是一種基于事件的解析器,核心是事件處理模式,圍繞事件源以及事件處理器來(lái)工作的。一個(gè)可以產(chǎn)生事件的對(duì)象被稱為事件源,可以針對(duì)事件產(chǎn)生響應(yīng)的對(duì)象被稱為事件處理器。事件和事件處理器是通過(guò)在事件源中的事件處理器注冊(cè)的方法連接的。SAX利用SAX解析器解析XML文件需要經(jīng)過(guò)以下步驟: 實(shí)例化一個(gè)SAXParserFactory對(duì)象:SAXParserFactory factory = SAXParserFactory.newInstance();通過(guò)f
43、actory獲得一個(gè)SAXParser對(duì)象,即SAX解析器:SAXParser saxParser = factory.newSAXParser();saxParser對(duì)象調(diào)用parse方法解析XML文件: saxParser.parse(File file,DefaultHandler dh)SAX在SAX API中有兩個(gè)包:org.xml.sax定義SAX的基礎(chǔ)接口,如XMLReader、ContentHandler、ErrorHandler、DTDHandler、EntityResolver等。org.xml.sax.helper提供了一些方便開(kāi)發(fā)人員使用的幫助類,如缺省實(shí)現(xiàn)所有處理器接
44、口的幫助類DefaultHandler、方便開(kāi)發(fā)人員創(chuàng)建XMLReader的XMLReaderFactory類等。SAXDefaultHandler類或它的子類的對(duì)象稱為SAX解析器的事件處理器。事件處理器可以接收解析器報(bào)告的所有事件,處理所發(fā)現(xiàn)的數(shù)據(jù)。DefaultHandler類實(shí)現(xiàn)了ContentHandler、DTDHandler、EntityResolver和ErrorHandler接口。DefaultHandler類實(shí)現(xiàn)了上述4個(gè)接口,包含了這4個(gè)接口的所有方法,方法都是一種空實(shí)現(xiàn)在編寫事件處理程序時(shí),可以不用直接實(shí)現(xiàn)這四個(gè)接口,而直接繼承DefaultHandler類,然后重寫需
45、要的方法。SAXSAX解析器的核心是事件處理機(jī)制,當(dāng)SAX解析器調(diào)用parse()方法解析XML文件時(shí),事件處理器會(huì)根據(jù)所產(chǎn)生的事件調(diào)用相應(yīng)的方法來(lái)處理發(fā)現(xiàn)的數(shù)據(jù)。在編寫程序時(shí),需要使用DefaultHandler類的子類創(chuàng)建一個(gè)事件處理器,當(dāng)處理器對(duì)報(bào)告的事件不感興趣時(shí),就直接調(diào)用父類的方法,采用默認(rèn)的處理方法,當(dāng)處理器對(duì)報(bào)告的事件感興趣時(shí),子類可以重寫父類的某些方法,調(diào)用重寫的方法,以便處理器可以具體的處理解析器報(bào)告的數(shù)據(jù)。SAX在org.xml.sax包的HandlerBase類中定義了SAX解析器解析XML文件所產(chǎn)生的事件類型。常用的事件類型有:startDocument:表示文檔的開(kāi)
46、始endDocument:表示文檔的結(jié)束startElement:表示標(biāo)記的開(kāi)始endElement:表示標(biāo)記的結(jié)束characters:文本內(nèi)容事件ignorableWhitespace:表示空白事件warning、error和fatalError:表示錯(cuò)誤事件SAX文件的開(kāi)始與結(jié)束當(dāng)解析器開(kāi)始解析XML文件時(shí),就會(huì)報(bào)告“文件開(kāi)始”事件給事件處理器,然后再陸續(xù)地報(bào)告其他的事件,比如:“開(kāi)始標(biāo)記”,“文本事件”,最后再報(bào)告“文件結(jié)束”事件。解析器報(bào)告“文件開(kāi)始”事件,事件處理器就會(huì)調(diào)用startDocument()方法。解析器報(bào)告“文件結(jié)束”事件,事件處理器會(huì)調(diào)用endDocument()方法
47、,解析器在解析XML 文件的過(guò)程中,只能報(bào)告一次“文件開(kāi)始”和“文件結(jié)束”事件。SAX開(kāi)始標(biāo)記與結(jié)束標(biāo)記當(dāng)解析器發(fā)現(xiàn)一個(gè)標(biāo)記開(kāi)始時(shí),就將所發(fā)現(xiàn)的數(shù)據(jù)封裝為一個(gè)“開(kāi)始標(biāo)記”事件,并報(bào)告該事件處理器,事件處理器就會(huì)知道發(fā)生的事件,然后調(diào)用startElement( )方法對(duì)發(fā)現(xiàn)的數(shù)據(jù)處理。事件處理器調(diào)用完startElement方法后,將陸續(xù)地收到解析器報(bào)告的其他事件,最后一定會(huì)報(bào)告該標(biāo)記的“標(biāo)記結(jié)束”事件,這時(shí)事件處理器會(huì)調(diào)用endElement( )方法對(duì)發(fā)現(xiàn)的數(shù)據(jù)做出處理。SAX文本數(shù)據(jù)XML文件中的標(biāo)記的內(nèi)容可以有文本數(shù)據(jù),當(dāng)解析器解析這些數(shù)據(jù)時(shí),就報(bào)告“文本數(shù)據(jù)”事件給處理器,事件處理器
48、調(diào)用public void characters(char,int start,int length)方法對(duì)解析的數(shù)據(jù)做出處理。參數(shù)字符數(shù)組ch中存放的就是解析的文本數(shù)據(jù)start是數(shù)組ch中存放字符的起始位置length是存放字符的個(gè)數(shù)。SAX處理空白要處理空白,只需要在處理器中重寫ignorableWhitespace方法即可。解析器在遇到空白時(shí),就會(huì)向處理器報(bào)告ignorableWhitespace事件,事件處理器調(diào)用下面的方法處理:void ignorableWhitespace(char ch,int start,int length),而不去調(diào)用characters方法。但前提是X
49、ML文件必須是一個(gè)有效的XML文件。SAX名稱空間名稱空間的目的是有效的區(qū)分名字相同的標(biāo)記,當(dāng)二個(gè)標(biāo)記的名字相同時(shí),他們可能通過(guò)屬于不同的名稱空間來(lái)區(qū)分。例:你好解析器報(bào)告事件的順序如下: 名稱空間開(kāi)始-開(kāi)始標(biāo)記-文本數(shù)據(jù)“-結(jié)束標(biāo)記-名稱空間結(jié)束 SAX處理錯(cuò)誤SAX解析器默認(rèn)地檢查XML是否規(guī)范的,如果讓SAX解析器檢查XML文件是否有效,需要在獲得SAX解析器之前調(diào)用factory.setValidating(true)設(shè)置。當(dāng)出現(xiàn)錯(cuò)誤時(shí)會(huì)調(diào)用下面的方法進(jìn)行處理。public void warning(SAXException e) throws SAXException;public
50、void error(SAXException e) throws SAXException;public void fatalError(SAXException e) throws SAXExceptionSAXDOM與SAX的比較通過(guò)DOM樹(shù),應(yīng)用程序可以對(duì)XML文檔進(jìn)行隨機(jī)訪問(wèn)。當(dāng)XML文檔比較大或者文檔結(jié)構(gòu)比較復(fù)雜時(shí),對(duì)內(nèi)存的需求就比較高。SAX分析器通過(guò)事件處理函數(shù)實(shí)現(xiàn)對(duì)XML文檔的訪問(wèn),采用順序訪問(wèn)機(jī)制,對(duì)于事件處理函數(shù)本身,要由應(yīng)用程序自己來(lái)實(shí)現(xiàn)。例子:database.conf.xml文件的讀取Thanks for your attention!Java Web應(yīng)用開(kāi)發(fā)基礎(chǔ)教
51、程SERVLET第5章什么是ServletServlet是一種獨(dú)立于操作系統(tǒng)平臺(tái)和網(wǎng)路傳輸協(xié)議的服務(wù)器端的Java應(yīng)用程序,由包含Java虛擬機(jī)的Web服務(wù)器加載和執(zhí)行的。 Servlet運(yùn)行在包含有Web容器的Web服務(wù)器上,Web容器負(fù)責(zé)管理servlet并完成初始化,Web容器可以管理多個(gè)servlet實(shí)例。Web容器會(huì)將客戶端的請(qǐng)求傳給servlet,并且將servlet的響應(yīng)返回給客戶端。Web容器在servlet結(jié)束時(shí)終結(jié)該servlet,當(dāng)服務(wù)器關(guān)閉時(shí),Web容器在內(nèi)存中移除servlet。Servlet工作原理及過(guò)程Servlet工作原理及過(guò)程Servlet的基本流程客戶端(一
52、般是Web瀏覽器)通過(guò)HTTP提出請(qǐng)求。Web服務(wù)器接收該請(qǐng)求并將其發(fā)給servlet。servlet將接收該HTTP請(qǐng)求并執(zhí)行某種處理。servlet將向Web服務(wù)器返回應(yīng)答。Web服務(wù)器將從servlet收到的應(yīng)答發(fā)送給客戶端。注意:由于servlet是在服務(wù)器上執(zhí)行,相關(guān)的安全性的問(wèn)題并不需實(shí)現(xiàn)。例如:Web服務(wù)器有防火墻保護(hù),那么servlet也得到防火墻的保護(hù)。Servlet的基本結(jié)構(gòu)import java.io.*;import javax.servlet.*;import javax.servlet.http.*;public class SomeServlet extends
53、HttpServlet public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException / 使用“request”讀取與客戶端請(qǐng)求有關(guān)的信息和表單數(shù)據(jù) / 使用“response”指定HTTP應(yīng)答狀態(tài)代碼和應(yīng)答頭 PrintWriter out = response.getWriter(); / 使用 out把應(yīng)答內(nèi)容發(fā)送到瀏覽器(doPost方法未寫出,形式與doGet方法類似)為什么要使用servletServlet是平臺(tái)無(wú)關(guān)的。
54、采用Java編寫并可以很好地替代公共網(wǎng)關(guān)接口(CGI)腳本。Servlet是持久的。只需Web服務(wù)器加載一次,就可以在不同請(qǐng)求之間保持服務(wù)(例如一次數(shù)據(jù)庫(kù)連接)。Servlet是可擴(kuò)展的。Java語(yǔ)言的健壯性、面向?qū)ο蠹皵U(kuò)展性賦予了servlet同樣的特征。Servlet是安全的。從外界調(diào)用servlet的唯一方法就是通過(guò)Web服務(wù)器,Web服務(wù)器的防火墻同樣會(huì)保護(hù)servlet。Setvlet可以在多種多樣的客戶機(jī)上使用。Servlet容器Servlet容器為servlet提供了運(yùn)行環(huán)境,servlet的運(yùn)行必須依賴于servlet容器,servlet不能獨(dú)立于容器獨(dú)立運(yùn)行。Tomcat是一
55、個(gè)免費(fèi)的、開(kāi)源的Servlet容器,支持最新的Servlet和JSP規(guī)范。 Servlet是一種動(dòng)態(tài)加載的模塊,為來(lái)自Web服務(wù)器的請(qǐng)求提供服務(wù),它完全運(yùn)行在Java虛擬機(jī)上。Servlet容器負(fù)責(zé)處理客戶請(qǐng)求、把請(qǐng)求傳送給Servlet并把結(jié)果返回給客戶。Servlet容器Servlet生命周期:1、Servlet容器創(chuàng)建Servlet的一個(gè)實(shí)例2、容器調(diào)用該實(shí)例的init( )方法3、如果容器對(duì)該Servlet有請(qǐng)求,則調(diào)用此實(shí)例的service( )方法4、容器在銷毀本實(shí)例前調(diào)用它的destroy( )方法5、銷毀并標(biāo)記該實(shí)例以供作為垃圾收集TomcatTomcat的安裝、啟動(dòng)和關(guān)閉To
56、mcat主要目錄結(jié)構(gòu)bin: 存放二進(jìn)制命令等,包含啟動(dòng)/關(guān)閉腳本等conf: 存放不同的配置文件,server.xml、web.xml等doc: 包含各種tomcat文檔lib: 包含tomcat使用的jar文件logs: tomcat擺放日志文件(log file)的地方Webapps: 包含所部署的web應(yīng)用項(xiàng)目TomcatTomcat會(huì)創(chuàng)建如下目錄:work: tomcat自動(dòng)生成,放置tomcat運(yùn)行時(shí)的臨時(shí)文件(如編譯后的JSP文件),我們?cè)谡{(diào)試JSP程序時(shí),要用到這些編譯成Servlet的文件,如在tomcat運(yùn)行時(shí)刪除此目錄。JSP頁(yè)面將不能運(yùn)行。classes: 你可以創(chuàng)建此
57、目錄來(lái)添加一些附加的類到類路徑中,任何你加到此目錄中的類都可在tomcat的類路徑中找到自身。TomcatTomcat的配置文件1. ./conf/server.xml Tomcat的全局配置文件 提供Tomcat組件的初始配置說(shuō)明Tomcat的結(jié)構(gòu)和含義,使得Tomcat通過(guò)實(shí)例化組件完成啟動(dòng)及自身構(gòu)建2 ./conf/web.xml 在Tomcat中配置不同的關(guān)系環(huán)境第一個(gè)Servlet 大多數(shù)Servlet都利用PrintWirte對(duì)象的Println語(yǔ)句輸出HTML,主要包括步驟:告訴瀏覽器發(fā)送的是HTML。通過(guò)設(shè)置Content-Type應(yīng)答頭完成。在HttpServletRespo
58、nse的setHeader方法可以完成設(shè)置,同時(shí),在Servlet API也提供了一個(gè)專用的方法setContentType。修改println語(yǔ)句內(nèi)容構(gòu)造出合法的HTML頁(yè)面。 通過(guò)out.println語(yǔ)句構(gòu)造出響應(yīng)的HTML頁(yè)面。讓我們來(lái)看一個(gè)例子Servlet的生命周期Servlet從產(chǎn)生到結(jié)束的流程產(chǎn)生Servlet,加載到Servlet Engine中,調(diào)用init( ) 進(jìn)行初始化 以多線程的方式處理來(lái)自Client 的請(qǐng)求調(diào)用destroy( )來(lái)銷毀Servlet,進(jìn)行垃圾收集 Servlet 生命周期的定義,包括如何加載、實(shí)例化、初始化、處理客戶端請(qǐng)求以及如何被刪除。這個(gè)生
59、命周期由javax.servlet.Servlet 接口的init ( )、service( )和destroy( )方法表達(dá)。Session狀態(tài)持久化技術(shù)HTTP協(xié)議是一種無(wú)狀態(tài)的協(xié)議,客戶端每打開(kāi)一個(gè)Web頁(yè)面,它就會(huì)與服務(wù)器建立一個(gè)新連接,發(fā)送新請(qǐng)求到服務(wù)器,服務(wù)器處理請(qǐng)求將該請(qǐng)求返回給客戶端,服務(wù)器不記錄任何客戶端信息,這樣每次客戶端發(fā)送的請(qǐng)求都是獨(dú)立的,這樣的方式在現(xiàn)實(shí)中是不可用的。Session(會(huì)話)恰恰是一種能將信息保存在服務(wù)器端的技術(shù),它能記錄特定的客戶端到服務(wù)器的一系列請(qǐng)求,以實(shí)現(xiàn)特定應(yīng)用目的與系統(tǒng)的多次請(qǐng)求交互。 會(huì)話跟蹤技術(shù)Cookie實(shí)現(xiàn)會(huì)話跟蹤cookie是一小塊可
60、以嵌入在HTTP請(qǐng)求和應(yīng)答中的數(shù)據(jù)。典型情況下,Web服務(wù)器將cookie值嵌入到應(yīng)答的頭文件中,而瀏覽器則在其以后的請(qǐng)求中都將攜帶同樣的cookie。cookie的信息中可以有一部分用來(lái)存儲(chǔ)會(huì)話ID,這個(gè)ID被服務(wù)器用來(lái)將某些HTTP請(qǐng)求綁定在會(huì)話中。cookie由瀏覽器保存在客戶端,通常保存在一個(gè)名為cookie.txt的文件。cookie還含有一些其他屬性,諸如可選的注釋、版本號(hào)以及最長(zhǎng)生存期。會(huì)話跟蹤技術(shù)URL重寫實(shí)現(xiàn)會(huì)話跟蹤:Servlet創(chuàng)建的所有鏈接的重定向都必須將會(huì)話ID編碼為URL的一部分。在服務(wù)器指定的URL編碼的方法中,最可能的一種是給URL加入一些參數(shù)或者附加的路徑信息
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度物流倉(cāng)儲(chǔ)用地承包租賃合同(2024版)4篇
- 2025年度新型儲(chǔ)藏室與車位投資合作合同模板4篇
- 2025年度新能源汽車充電樁承債式公司股權(quán)轉(zhuǎn)讓合同4篇
- 2025年度文化演藝場(chǎng)館承包經(jīng)營(yíng)合同4篇
- 2025年度土地整治與生態(tài)修復(fù)項(xiàng)目承包合同4篇
- 2024通信線路施工及改造分包合同范本3篇
- 2025年度生態(tài)環(huán)保工程承包商工程款支付擔(dān)保協(xié)議4篇
- 2025年度歷史文化街區(qū)保護(hù)項(xiàng)目房屋拆遷補(bǔ)償合同2篇
- 2025年度住宅小區(qū)配套停車場(chǎng)車位代理銷售協(xié)議4篇
- 2025年度星級(jí)酒店廚師團(tuán)隊(duì)合作協(xié)議4篇
- 土壤農(nóng)化分析課件
- 小區(qū)大型團(tuán)購(gòu)活動(dòng)策劃
- NEC(新生兒壞死性小腸結(jié)腸炎)92273
- 2023年租賃風(fēng)控主管年度總結(jié)及下一年展望
- 開(kāi)關(guān)插座必看的七個(gè)安全隱患范文
- 高分子成型加工課件
- 消防救援-低溫雨雪冰凍惡劣天氣條件下災(zāi)害防范及救援行動(dòng)與安全
- 硅石項(xiàng)目建議書范本
- 概率論在金融風(fēng)險(xiǎn)評(píng)估中的應(yīng)用研究
- 住院醫(yī)療互助給付申請(qǐng)書
- 外墻外保溫工程檢驗(yàn)批質(zhì)量驗(yàn)收記錄表
評(píng)論
0/150
提交評(píng)論