<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-7  評論-24  文章-102  trackbacks-0

    目錄

    1. 系統體系結構 
    2. J2EE 
    3. Servlet 
    4. JSP 
    5. JSP VS Servlet 
    6. XML
        
       

    系統體系結構

    兩層體系結構

    缺點:

    l         client/server結構通常在第一次部署的時候比較容易,但難于升級或改進

    l         經常基于某種專有的協議―通常是某種數據庫協議。

    l         它使得重用業務邏輯和界面邏輯非常困難

    l         更重要的是,在Web時代,二層化應用通常不能體現出很好的伸縮性,因而很難適應Internet的要求。

    N層體系結構

    客戶端/WEB服務層/應用服務層/數據庫服務層

    優點:

    l         應用程序各部分之間松耦合,從而應用程序各部分的更新相互獨立

    l         業務邏輯集中放在服務器上由所有用戶共享,使得系統的維護和更新變得簡單,也更安全。降低了部署與維護的開銷,提高了靈活性、可伸縮性。

    l         引入瘦客戶端,計算被集中至服務器端,使性能提高成為可能。數據庫不再和每一個活動的用戶保持一個連接,而是由應用程序組件負責與數據庫打交道,降低數據庫服務器的負擔,提高了性能






    J2EE

    J2EE架構

    J2EE提供了一套完整的解決所有這些問題的框架方案:

    l         提供了分布式、可移植構件的框架

    l         為構件與應用服務器提供標準API

    l         簡化了服務器端中間層構件的設計

     

    開放的、基于標準的平臺,用以開發、部署和管理N層結構、面向Web的,以服務器為中心的企業級應用

    J2EE13種核心技術

       EJB CORBA RMIJSP

       Java ServletJavaBeanJDBC

       XMLJMS……





    Servlet

    l         Servlets(Server Applet):是一些運行于Web服務器端的Java小程序,用來擴展Web服務器的功能。

    l         Servlet是一種擴展Web服務器功能的技術,而且由于它是用Java編寫的,所以能夠訪問整個Java API庫,包括用于訪問企業數據庫的JDBC API

    l         Servlets用特定的Java解決方案替代了其它的Web服務器方編程模式(如:CGIISAPI等),因而繼承了Java的所有特性(跨平臺、多線程、OO)

    l         用來編寫ServletsServlet API對于服務器環境和協議沒有任何特殊的要求,所以Servlets具有很強的可移植性,也不像利用CGI程序等其它方式那樣具有性能局限。

    l         Servlets也同樣使用HTTP協議與客戶端進行通訊,所以有時也稱Sevlets“HTTP Servlets”

    與傳統的CGI和許多其他類似CGI的技術相比,Java Servlet具有更高的效率,更容易使用,功能更強大,具有更好的可移植性,更節省投資

    l         高效

    在傳統的CGI中,每個請求都要啟動一個新的進程,如果CGI程序本身的執行時間較短,啟動進程所需要的開銷很可能反而超過實際執行時間。而在Servlet中,每個請求由一個輕量級的Java線程處理(而不是重量級的操作系統進程)。

    在傳統CGI中,如果有N個并發的對同一CGI程序的請求,則該CGI程序的代碼在內存中重復裝載了N次;而對于Servlet,處理請求的是N個線程,只需要一份Servlet類代碼。在性能優化方面,Servlet也比CGI有著更多的選擇,比如緩沖以前的計算結果,保持數據庫連接的活動,等等。

    l         方便

    Servlet提供了大量的實用工具例程,例如自動地解析和解碼HTML表單數據、讀取和設置HTTP頭、處理Cookie、跟蹤會話狀態等。

    l         功能強大

    Servlet中,許多使用傳統CGI程序很難完成的任務都可以輕松地完成。例如,Servlet能夠直接和Web服務器交互,而普通的CGI程序不能。Servlet還能夠在各個程序之間共享數據,使得數據庫連接池之類的功能很容易實現。

    l         可移植性好

    ServletJava編寫,Servlet API具有完善的標準。因此,為I-Planet Enterprise Server寫的Servlet無需任何實質上的改動即可移植到ApacheMicrosoft IIS或者WebStar。幾乎所有的主流服務器都直接或通過插件支持Servlet

    l         節省投資

    不僅有許多廉價甚至免費的Web服務器可供個人或小規模網站使用,而且對于現有的服務器,如果它不支持Servlet的話,要加上這部分功能也往往是免費的(或只需要極少的投資)。

    當一個servlet接收來自客戶端的調用請求,它接收兩個對象: 一個是ServletRequest,另外一個是ServletResponse 這個ServletRequest class 概括從客戶端到服務器之間的聯系, ServletResponse class 概括從servlet 返回客戶端的聯系。

     

    ServletRequest interface 可以獲取到這樣一些信息如由客戶端傳送的闡述名稱客戶端正在使用的協議 產生請求并且接收請求的服務器遠端主機名。它也提供獲取數據流的servlet, ServletInputStream,這些數據是客戶端引用中使用HTTP POST PUT 方法遞交的。 一個ServletRequest的子類可以讓 servlet獲取更多的協議特性數據。 例如: HttpServletRequest 包含獲取 HTTP-specific頭部信息的方法。更重要的是,我們能從HttpServletRequest獲取用戶提交的表單數據

     

    ServletResponse interface 給出相應客戶端的servlet方法。 它允許servlet 設置內容長度和回應的mime類型, 并且提供輸出流ServletOutputStream 通過編寫者可以發回相應數據。 ServletResponse子類可以給出更多 protocol-specific容量的信息。 例如: HttpServletResponse 包含允許servlet 操作HTTP-specific頭部信息的方法。

     

    HttpServletRequest

    封裝了客戶端請求的細節

    1)      繼承自ServletRequest的方法:

    l         Object getAttribute(String name)    返回具有指定名字的請求屬性,如果不存在則返回null。屬性可由servlet引擎設置或使用setAttribute()顯式加入。      

    l         Enumeration getAttributeName()    返回請求中所有屬性名的枚舉。如果不存在屬性,則返回一個空的枚舉。      

    l         String getCharacteEncoding()    返回請求所用的字符編碼。      

    l         Int getContentLength()    指定輸入流的長度,如果未知則返回-1       

    l         ServletInputStream getInputStream()throws IOException    返回與請求相關的(二進制)輸入流。可以調用getInputStream()getReader()方法之一。      

    l         String getParameter(String name)    返回指定輸入參數,如果不存在,返回null      

    l         Enumeration getParameterName()    返回請求中所有參數名的一個可能為空的枚舉。      

    l         String[] getParameterValues(String name)    返回指定輸入參數名的取值數組,如果取值不存在則返回null。它在參數具有多個取值的情況下十分有用。      

    l         String get Protocol()    返回請求使用協議的名稱和版本。      

    l         String getScheme()    返回請求URI的子串,但不包含第一個冒號前的內容。      

    l         String getServerName()    返回處理請求的服務器的主機名。      

    l         String getServerPort()    返回接收主機正在偵聽的端口號。      

    l         BufferedReader getReader()throws IOException    返回與請求相關輸入數據的一個字符解讀器。此方法與getInputStream()只可分別調用,不能同時使用。      

    l         String getRemoteAddr()    返回客戶端主機的數字型IP地址。      

    l         String getRemoteHost()    如果知道,返回客戶端主機名。      

    l         void setAttribute(String name,Object obj)    以指定名稱保存請求中指定對象的引用。      

    l         void removeAttribute(String name)    從請求中刪除指定屬性      

    l         Locale getLocale()    如果已知,返回客戶端的第一現場或者為null      

    l         Enumeration getLocales()    如果已知,返回客戶端的第一現場的一個枚舉,否則返回服務器第一現場。      

    l         boolean isSecure()    如果請求使用了如HTTPS安全隧道,返回true      

    l         RequestDispatcher getRequestDispatcher(String name)    返回指定源名稱的RequsetDispatcher對象。

    2)      HttpServletRequest自身的方法:

    l         String getAuthType()    如果servlet由一個鑒定方案所保護,如HTTP基本鑒定,則返回方案名稱。      

    l         String getContextPath()    返回指定servlet上下文(web應用)的URL的前綴。      

    l         Cookie[] getCookies()    返回與請求相關cookie的一個數組。      

    l         Long getDateHeader(String name)    將輸出轉換成適合構建Date對象的long類型取值的getHeader()的簡化版。      

    l         String getHeader(String name)    返回指定的HTTP頭標指。如果其由請求給出,則名字應為大小寫不敏感。      

    l         Enumeration getHeaderNames()    返回請求給出的所有HTTP頭標名稱的權舉值。      

    l         Enumeration getHeaders(String name)    返回請求給出的指定類型的所有HTTP頭標的名稱的枚舉值,它對具有多取值的頭標非常有用。      

    l         int getIntHeader(String name)    將輸出轉換為int取值的getHeader()的簡化版。      

    l         String getMethod()    返回HTTP請求方法(例如GETPOST等等)      

    l         String getPathInfo()    返回在URL中指定的任意附加路徑信息。      

    l         String getPathTranslated()    返回在URL中指定的任意附加路徑信息,被子轉換成一個實際路徑。      

    l         String getQueryString()    返回查詢字符串,即URL?后面的部份。      

    l         String getRemoteUser()    如果用戶通過鑒定,返回遠程用戶名,否則為null      

    l         String getRequestedSessionId()    返回客戶端的會話ID      

    l         String getRequestURI()    返回URL中一部分,從“/”開始,包括上下文,但不包括任意查詢字符串。      

    l         String getServletPath()    返回請求URI上下文后的子串      

    l         HttpSession getSession()    調用getSession(true)的簡化版      

    l         HttpSession getSession(boolean create)    返回當前HTTP會話,如果不存在,則創建一個新的會話,create參數為true      

    l         Principal getPrincipal()    如果用戶通過鑒定,返回代表當前用戶的java.security.Principal對象,否則為null      

    l         boolean isRequestedSessionIdFromCookie()    如果請求的會話ID由一個Cookie對象提供,則返回true,否則為false      

    l         boolean isRequestedSessionIdFromURL()    如果請求的會話ID在請求URL中解碼,返回true,否則為false      

    l         boolean isRequestedSessionIdValid()    如果客戶端返回的會話ID仍然有效,則返回true      

    l         Boolean isUserInRole(String role)    如果當前已通過鑒定用戶與指定角色相關,則返回true,如果不是或用戶未通過鑒定,則返回false

    HttpServletResponse

    將一個servlet生成的結果傳到發出請求的客戶端

    1)      繼承自ServletResponse的方法:

    l         void flushBuffer()throws IOException    發送緩存到客戶端的輸出內容。因為HTTP需要頭標在內容前被發送,調用此方法發送狀態行和響應頭標,以確認請求。      

    l         int getBufferSize()    返回響應使用的緩存大小。如果緩存無效則返加0      

    l         String getCharacterEncoding()    返回響應使用字符解碼的名字。除非顯式設置,否則為ISO-8859-1      

    l         Locale getLocale()    返回響應使用的現場。除非用setLocale()修改,否則缺省為服務器現場。      

    l         OutputStream getOutputStream()throws IOException    返回用于將返回的二進制輸出寫入客戶端的流,此方法和getWrite()方法二者只能調用其一。      

    l         Writer getWriter()throws IOException    返回用于將返回的文本輸出寫入客戶端的一個字符寫入器,此方法和getOutputStream()二者只能調用其一。      

    l         boolean isCommitted()    如果狀態和響應頭標已經被發回客戶端,則返回true,在響應被確認后發送響應頭標毫無作用。      

    l         void reset()    清除輸出緩存及任何響應頭標。如果響應已得到確認,則引發事件IllegalStateException      

    l         void setBufferSize(int nBytes)    設置響應的最小緩存大小。實際緩存大小可以更大,可以通過調用getBufferSize()得到。如果輸出已被寫入,則產生IllegalStateException      

    l         void setContentLength(int length)    設置內容體的長度。      

    l         void setContentType(String type)    設置內容類型。在HTTP servlet中即設置Content-Type頭標。      

    l         void setLocale(Locale locale)    設置響應使用的現場。在HTTP servlet中,將對Content-Type頭標取值產生影響。

    2)      HttpServletResponse自身的方法:

    l         void addCookie(Cookie cookie)    將一個Set-Cookie頭標加入到響應。      

    l         void addDateHeader(String name,long date)    使用指定日期值加入帶有指定名字(或代換所有此名字頭標)的響應頭標的方法。      

    l         void setHeader(String name,String value)    設置具有指定名字和取值的一個響應頭標。      

    l         void addIntHeader(String name,int value)    使用指定整型值加入帶有指定名字的響應頭標(或代換此名字的所有頭標)。      

    l         boolean containsHeader(String name)    如果響應已包含此名字的頭標,則返回true      

    l         String encodeRedirectURL(String url)    如果客戶端不知道接受cookid,則向URL加入會話ID。第一種形式只對在sendRedirect()中使用的URL進行調用。其他被編碼的URLs應被傳遞到encodeURL()      

    l         String encodeURL(String url)          

    l         void sendError(int status)    設置響應狀態碼為指定值(可選的狀態信息)。HttpServleetResponse定義了一個完整的整數常量集合表示有效狀態值。      

    l         void sendError(int status,String msg)          

    l         void setStatus(int status)    設置響應狀態碼為指定指。只應用于不產生錯誤的響應,而錯誤響應使用sendError()

    HttpSession

    HttpSession類似于哈希表的接口,它提供了setAttribute()getAttribute()方法存儲和檢索對象。HttpSession提供了一個會話ID關鍵字,一個參與會話行為的客戶端在同一會話的請求中存儲和返回它。servlet引擎查找適當的會話對象,并使之對當前請求可用。

    HttpSession接口中的方法      

    l         Object getAttribute(String name)    將會話中一個對象保存為指定名字,返回或刪除前面保存的此名稱對象。      

    l         void setAttribute(String name,Object value)          

    l         void removeAttribute(String name)          

    l         Enumeration getAttributeName()    返回捆綁到當前會話的所有屬性名的枚舉值。      

    l         long getCreationTime()    返回表示會話創建和最后訪問日期和時間的一個長整型,該整型形式為java.util.Date()構造器中使用的形式。      

    l         long getLastAccessedTime()          

    l         String getId()    返回會話IDservlet引擎設置的一個唯一關鍵字。      

    l         ing getMaxInactiveInterval()    如果沒有與客戶端發生交互,設置和返回會話存活的最大秒數。      

    l         void setMasInactiveInterval(int seconds)          

    l         void invalidate()    使得會話被終止,釋放其中任意對象。      

    l         boolean isNew()    如果客戶端仍未加入到會話,返回true。當會話首次被創建,會話ID被傳入客戶端,但客戶端仍未進行包含此會話ID的第二次請示時,返回true    

    ServletConfig

    通過servlet還可以獲得ServletConfig對象,一個ServletConfig對象是servlet containerservlet initialization的時候傳遞給servlet的。其中包含ServletContext 一些 來自于配置描述的 名稱/ 對。ServletContext接口封裝了Web應用程序的上下文概念。

    l         Object getAttribute(String name)    返回servlet上下文中具有指定名字的對象,或使用已指定名捆綁一個對象。從Web應用的標準觀點看,這樣的對象是全局對象,因為它們可以被同一servlet在另一時刻訪問。或上下文中任意其他servlet訪問。      

    l         void setAttribute(String name,Object obj)    設置servlet上下文中具有指定名字的對象。      

    l         Enumeration getAttributeNames()    返回保存在servlet上下文中所有屬性名字的枚舉。      

    l         ServletContext getContext(String uripath)    返回映射到另一URLservlet上下文。在同一服務器中URL必須是以“/”開頭的絕對路徑。      

    l         String getInitParameter(String name)    返回指定上下文范圍的初始化參數值。此方法與ServletConfig方法名稱不一樣,后者只應用于已編碼的指定servlet。此方法應用于上下文中所有的參數。      

    l         Enumeration getInitParameterNames()    返回(可能為空)指定上下文范圍的初始化參數值名字的枚舉值。      

    l         int getMajorVersion()    返回此上下文中支持servlet API級別的最大和最小版本號。      

    l         int getMinorVersion()          

    l         String getMimeType(String fileName)    返回指定文件名的MIME類型。典型情況是基于文件擴展名,而不是文件本身的內容(它可以不必存在)。如果MIME類型未知,可以返回null      

    l         RequestDispatcher getNameDispatcher(String name)    返回具有指定名字或路徑的servletJSPRequestDispatcher。如果不能創建RequestDispatch,返回null。如果指定路徑,必須心“/”開頭,并且是相對于servlet上下文的頂部。      

    l         RequestDispatcher getNameDispatcher(String path)          

    l         String getRealPath(String path)    給定一個URI,返回文件系統中URI對應的絕對路徑。如果不能進行映射,返回null      

    l         URL getResource(String path)    返回相對于servlet上下文或讀取URL的輸入流的指定絕對路徑相對應的URL,如果資源不存在則返回null      

    l         InputStream getResourceAsStream(String path)          

    l         String getServerInfo()    返順servlet引擎的名稱和版本號。      

    l         void log(String message)

    l         void log(String message,Throwable t)    將一個消息寫入servlet注冊,如果給出Throwable參數,則包含棧軌跡。      

    l         void removeAttribute(String name)    servlet上下文中刪除指定屬性。

    示例

     



    JSP

    JSP的基礎知識   

                   __ 

            _____ |   directive  (指令)

                |     |-- scripting (腳本)

     JSP -------|     |__ action  (動作)

    |

    |_____Template data :除JSP語法外,JSP引擎不能解讀的東西

    JSP中使用的directive(指令)

    l         page指令

    功能:設定整個JSP網頁的屬性和相關功能

    語法:<%@ page attribute1="value1" attribute2="value2" %>

    標簽元素:

    page指令元素的屬性      

    language="language"    指定JSP Container要用什么語言來編譯JSP網頁。目前只可以使用Java語言,不過不排除增加其它語言。默認值為Java      

    extends="className"    定義此JSP頁面產生的Servlet是繼承自哪個父類。必須為實現HttpJspPage接口的類。JSP規范對不完全理解其隱意的情況下使用此屬性提出警告。      

    import ="importList"    定義此JSP頁面可以使用哪些Java API。用逗號分隔列出一個或多個全質類名。此列表用于在生成的 java servlet中創建相應的導入語句。以下包是自動包含的,不必被指出:java.lang.*;java.servlet.*; java.servlet.jsp.*;java.servlet.htt.*      

    session="true|false"    指明JSP頁面是否需要一個HTTP會話,如果為true,那么產生的servlet將包含創建一個HTTP會話(或訪問一個HTTP會話)的代碼,缺省為true      

    buffer="none|size in kb"    指定輸出流緩存的大小。有效值是nkb或沒有。缺省為8kb      

    authflush="true|false:    決定輸出流的緩沖區是否要自動清除。當值為true時緩存滿時將被自動刷新,當值為false時,緩沖區滿會拋出溢出異常。缺省值為true      

    isThreadSafe ="true"    JSP頁面能處理來自多個線程的同步請求,此值為true,否則為false,生成的servlet表明它實現了 SingleThreadMode接口。SingleThreadMode已經聲明不贊成使用(deprecate      

    info="text"    表示此JSP頁面的相關信息,由getServletInfo()方法返回的。      

    isErrorPage ="true|false"    如果此頁面被用作處理異常錯誤的頁面,則為true。在這種情況下,頁面可被指定為另一頁面page指令元素中 errorPage屬性的取值。指定此屬性為true將使exception隱含變量對此頁面可用。缺省值為false      

    errorPage="error_url"    表示如果發生異常錯誤,網頁會被重新指向一個URL頁面。錯誤頁面必須在其page指令元素中指定isErrorPage="true"      

    contentType="ctinfo"    表示將在生成servlet中使用的MIME類型和可選字符解碼。      

    pageEncoding="ctinfo"    表示JSP頁面的編碼方式。      

    isELIgnored="true|false"    表示是否在此JSP網頁中執行或忽略EL表達式。如果為trueJSP Container將忽略EL表達式。

    JSP的任何地方,以任何順序,一個頁面可以包含任意數量的page指令

    l         include指令

    功能:JSP編譯時插入包含一個文件。包含的過程是靜態的,包含的文件可以是JSPHTML、文本或是Java程序。

    語法:<%@ include file="relativeURLspec" %>

    標簽元素:

    注意:include指令元素和行為元素主要有兩個方面的不同點。

    1.include指令是靜態包含,執行時間是在編譯階段執行,引入的內容為靜態文要,在編譯成servlet時就和包含者融合到一起。所以file不能是一個變量,也不能在file后接任何參數。

    2.include行為是動態包含,執行時間是在請求階段執行,引入的內容在執行頁面時被請求時動態生成再包含到頁面中

    l         taglib指令

    功能:使用標簽庫定義新的自定義標簽,在JSP頁面中啟用定制行為。
    語法:<%@ taglib uri="tabLibraryURI" prefix"tagPrefix" %>

    Scripting(腳本)包括三種類型

    l         聲明語法

    <%declaraction  %>

    聲明變量和方法(函數)

    例:

    <%!int a, b ; double c ; %>
    <%! Circle a = new circle(2.0) ; %>

    l         腳本語法

    <%  scriptlet     %>

    可以操作聲明、表達式和其他類型合法的代碼段在頁腳本語言

    例:

    <% String name=null ;
    If (request.getParmeter("name")==null){

           …….

    }
    %>

    l         表達式語法

    <%= expression   %>

    定義腳本語言表達式

    例:

    <%= Math.sqrt(2) %>
    <%= item[I] %>
    <%= a+b+c %>
    <%= new java.util.date() %>

    action(動作)

      標準的動作類型有:

    <jsp:useBean>

    <jsp:setProperty>

    <jsp:getProperty>

    <jsp:param>

    <jsp:include>

    <jsp:forward>

    <jsp:plugin>

    JSP中的JavaBean

    JSP三種bean的類型

    頁面bean

    會話bean

    應用bean

     

    大多數的系統會使用一個會話bean來保持狀態,而對每一個頁面使用一個頁面bean 來對復雜的數據進行表示。

     

    頁面bean是一個模型,而JSP是一個視圖。

     

    Custom tag

    bean是信息的攜帶者,

    tag更適用于處理信息。

     

    標記庫包含一個標記庫描述符(TLD)和用于實現Custom tagJava

    在翻譯階段,JSP容器將使用TLD來驗證頁面中的所有的tag是否都被正確的使用。

     

     

       標記處理程序只是一個簡單的適配器,而真正的邏輯是在另一個類中實現的,標記處理程序只是提供了一個供其他的可復用的類的JSP接口

     

    示例

     

    Model1

    Model 1結構圖

    mode1 1是一個以JSP文件為中心的模式,在這種模式中JSP頁面不僅負責表現邏輯也負責控制邏輯。專業書籍上稱之為邏輯耦合在頁面中,這種處理方式,對一些規模很小的項目如:一個簡單的留言簿,也沒什么太大的壞處,實際上,人們開始接觸一些對自己來說是新的東西的時候,比如,用JSP訪問數據庫時,往往喜歡別人能提供一個包含這一切的單個JSP頁面,因為這樣在一個頁面上他就可以把握全局,便于理解。但是,用Model 1模式開發大型時,程序流向由一些互相能夠感知的頁面決定,當頁面很多時要清楚地把握其流向將是很復雜的事情,當您修改一頁時可能會影響相關的很多頁面,大有牽一發而動全身的感覺,使得程序的修改與維護變得異常困難;還有一個問題就是程序邏輯開發與頁面設計糾纏在一起,既不便于分工合作也不利于代碼的重用,這樣的程序其健壯性和可伸縮性都不好。



    Model2

    Model 2結構圖

    Struts

     

    WebWork





    JSP VS Servlet

    相似:

    l         兩者都是基于Java的技術,所以都繼承了Java的所有特性(跨平臺、多線程、OO ),都可以使用Java強大的API

    l         兩者工作方式相似:JSP代碼先被JSP容器轉換為Servlet代碼再編譯為類。

    l         兩者在J2EE體系結構中的工作層次相同,都負責與客戶端的連接。

    不同:

    l         編程方式不同。Servlets是一些運行于Web服務器端的Java小程序;而JSP腳本,編寫起來更簡單容易。

    l         應用目的不同。Servlet主要用于從客戶端接收請求信息,而JSP主要負責將服務器端信息傳送到客戶端。

    l         使用JSP的真正意義在于:可以將界面設計和業務邏輯設計分離





    XML

    XML基礎知識

    簡介

    XML是一種標記語言,設計用來描述數據(HTML設計用顯示數據),沒有預定義的標簽,它用Document Type Definition (DTD)XML Schema描述數據,XML(帶著DTDXML Schema )被設計成自描述的。

      XML不是無所不能的,它只是用來描述數據的,至于數據如何顯示、或傳輸、或處理,那是別的程序或語言的事。

    哪些用途

     

    XML語法

    XML文件的開頭,要用一個聲明行如:

    <?xml version="1.0" encoding="ISO-8859-1"?>,用以說明版本和編碼。

      XML的所有元素都必須有一個結束標簽,標簽大小寫敏感,標簽嵌套必須準確,每個XML文件必須有一個根元素,屬性值必須用雙/單引號括起(要成對使用),XML中的空格被保留,新起一行的回車換行統一用換行符一個,XML中的注釋跟HTML一樣。

    XML元素

      一個XML元素包括開始標簽和結束標簽以及它們之間的內容,可動態擴展,有父子關系或兄弟關系。一個元素的內容可以為空。

      命名一個元素的要求:不能以數字、標點和XML(三個字符的大小組合,順序不變)開頭,不能有空格,由字母、數字或其它符構成的字符串

      不建議含有-.:或非英語字符,建議名字長度不要太長且要用描述性

    XML元素屬性

      元素開始標簽中可以含有屬性,用以補充說明元素,但屬性的值可以用來描述數據內容,但盡量不要這么用而盡可能地用子元素來完成這個任務。

      用屬性存放數據有以下弊端:不能含有多個值,不易擴展、不能描述數據結構、程序難以處理、不能用DTD來進行檢查。

      這個作者習慣有一個例外,就是ID或名,可以放在屬性里。

     

    XML檢查

      一個好的XML文件,合于語法和DTD描述。

      DTD定義了XML的合法元素,XML Schema是基于XMLDTD的替代物。

      XML的錯誤,會終止處理程序。

    IENetScapeXML的支持

     

    瀏覽器中顯示XML文件,當XML有錯誤時會提示。

     

    現實生活中的XML

     

    命名空間

      提供了一種避免元素命名沖突的機制。通過在元素名前增加一個前綴來區分不同的元素,同時在開始標簽中增xmlns屬性來描述不同的URI指定的命名空間。例如:

    <f:table xmlns:f="http://www.w3schools.com/furniture">......</table>

    <h:table xmlns:h="http://www.w3.org/TR/html4/">......</table>

     

      xmlns屬性的語法是:

     

    xmlns:namespace-prefix="namespace"

     

      需要說明的是,這里的URL(即要求的URI)只是用來區別空間的不同,并不要求從那取得什么數據。

      xmlns在現實中的典型應用是xsl,每個xsl中的非HTML標簽都要指明xmlns.

     

    CDATA

      除了CDATA片斷外,一個XML文檔中所有文本都要經過解析器解析,即使是兩個標簽中間的數據也不例外,這是因為標簽可以嵌套的緣故。

      XML預定義了五個特殊字符,如下表所示,當在數據中出現這幾字符時,需要用一個串來代替,其中前兩個是必須的,后三個是建議的。

     

     

    &lt; < less than

    &gt; > greater than

    &amp; & ampersand 

    &apos; ' apostrophe

    &quot; " quotation mark

     

     

      一個CDATA片斷,由""結束,所以其中間的內容不能含有"]]>"字符串。

    XML文檔編碼

      在xml文檔第一行聲明中,指明文檔所用的編碼,如例:

     

    <?xml version="1.0" encoding="UTF-8"?>

     

      需要注意的是,所用文本編輯器要要可以指定編碼(如win2Knotepad),然后利用encoding屬性指明所用的編碼。win95/98Notepad可不行。

     

    IE5以上可支持XMLHTTP請求。

      引用兩段javascript代碼,供參考吧。

     

     

    var objHTTP = new ActiveXObject("Microsoft.XMLHTTP")

    objHTTP.Open('GET','httprequest.asp',false)

    objHTTP.Send()

    ......

    document.all['A1'].innerText= objHTTP.status

    document.all['A2'].innerText= objHTTP.statusText

    document.all['A3'].innerText= objHTTP.responseText

     

      這樣一來,跟服務器打交道,來去都可用XML了。

     

     

     

    posted on 2008-09-09 11:25 黃小二 閱讀(569) 評論(0)  編輯  收藏 所屬分類: J2EE
    主站蜘蛛池模板: 成人免费av一区二区三区| 亚洲av无码专区在线观看亚| 亚洲欧洲在线观看| 中文字幕亚洲精品资源网| 亚洲成a人片77777群色| 亚洲狠狠婷婷综合久久| 日韩免费高清一级毛片| a级毛片免费高清毛片视频| 黄色网址免费大全| 国产一级做a爱免费视频| 亚洲宅男天堂在线观看无病毒| 99ri精品国产亚洲| 久久亚洲精品高潮综合色a片| 久久免费99精品国产自在现线 | 亚洲国产高清国产拍精品| 日韩少妇内射免费播放| 日本在线免费观看| 女人18毛片a级毛片免费视频| 久久亚洲国产成人影院网站| 久久亚洲国产精品成人AV秋霞| 亚洲av无码专区在线电影| a级毛片在线免费| 啦啦啦高清视频在线观看免费 | 四虎影视成人永久免费观看视频| 在线永久看片免费的视频| 亚洲精品无码成人片在线观看| 亚洲黄色在线观看网站| 另类图片亚洲校园小说区| 日本视频免费高清一本18| 国产成人无码免费视频97| 亚洲三级电影网址| 羞羞的视频在线免费观看| 久久不见久久见免费视频7| 免费观看午夜在线欧差毛片| 91亚洲国产成人久久精品网站| 色欲aⅴ亚洲情无码AV| 免费人成视频在线观看网站| 国产又粗又长又硬免费视频| 97亚洲熟妇自偷自拍另类图片 | 免费一级特黄特色大片| 99视频全部免费精品全部四虎|