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

          目錄

          1. 系統(tǒng)體系結(jié)構(gòu) 
          2. J2EE 
          3. Servlet 
          4. JSP 
          5. JSP VS Servlet 
          6. XML
              
             

          系統(tǒng)體系結(jié)構(gòu)

          兩層體系結(jié)構(gòu)

          缺點:

          l         client/server結(jié)構(gòu)通常在第一次部署的時候比較容易,但難于升級或改進(jìn)

          l         經(jīng)常基于某種專有的協(xié)議―通常是某種數(shù)據(jù)庫協(xié)議。

          l         它使得重用業(yè)務(wù)邏輯和界面邏輯非常困難

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

          N層體系結(jié)構(gòu)

          客戶端/WEB服務(wù)層/應(yīng)用服務(wù)層/數(shù)據(jù)庫服務(wù)層

          優(yōu)點:

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

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

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






          J2EE

          J2EE架構(gòu)

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

          l         提供了分布式、可移植構(gòu)件的框架

          l         為構(gòu)件與應(yīng)用服務(wù)器提供標(biāo)準(zhǔn)API

          l         簡化了服務(wù)器端中間層構(gòu)件的設(shè)計

           

          開放的、基于標(biāo)準(zhǔn)的平臺,用以開發(fā)、部署和管理N層結(jié)構(gòu)、面向Web的,以服務(wù)器為中心的企業(yè)級應(yīng)用

          J2EE13種核心技術(shù)

             EJB CORBA RMIJSP

             Java ServletJavaBeanJDBC

             XMLJMS……





          Servlet

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

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

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

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

          l         Servlets也同樣使用HTTP協(xié)議與客戶端進(jìn)行通訊,所以有時也稱Sevlets“HTTP Servlets”

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

          l         高效

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

          在傳統(tǒng)CGI中,如果有N個并發(fā)的對同一CGI程序的請求,則該CGI程序的代碼在內(nèi)存中重復(fù)裝載了N次;而對于Servlet,處理請求的是N個線程,只需要一份Servlet類代碼。在性能優(yōu)化方面,Servlet也比CGI有著更多的選擇,比如緩沖以前的計算結(jié)果,保持?jǐn)?shù)據(jù)庫連接的活動,等等。

          l         方便

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

          l         功能強大

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

          l         可移植性好

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

          l         節(jié)省投資

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

          當(dāng)一個servlet接收來自客戶端的調(diào)用請求,它接收兩個對象: 一個是ServletRequest,另外一個是ServletResponse 這個ServletRequest class 概括從客戶端到服務(wù)器之間的聯(lián)系, ServletResponse class 概括從servlet 返回客戶端的聯(lián)系。

           

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

           

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

           

          HttpServletRequest

          封裝了客戶端請求的細(xì)節(jié)

          1)      繼承自ServletRequest的方法:

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

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

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

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

          l         ServletInputStream getInputStream()throws IOException    返回與請求相關(guān)的(二進(jìn)制)輸入流。可以調(diào)用getInputStream()getReader()方法之一。      

          l         String getParameter(String name)    返回指定輸入?yún)?shù),如果不存在,返回null      

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

          2)      HttpServletRequest自身的方法:

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

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

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

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

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

          l         Enumeration getHeaderNames()    返回請求給出的所有HTTP頭標(biāo)名稱的權(quán)舉值。      

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

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

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

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

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

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

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

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

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

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

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

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

          l         Principal getPrincipal()    如果用戶通過鑒定,返回代表當(dāng)前用戶的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)    如果當(dāng)前已通過鑒定用戶與指定角色相關(guān),則返回true,如果不是或用戶未通過鑒定,則返回false

          HttpServletResponse

          將一個servlet生成的結(jié)果傳到發(fā)出請求的客戶端

          1)      繼承自ServletResponse的方法:

          l         void flushBuffer()throws IOException    發(fā)送緩存到客戶端的輸出內(nèi)容。因為HTTP需要頭標(biāo)在內(nèi)容前被發(fā)送,調(diào)用此方法發(fā)送狀態(tài)行和響應(yīng)頭標(biāo),以確認(rèn)請求。      

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

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

          l         Locale getLocale()    返回響應(yīng)使用的現(xiàn)場。除非用setLocale()修改,否則缺省為服務(wù)器現(xiàn)場。      

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

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

          l         boolean isCommitted()    如果狀態(tài)和響應(yīng)頭標(biāo)已經(jīng)被發(fā)回客戶端,則返回true,在響應(yīng)被確認(rèn)后發(fā)送響應(yīng)頭標(biāo)毫無作用。      

          l         void reset()    清除輸出緩存及任何響應(yīng)頭標(biāo)。如果響應(yīng)已得到確認(rèn),則引發(fā)事件IllegalStateException      

          l         void setBufferSize(int nBytes)    設(shè)置響應(yīng)的最小緩存大小。實際緩存大小可以更大,可以通過調(diào)用getBufferSize()得到。如果輸出已被寫入,則產(chǎn)生IllegalStateException      

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

          l         void setContentType(String type)    設(shè)置內(nèi)容類型。在HTTP servlet中即設(shè)置Content-Type頭標(biāo)。      

          l         void setLocale(Locale locale)    設(shè)置響應(yīng)使用的現(xiàn)場。在HTTP servlet中,將對Content-Type頭標(biāo)取值產(chǎn)生影響。

          2)      HttpServletResponse自身的方法:

          l         void addCookie(Cookie cookie)    將一個Set-Cookie頭標(biāo)加入到響應(yīng)。      

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

          l         void setHeader(String name,String value)    設(shè)置具有指定名字和取值的一個響應(yīng)頭標(biāo)。      

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

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

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

          l         String encodeURL(String url)          

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

          l         void sendError(int status,String msg)          

          l         void setStatus(int status)    設(shè)置響應(yīng)狀態(tài)碼為指定指。只應(yīng)用于不產(chǎn)生錯誤的響應(yīng),而錯誤響應(yīng)使用sendError()

          HttpSession

          HttpSession類似于哈希表的接口,它提供了setAttribute()getAttribute()方法存儲和檢索對象。HttpSession提供了一個會話ID關(guān)鍵字,一個參與會話行為的客戶端在同一會話的請求中存儲和返回它。servlet引擎查找適當(dāng)?shù)臅拰ο螅⑹怪畬Ξ?dāng)前請求可用。

          HttpSession接口中的方法      

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

          l         void setAttribute(String name,Object value)          

          l         void removeAttribute(String name)          

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

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

          l         long getLastAccessedTime()          

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

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

          l         void setMasInactiveInterval(int seconds)          

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

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

          ServletConfig

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

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

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

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

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

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

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

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

          l         int getMinorVersion()          

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

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

          l         RequestDispatcher getNameDispatcher(String path)          

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

          l         URL getResource(String path)    返回相對于servlet上下文或讀取URL的輸入流的指定絕對路徑相對應(yīng)的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參數(shù),則包含棧軌跡。      

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

          示例

           



          JSP

          JSP的基礎(chǔ)知識   

                         __ 

                  _____ |   directive  (指令)

                      |     |-- scripting (腳本)

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

          |

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

          JSP中使用的directive(指令)

          l         page指令

          功能:設(shè)定整個JSP網(wǎng)頁的屬性和相關(guān)功能

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

          標(biāo)簽元素:

          page指令元素的屬性      

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

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

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

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

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

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

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

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

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

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

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

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

          isELIgnored="true|false"    表示是否在此JSP網(wǎng)頁中執(zhí)行或忽略EL表達(dá)式。如果為trueJSP Container將忽略EL表達(dá)式。

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

          l         include指令

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

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

          標(biāo)簽元素:

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

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

          2.include行為是動態(tài)包含,執(zhí)行時間是在請求階段執(zhí)行,引入的內(nèi)容在執(zhí)行頁面時被請求時動態(tài)生成再包含到頁面中

          l         taglib指令

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

          Scripting(腳本)包括三種類型

          l         聲明語法

          <%declaraction  %>

          聲明變量和方法(函數(shù))

          例:

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

          l         腳本語法

          <%  scriptlet     %>

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

          例:

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

                 …….

          }
          %>

          l         表達(dá)式語法

          <%= expression   %>

          定義腳本語言表達(dá)式

          例:

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

          action(動作)

            標(biāo)準(zhǔn)的動作類型有:

          <jsp:useBean>

          <jsp:setProperty>

          <jsp:getProperty>

          <jsp:param>

          <jsp:include>

          <jsp:forward>

          <jsp:plugin>

          JSP中的JavaBean

          JSP三種bean的類型

          頁面bean

          會話bean

          應(yīng)用bean

           

          大多數(shù)的系統(tǒng)會使用一個會話bean來保持狀態(tài),而對每一個頁面使用一個頁面bean 來對復(fù)雜的數(shù)據(jù)進(jìn)行表示。

           

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

           

          Custom tag

          bean是信息的攜帶者,

          tag更適用于處理信息。

           

          標(biāo)記庫包含一個標(biāo)記庫描述符(TLD)和用于實現(xiàn)Custom tagJava

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

           

           

             標(biāo)記處理程序只是一個簡單的適配器,而真正的邏輯是在另一個類中實現(xiàn)的,標(biāo)記處理程序只是提供了一個供其他的可復(fù)用的類的JSP接口

           

          示例

           

          Model1

          Model 1結(jié)構(gòu)圖

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



          Model2

          Model 2結(jié)構(gòu)圖

          Struts

           

          WebWork





          JSP VS Servlet

          相似:

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

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

          l         兩者在J2EE體系結(jié)構(gòu)中的工作層次相同,都負(fù)責(zé)與客戶端的連接。

          不同:

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

          l         應(yīng)用目的不同。Servlet主要用于從客戶端接收請求信息,而JSP主要負(fù)責(zé)將服務(wù)器端信息傳送到客戶端。

          l         使用JSP的真正意義在于:可以將界面設(shè)計和業(yè)務(wù)邏輯設(shè)計分離





          XML

          XML基礎(chǔ)知識

          簡介

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

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

          哪些用途

           

          XML語法

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

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

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

          XML元素

            一個XML元素包括開始標(biāo)簽和結(jié)束標(biāo)簽以及它們之間的內(nèi)容,可動態(tài)擴(kuò)展,有父子關(guān)系或兄弟關(guān)系。一個元素的內(nèi)容可以為空。

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

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

          XML元素屬性

            元素開始標(biāo)簽中可以含有屬性,用以補充說明元素,但屬性的值可以用來描述數(shù)據(jù)內(nèi)容,但盡量不要這么用而盡可能地用子元素來完成這個任務(wù)。

            用屬性存放數(shù)據(jù)有以下弊端:不能含有多個值,不易擴(kuò)展、不能描述數(shù)據(jù)結(jié)構(gòu)、程序難以處理、不能用DTD來進(jìn)行檢查。

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

           

          XML檢查

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

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

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

          IENetScapeXML的支持

           

          瀏覽器中顯示XML文件,當(dāng)XML有錯誤時會提示。

           

          現(xiàn)實生活中的XML

           

          命名空間

            提供了一種避免元素命名沖突的機制。通過在元素名前增加一個前綴來區(qū)分不同的元素,同時在開始標(biāo)簽中增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)只是用來區(qū)別空間的不同,并不要求從那取得什么數(shù)據(jù)。

            xmlns在現(xiàn)實中的典型應(yīng)用是xsl,每個xsl中的非HTML標(biāo)簽都要指明xmlns.

           

          CDATA

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

            XML預(yù)定義了五個特殊字符,如下表所示,當(dāng)在數(shù)據(jù)中出現(xiàn)這幾字符時,需要用一個串來代替,其中前兩個是必須的,后三個是建議的。

           

           

          &lt; < less than

          &gt; > greater than

          &amp; & ampersand 

          &apos; ' apostrophe

          &quot; " quotation mark

           

           

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

          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

           

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

           

           

           

          posted on 2008-09-09 11:25 黃小二 閱讀(574) 評論(0)  編輯  收藏 所屬分類: J2EE
          主站蜘蛛池模板: 治多县| 大英县| 玉溪市| 铜鼓县| 阳新县| 嘉兴市| 永川市| 京山县| 北川| 应用必备| 义马市| 延吉市| 剑川县| 峨边| 略阳县| 呼伦贝尔市| 运城市| 上饶县| 汝州市| 洞口县| 临安市| 新昌县| 宁晋县| 阳高县| 盘锦市| 东明县| 余江县| 包头市| 云阳县| 邳州市| 内江市| 罗城| 富平县| 梁山县| 宣武区| 阳信县| 高阳县| 阳城县| 金坛市| 西丰县| 扬州市|