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

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

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

    JAVA學習札記

    人生起航點!
    posts - 18, comments - 0, trackbacks - 0, articles - 0
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    2011年10月10日

    一.DWR概述   
        DWR是Direct Web Remoting 的縮寫。
        DWR 是一個開放源碼的使用 Apache 許可協議的解決方案,它包含服務器端 Java 庫、一個 DWR servlet 以及 JavaScript 庫。雖然 DWR 不是 Java 平臺上唯一可用的 Ajax-RPC工具包,但是它是最成熟的,而且提供了許多有用的功能。
        從最簡單的角度來說,DWR 是一個引擎,可以把服務器端 Java對象的方法公開給 JavaScript 代碼。使用 DWR 可以有效地從應用程序代碼中把 Ajax 的全部請求-響應循環消除掉這意味著客戶端代碼再也不需要直接處理 XMLHttpRequest 對象或者服務器的響應。不再需要編寫對象的序列化代碼或者使用第三方工具才能把對象變成 XML。甚至不再需要編寫 servlet 代碼把 Ajax 請求調整成對 Java 域對象的調用。 ]
        DWR 是作為 Web 應用程序中的 servlet 部署的。把它看作一個黑盒子,這個 servlet 有兩個主要作用:首先,對于公開的每個類,DWR 動態地生成包含在 Web 頁面中的 JavaScript。
    成的JavaScript包含存根函數,代表Java類上的對應方法并在幕后執行 XMLHttpRequest。這些請求被發送給 DWR,這時它的第二個作用就是把請求翻譯成服務器端 Java 對象上的方法調用并把方法的返回值放在 servlet 響應中發送回客戶端,編碼成 JavaScript。DWR 還提供了幫助執行常見的用戶界面任務的 JavaScript 工具函數。
    二.使用方法
        DWR(Direct Web Remoting)是一個用于改善web頁面與Java類交互的遠程服務器端Ajax開源框架,可以幫助開發人員開發包含AJAX技術的網站.它可以允許在瀏覽器里的代碼使用運行在WEB服務器上的JAVA函數,就像它就在瀏覽器里一樣。
     它包含兩個主要的部分:允許JavaScript從WEB服務器上一個遵循了AJAX原則的Servlet中獲取數據.另外一方面一個JavaScript庫可以幫助網站開發人員輕松地利用獲取的數據來動態改變網頁的內容. DWR采取了一個類似AJAX的新方法來動態生成基于JAVA類的JavaScript代碼.這樣WEB開發人員就可以在JavaScript里使用Java代碼就像它們是瀏覽器的本地代碼(客戶端代碼)一樣;但是Java代碼運行在WEB服務器端而且可以自由訪問WEB 服務器的資源.出于安全的理由,WEB開發者必須適當地配置哪些Java類可以安全的被外部使用.
    2.1、dwr.xml的配置
    1   <dwr>
    2     <allow>
    3       <create creator="new" javascript="testClass" >
    4          <include method="testMethod1"/> 
    5     </create>
    6    </allow>
    7  </dwr>
    8 

    <allow>標簽中包括可以暴露javascript訪問的東西。

    <create>標簽中指定javascript中可以訪問的java類,并定義DWR應當如何獲得要進行遠程的類的實例。creator="new"屬性指定java類實例的生成方式,new意味著DWR應當調用類的默認構造函數來獲得實例,其他的還有spring方式,通過與IOC容器Spring進行集成來獲得實例等等。javascript=" testClass "屬性指定javascript代碼訪問對象時使用的名稱。標簽指定要公開給javascriptjava類名。

    <include>標簽指定要公開javascript的方法。不指定的話就公開所有方法。

    <exclude>標簽指定要防止被訪問的方法。

    入門視頻:

    http://www.verycd.com/groups/@g1897244/737357.topic

     

    拓展閱讀:

    http://baike.baidu.com/view/73492.htm

    http://blog.csdn.net/zhaizhanpo/archive/2008/09/27/2988512.aspx

     

    http://blog.csdn.net/caterpillar_here/archive/2006/09/06/1186566.aspx

     

    三.實例

    先下載DWR的JAR包,下載地址:

     

     

    http://getahead.ltd.uk/dwr/

    將demo(dwr-3.0.0.116.rc1-src\core\impl\demo\web\WEB-INF\lib)實例下的jar文件導入新建項目的web-inf/lib目錄下,另外還要加入dwr.jar.

    (注意:要加入commons-logging-1.0.4.jar,缺少有時候會報錯.)

    1.在web.xml文件中注冊DWRServlet:負責處理客戶端的請求,并呼叫Java物件的是DWRServlet

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
     3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     4     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
     5     http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">    
     6     <servlet>
     7         <servlet-name>dwr-invoker</servlet-name>
     8         <servlet-class>
     9             org.directwebremoting.servlet.DwrServlet
    10         </servlet-class>
    11         <init-param>
    12             <param-name>debug</param-name>
    13             <param-value>true</param-value>
    14         </init-param>
    15     </servlet>
    16     
    17     <servlet-mapping>
    18         <servlet-name>dwr-invoker</servlet-name>
    19         <url-pattern>/dwr/*</url-pattern>
    20     </servlet-mapping>    
    21 </web-app>

    2.編寫Java物件,即業務Bean:

    1 package helloWorld;
    2 
    3 public class Service {
    4     
    5     public String sayHello(String yourName) { 
    6         //可以是訪問數據庫的復雜代碼
    7         return "Hello World " + yourName;
    8         }
    9 }

    3.編寫dwr.xml:客戶端要呼叫這個Java物件,傳給它參數,而返回一個字串,客戶端再展示這個字串,很神奇吧?其實就是是要告訴DWRServlet這件事情:

    1 <?xml version="1.0" encoding="UTF-8"?>
    2 <!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://getahead.org/dwr/dwr20.dtd">
    3 <dwr>
    4     <allow>
    5         <create creator="new" javascript="service">
    6             <param name="class" value="helloWorld.Service" />
    7         </create>
    8     </allow>
    9 </dwr>

    4.測試DWR

    將代碼放入應用服務器(比如Tomcat),啟動。然后在地址欄輸入http://localhost:8080/你的工程/dwr

    5.編寫一個jsp
    接下來最后一步就是創建一個jsp文件
    1) 要引用幾個dwr的js,其中engine.js必須要,如果需要用到dwr提供的一些方便的工具要引用util.js
    2) 然后還要引用dwr自動生成的js,dwr/interface/service.js,注意js名字要和dwr.xml配置的一樣
     3) js里的service.sayHello和java類的那個有一點區別,多了個參數,用來callback返回的數據
    index.jsp
     1 <%@ page language="java" pageEncoding="UTF-8"%>
     2 <html>
     3     <head>
     4         <title>testDWR</title>
     5         <script type='text/javascript' src='dwr/util.js'> </script>
     6         <script type='text/javascript' src='dwr/engine.js'> </script>
     7         <script type="text/javascript" src="dwr/interface/service.js"></script>
     8         <script type="text/javascript">
     9             function firstDwr() {
    10                 service.sayHello("Jorwen", callBackHello);
    11             }
    12             function callBackHello(data) {
    13                 alert(data);
    14             }
    15         </script>
    16     </head>
    17     <body>
    18         <input type="button" name="button" value="測試" onclick="firstDwr();">
    19     </body>
    20 </html>
    6.地址欄輸入http://localhost:8080/你的工程/index.jsp 顯示的結果如下:

     


     



    posted @ 2011-10-10 16:07 簡簡單單 | 編輯 收藏

    本文介紹了幾乎所有關于對象的基本概念,什么是對象,如何創建對象,對象的屬性的設置和讀取,刪除屬性的方法,構造函數,對象原型,父類,子類,繼承等等。
    1.對象
    * 對象是一種復合數據類型,它們將多個數據值集中在一個單元中,而且運行使用名字來存取這些值。解釋對象的另一種方式是,對象是一個無序的屬性集合,每個屬性都有自己的名字和值。存儲在對象中的已命名的值可以是數字和字符串這樣的原始值,也可以是對象。
    */
    var o = new Object();


    2.對象直接量創建對象
    * 對象直接量由屬性說明列表構成,列表包含在大括號中,其中的屬性說明由逗號隔開。
    * 對象直接量中的每個屬性說明都由屬性名加上冒號和屬性值構成。
    */
    var zhangsan = {name:”zhangsan”, age:34, married:true};
    window.alert(typeof zhangsan); //輸出object

    3.屬性的讀取和設置
    * 對象的屬性通過點號運算符讀取和設置。對象的新屬性可以通過直接創建。
    */
    window.alert(zhangsan.car); //輸出undefined
    zhangsan.car=”BMW”; //直接賦值
    window.alert(zhangsan.car); //輸出BMW

     4.屬性的枚舉
    * 通過for循環枚舉每一個屬性,順序不能保證固定。
    * 注意枚舉出的是屬性名稱,并不是屬性值。
    */
    var values = “”;
    for(var v in zhangsan)values += v+”\n”; //枚舉每一個屬性
    window.alert(values);

    5.屬性的刪除使用delete,如delete zhangsan.car
    */

    6.構造函數
    * 構造函數是具有兩個特性的javascript函數:
    * (1)它由new 運算符調用;
    * (2)傳遞給它的是一個對新創建的空對象的應用,將該引用作為關鍵字this的值,而且它還要對新創建的對象進行適當的初始化。
    * 記住:構造函數只是初始化對象,并不返回新創建的對象。
    */
    function Rectangle(w, h){
    this.width = w;
    this.height = h;
    }
    var ret1 = new Rectangle(2, 1);
    //注意構造函數是如何使用它的參數來初始化this關鍵字所引用的對象的屬性

    7.對象的方法
    * 所謂方法,就是通過對象調用的javascript函數。我們知道,函數就是數值,它們所使用的名字沒有任何特殊之處,可以將函數賦給任何變量,甚至賦給一個對象的任何屬性,那么這個屬性就是對象的方法了。
    * 在對象的方法體內,關鍵字this的值就成了調用該方法的對象。
    */
    function print(){}
    ret1.print = print;

     8.關于this的討論
    * 任何一個用作方法的函數都會得到一個額外的實際參數,即調用該函數的對象。由于方法通常是對那個對象執行某種操作,所以要表達函數作用于對象這一事實,最好采用方法的調用語法。
    * 如rect.setSize(width, height);
    * setSize(rect, width, height);
    * 雖然這兩行代碼對對象rect執行相同的操作,但是第一行代碼在表達對象rect是操作的焦點(或者說操作的目標)這一觀點時顯然清楚得多。
    *
    * 雖然有區別地對待函數和方法比較有用,但實際上它們之間的差別并不大。回憶一下,函數是存儲在變量中的值,而那個變量也不過是全局對象的一個屬性。因此,當你調用一個函數時,實際上調用的是全局對象的一個方法。
    * 在這樣的函數中,關鍵字this引用的是全局對象。所以函數和方法之間在技術上沒有差別,真正的差別在于設計和目的上,方法是用來對this對象進行操作的,而函數通常會是獨立的,并不需要使用this對象。
    */
    (function f(){
    var values = “”;
    for(var v in this)values += v + ” “;
    window.alert(values);
    })(); //返回window對象的所有屬性和方法名稱

    9.原型對象和繼承
    * javascript每個對象都有原型對象,每個對象都繼承原型對象的所有屬性。
    * 一個對象的原型是由創建并初始化該對象的構造函數定義的。javascript中的所有函數都有prototype屬性,它引用了一個對象。雖然原型對象初始化時是空的,
    * 但是你在其中定義的任何屬性都會被該構造函數創建的所有對象繼承。
    *
    * 構造函數定義了對象的類,并初始化了類中狀態變量的屬性,如width和height。因為原型對象和構造函數關聯在一起,所以類的每個成員都從原型對象繼承了相同的屬性。
    * 這說明原型對象是存放方法和其他常量屬性的理想場所。

    * 注意,繼承是在查詢一個屬性值時自動發生的。屬性并非從原型對象復制到新的對象的,它們只不過看起來像是那些對象的屬性。這其中有兩點重要的含義。
    * 一是使用原型對象可以大量減少每個對象對內存的需求量,因為對象可以繼承許多屬性。二是即使屬性在對象被創建之后才添加到它的原型對象中,對象也能夠繼承這些屬性。
    *
    * 每個類都有一個原型對象,這個原型對象都具有一套屬性。但是實際上卻有大量的類實例,每個實例都能繼承原型對象的屬性。由于一個原型對象能夠被多個對象繼承,所以javascript
    * 必須強化讀寫屬性值之間的不對稱性。在讀對象o的屬性p時,javas會首先檢查o是否具有一個名為p的屬性。如果o沒有這個屬性,javascript就會再檢查o的原型對象是否具有這個屬性。這樣才使得以原型為基礎的繼承機制起作用。
    *
    * 但是當寫一個屬性的值時,javascript并不會檢查原型對象中是否有這個屬性的值。因為,如果允許改變原型對象的這一屬性,那就改變了整個對象類的p值,包括其他new出來的對象變量的屬性值。
    *
    * 因此,屬性的繼承只發生在讀屬性值時,而不會發生在寫屬性值時。如果你設置的對象o的屬性p是對象o從它的原型對象繼承而來的,那么結果就是你直接在對象o中創建了一個新屬性p。現在o已經有了一個自己的名為p的屬性,它就不會再從它的原型對象繼承p的值了。當你讀p的值時,java首先查詢o的屬性。
    * 由于它發現了o中定義的p,就不必再查詢原型對象,也就不會再發現原型對象中定義的p值了。我們稱之為o中的p”遮蔽”了或者說”隱藏”了原型對象中的屬性p。
    *
    * 因為原型對象的屬性被一個類的所有對象共享,所以通常只用它們來定義類中所有對象的相同的屬性。這使得原型對象適用于方法定義和常量的定義。
    */

    10. 實例屬性、實例方法、類屬性、類方法
    * 每個對象都有它自己單獨的實例屬性的副本。我們說javas中的實例屬性是那些在對象中用構造函數創建的或初始化的屬性。
    *
    * 實例方法是由特定對象或實例調用的。實例方法使用了關鍵字this來引用它們要操作的對象或實例。雖然一個類的任何實例都可以調用實例方法,并不意味著每個對象都像實例屬性那樣含有自己專有的方法副本。相反,每個實例方法都是由類的所有實例共享的。在javascript中,給類定義一個實例方法,是通過把構造函數的原型對象中的一個屬性設置為函數值來實現的。
    * 這樣,由那個構造函數創建的所有實例都會共享一個已繼承的對函數的引用。
    *
    * 類屬性表示在所有類實例中只有一個副本。在javascript中,類屬性本質上就是全局變量。但是它們與一個類關聯在一起,在javascript的名字空間中擁有一個邏輯位置,這樣它們就不會被其他的同名屬性覆蓋。
    * 如Circle.PI=3.14。雖然Circle是一個構造函數,但是由于javascript函數是對象,所以我們可以創建函數的屬性,就像創建對象的屬性一樣。
    *
    * 類方法與類屬性相似。在javascript中,要定義一個類方法,只需要用合適的函數作為構造函數的屬性即可。
    */

    11. 父類和子類
    * 在javascript中,Object類所有類的父類,處于類層次圖的最上層。所有的類都繼承了Object類的所有方法。
    *
    * 我們已經學會了對象如何從它們構造函數的原型對象中繼承屬性,那么它們又是如何繼承類Object的屬性哪?我們知道,原型對象本身就是一個對象,它是由構造函數Object()創建的。
    * 這就意味著原型對象繼承了Object.prototype屬性。因此,ret1會繼承Rectangle.prototype的屬性,還會繼承Object.prototype的屬性。整因為所有對象的prototype屬性會繼承Object.prototype屬性,
    * 所以所有javascript子類都繼承了Object的所有屬性,也即Object類是javascript的根類,處于類層次圖的最頂層。
    */

     12.使用[]讀取和設置對象的屬性
    * 通常會采用點號運算符訪問對象的屬性,但是點號后面的屬性是標識符。在javascript中,標識符必須逐字輸入,它們不是一種數據類型。如果程序中屬性是動態的、不確定的,那么我們將無法訪問。
    * 前面解釋過,對象是一群屬性的集合,也就是數組。那么可以使用數組訪問成員的運算符[]來訪問對象的屬性。[]中是屬性名稱,是字符串類型,我們就可以動態的確定對象屬性名稱了。
    *
    * 使用[]運算符的對象我們也稱之為關聯數組。關聯數組是一種數據結構,允許你動態地將任意值和任意字符串關聯在一起。實際上,javascript對象在內部就是用關聯數組實現的。使用點號運算符只是為了是他們看起來更像C++和Java的靜態對象而已。
    *
    * 前面的for/in循環實際上是對數組的操作。
    *
    * 我們通常意義說的數組是將任何值和非負整數關聯在一起的數據結構。
    *
    * 數組實際上是一個具有額外功能層的對象。如var a = new Array();window.alert(typeof a);輸出Object。
    */

    13. Object類的屬性和方法
    * constructor屬性表示初始化該對象的構造函數。因此,可以使用該屬性來判斷對象的類型。
    */
    function A(){return “aaaaaaaaa”};
    var a = new A();
    window.alert(a.constructor); //輸出的是A的函數定義
    window.alert(a.constructor==A); //結果是true
    window.alert(a.constructor()); //輸出aaaaaaaaaa

    /**
    * toString()方法沒有任何實際參數,它返回的是一個字符串,該字符串代表了調用它的對象的類型或值。當javascript需要將一個對象轉化成字符串時就調用這個對象的toString方法。
    * 例如,當用運算符”+”把一個字符串和一個對象連接到一起時,或者把一個對象傳遞給alert()或document.write()方法時,就會調用toString()方法。
    */

     

    posted @ 2011-10-10 16:06 簡簡單單 | 編輯 收藏

         摘要: 一.概述:Dom4j is an easy to use, open source library for working with XML, XPath and XSLT on the Java platform using the Java Collections Framework and with full support for DOM, SAX and JAXP. dom4j是一個Ja...  閱讀全文

    posted @ 2011-10-10 15:44 簡簡單單 閱讀(659) | 評論 (0)編輯 收藏

         摘要: 一.數據庫連接池的概念及作用     數據庫連接是一種關鍵的有限的昂貴的資源,這一點在多用戶的網頁應用程序中體現得尤為突出。對數據庫連接的管理能顯著影響到整個應用程序的伸縮性和健壯性,影響到程序的性能指標。數據庫連接池正是針對這個問題提出來的。數據庫連接池負責分配、管理和釋放數據庫連接,它允許應用程序重復使用一個現有的數據庫連接,而再不是重新建立一個;釋放空閑時間超...  閱讀全文

    posted @ 2011-10-10 15:38 簡簡單單 閱讀(1018) | 評論 (0)編輯 收藏

    主站蜘蛛池模板: 国产乱弄免费视频| 永久免费A∨片在线观看| 亚洲人成未满十八禁网站| 亚洲伊人精品综合在合线| 亚洲精品国产成人| 亚洲美女激情视频| 亚洲系列国产精品制服丝袜第| 337p日本欧洲亚洲大胆色噜噜 | 99精品免费观看| 一级毛片在线免费看| 在线看片免费人成视久网| 色老头永久免费网站| 免费无码A片一区二三区| 免费激情视频网站| 日韩亚洲精品福利| 精品亚洲视频在线观看| 亚洲色自偷自拍另类小说| 亚洲AV午夜成人影院老师机影院| 久久亚洲国产成人亚| 亚洲电影在线免费观看| 亚洲乱码在线观看| 亚洲av色香蕉一区二区三区| 无遮挡a级毛片免费看| 二个人看的www免费视频| 久久久久久久99精品免费| av大片在线无码免费| 色视频色露露永久免费观看| mm1313亚洲国产精品美女| 亚洲精品乱码久久久久久按摩| 亚洲国产成人久久综合一| 亚洲伦理中文字幕| 欧美日韩亚洲精品| 九九99热免费最新版| 三年片在线观看免费大全电影| 性短视频在线观看免费不卡流畅| 免费看大美女大黄大色| 亚洲熟女少妇一区二区| 亚洲字幕在线观看| 黄色网址大全免费| 午夜无码A级毛片免费视频| 好吊妞视频免费视频|