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

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

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

    心的方向

    新的征途......
    posts - 75,comments - 19,trackbacks - 0

     web.xml配置的詳細(xì)說明1

    1 定義頭和根元素
    部署描述符文件就像所有XML文件一樣,必須以一個XML頭開始。這個頭聲明可以使用的XML版本并給出文件的字符編碼。
    DOCYTPE聲明必須立即出現(xiàn)在此頭之后。這個聲明告訴服務(wù)器適用的servlet規(guī)范的版本(如2.2或2.3)并指定管理此文件其余部分內(nèi)容的語法的DTD(Document Type Definition,文檔類型定義)。
    所有部署描述符文件的頂層(根)元素為web-app。請注意,XML元素不像HTML,他們是大小寫敏感的。因此,web-App和WEB-APP都是不合法的,web-app必須用小寫。
    2 部署描述符文件內(nèi)的元素次序
    XML 元素不僅是大小寫敏感的,而且它們還對出現(xiàn)在其他元素中的次序敏感。例如,XML頭必須是文件中的第一項,DOCTYPE聲明必須是第二項,而web- app元素必須是第三項。在web-app元素內(nèi),元素的次序也很重要。服務(wù)器不一定強(qiáng)制要求這種次序,但它們允許(實際上有些服務(wù)器就是這樣做的)完全拒絕執(zhí)行含有次序不正確的元素的Web應(yīng)用。這表示使用非標(biāo)準(zhǔn)元素次序的web.xml文件是不可移植的。
    下面的列表給出了所有可直接出現(xiàn)在web-app元素內(nèi)的合法元素所必需的次序。例如,此列表說明servlet元素必須出現(xiàn)在所有servlet-mapping元素之前。請注意,所有這些元素都是可選的。因此,可以省略掉某一元素,但不能把它放于不正確的位置。
    l icon icon元素指出IDE和GUI工具用來表示W(wǎng)eb應(yīng)用的一個和兩個圖像文件的位置。
    l display-name display-name元素提供GUI工具可能會用來標(biāo)記這個特定的Web應(yīng)用的一個名稱。
    l description description元素給出與此有關(guān)的說明性文本。
    l context-param context-param元素聲明應(yīng)用范圍內(nèi)的初始化參數(shù)。
    l filter 過濾器元素將一個名字與一個實現(xiàn)javax.servlet.Filter接口的類相關(guān)聯(lián)。
    l filter-mapping 一旦命名了一個過濾器,就要利用filter-mapping元素把它與一個或多個servlet或JSP頁面相關(guān)聯(lián)。
    l listener servlet API的版本2.3增加了對事件監(jiān)聽程序的支持,事件監(jiān)聽程序在建立、修改和刪除會話或servlet環(huán)境時得到通知。Listener元素指出事件監(jiān)聽程序類。
    l servlet 在向servlet或JSP頁面制定初始化參數(shù)或定制URL時,必須首先命名servlet或JSP頁面。Servlet元素就是用來完成此項任務(wù)的。
    l servlet-mapping 服務(wù)器一般為servlet提供一個缺省的URL:http://host/webAppPrefix/servlet/ServletName。但是,常常會更改這個URL,以便servlet可以訪問初始化參數(shù)或更容易地處理相對URL。在更改缺省URL時,使用servlet-mapping元素。
    l session-config 如果某個會話在一定時間內(nèi)未被訪問,服務(wù)器可以拋棄它以節(jié)省內(nèi)存。可通過使用HttpSession的setMaxInactiveInterval方法明確設(shè)置單個會話對象的超時值,或者可利用session-config元素制定缺省超時值。
    l mime-mapping 如果Web應(yīng)用具有想到特殊的文件,希望能保證給他們分配特定的MIME類型,則mime-mapping元素提供這種保證。
    l welcom-file-list welcome-file-list元素指示服務(wù)器在收到引用一個目錄名而不是文件名的URL時,使用哪個文件。
    l error-page error-page元素使得在返回特定HTTP狀態(tài)代碼時,或者特定類型的異常被拋出時,能夠制定將要顯示的頁面。
    l taglib taglib元素對標(biāo)記庫描述符文件(Tag Libraryu Descriptor file)指定別名。此功能使你能夠更改TLD文件的位置,而不用編輯使用這些文件的JSP頁面。
    l resource-env-ref resource-env-ref元素聲明與資源相關(guān)的一個管理對象。
    l resource-ref resource-ref元素聲明一個資源工廠使用的外部資源。
    l security-constraint security-constraint元素制定應(yīng)該保護(hù)的URL。它與login-config元素聯(lián)合使用
    l login-config 用login-config元素來指定服務(wù)器應(yīng)該怎樣給試圖訪問受保護(hù)頁面的用戶授權(quán)。它與sercurity-constraint元素聯(lián)合使用。
    l security-role security-role元素給出安全角色的一個列表,這些角色將出現(xiàn)在servlet元素內(nèi)的security-role-ref元素的role-name子元素中。分別地聲明角色可使高級IDE處理安全信息更為容易。
    l env-entry env-entry元素聲明Web應(yīng)用的環(huán)境項。
    l ejb-ref ejb-ref元素聲明一個EJB的主目錄的引用。
    l ejb-local-ref ejb-local-ref元素聲明一個EJB的本地主目錄的應(yīng)用。
    3 分配名稱和定制的UL
    在web.xml中完成的一個最常見的任務(wù)是對servlet或JSP頁面給出名稱和定制的URL。用servlet元素分配名稱,使用servlet-mapping元素將定制的URL與剛分配的名稱相關(guān)聯(lián)。
    3.1 分配名稱
    為了提供初始化參數(shù),對servlet或JSP頁面定義一個定制URL或分配一個安全角色,必須首先給servlet或JSP頁面一個名稱。可通過 servlet元素分配一個名稱。最常見的格式包括servlet-name和servlet-class子元素(在web-app元素內(nèi)),如下所示:
    <servlet>
    <servlet-name>Test</servlet-name>
    <servlet-class>moreservlets.TestServlet</servlet-class>
    </servlet>
    這表示位于WEB-INF/classes/moreservlets/TestServlet的servlet已經(jīng)得到了注冊名Test。給 servlet一個名稱具有兩個主要的含義。首先,初始化參數(shù)、定制的URL模式以及其他定制通過此注冊名而不是類名引用此servlet。其次,可在 URL而不是類名中使用此名稱。因此,利用剛才給出的定義,URL http://host/webAppPrefix/servlet/Test 可用于 http://host/webAppPrefix/servlet/moreservlets.TestServlet 的場所。
    請記住:XML元素不僅是大小寫敏感的,而且定義它們的次序也很重要。例如,web-app元素內(nèi)所有servlet元素必須位于所有servlet- mapping元素(下一小節(jié)介紹)之前,而且還要位于5.6節(jié)和5.11節(jié)討論的與過濾器或文檔相關(guān)的元素(如果有的話)之前。類似地,servlet 的servlet-name子元素也必須出現(xiàn)在servlet-class之前。5.2節(jié)"部署描述符文件內(nèi)的元素次序"將詳細(xì)介紹這種必需的次序。
    例如,程序清單5-1給出了一個名為TestServlet的簡單servlet,它駐留在moreservlets程序包中。因為此servlet是扎根在一個名為deployDemo的目錄中的Web應(yīng)用的組成部分,所以TestServlet.class放在deployDemo/WEB- INF/classes/moreservlets中。程序清單5-2給出將放置在deployDemo/WEB-INF/內(nèi)的web.xml文件的一部分。此web.xml文件使用servlet-name和servlet-class元素將名稱Test與TestServlet.class相關(guān)聯(lián)。圖 5-1和圖5-2分別顯示利用缺省URL和注冊名調(diào)用TestServlet時的結(jié)果。
    程序清單5-1 TestServlet.java
    package moreservlets;

    import java.io.*;
    import javax.servlet.*;
    import javax.servlet.http.*;

    /** Simple servlet used to illustrate servlet naming
    * and custom URLs.
    * <P>
    * Taken from More Servlets and JavaServer Pages
    * from Prentice Hall and Sun Microsystems Press,
    * http://www.moreservlets.com/.
    * © 2002 Marty Hall; may be freely used or adapted.
    */

    public class TestServlet extends HttpServlet {
    public void doGet(HttpServletRequest request,
    HttpServletResponse response)
    throws ServletException, IOException {
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    String uri = request.getRequestURI();
    out.println(ServletUtilities.headWithTitle("Test Servlet") +
    "<BODY BGCOLOR=\"#FDF5E6\">\n" +
    "<H2>URI: " + uri + "</H2>\n" +
    "</BODY></HTML>");
    }
    }

    程序清單5-2 web.xml(說明servlet名稱的摘錄)
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "

    <web-app>
    <!-- … -->
    <servlet>
    <servlet-name>Test</servlet-name>
    <servlet-class>moreservlets.TestServlet</servlet-class>
    </servlet>
    <!-- … -->
    </web-app>

    3.2 定義定制的URL
    大多數(shù)服務(wù)器具有一個缺省的serlvet URL:
    http://host/webAppPrefix/servlet/packageName.ServletName。雖然在開發(fā)中使用這個URL很方便,但是我們常常會希望另一個URL用于部署。例如,可能會需要一個出現(xiàn)在Web應(yīng)用頂層的URL(如,http: //host/webAppPrefix/Anyname),并且在此URL中沒有servlet項。位于頂層的URL簡化了相對URL的使用。此外,對許多開發(fā)人員來說,頂層URL看上去比更長更麻煩的缺省URL更簡短。
    事實上,有時需要使用定制的URL。比如,你可能想關(guān)閉缺省URL映射,以便更好地強(qiáng)制實施安全限制或防止用戶意外地訪問無初始化參數(shù)的servlet。如果你禁止了缺省的URL,那么你怎樣訪問servlet呢?這時只有使用定制的URL了。
    為了分配一個定制的URL,可使用servlet-mapping元素及其servlet-name和url-pattern子元素。Servlet- name元素提供了一個任意名稱,可利用此名稱引用相應(yīng)的servlet;url-pattern描述了相對于Web應(yīng)用的根目錄的URL。url- pattern元素的值必須以斜杠(/)起始。
    下面給出一個簡單的web.xml摘錄,它允許使用URL http://host/webAppPrefix/UrlTest而不是http://host/webAppPrefix/servlet/Test
    http: //host/webAppPrefix/servlet/moreservlets.TestServlet。請注意,仍然需要XML頭、 DOCTYPE聲明以及web-app封閉元素。此外,可回憶一下,XML元素出現(xiàn)地次序不是隨意的。特別是,需要把所有servlet元素放在所有 servlet-mapping元素之前。
    <servlet>
    <servlet-name>Test</servlet-name>
    <servlet-class>moreservlets.TestServlet</servlet-class>
    </servlet>
    <!-- ... -->
    <servlet-mapping>
    <servlet-name>Test</servlet-name>
    <url-pattern>/UrlTest</url-pattern>
    </servlet-mapping>
    URL模式還可以包含通配符。例如,下面的小程序指示服務(wù)器發(fā)送所有以Web應(yīng)用的URL前綴開始,以..asp結(jié)束的請求到名為BashMS的servlet。
    <servlet>
    <servlet-name>BashMS</servlet-name>
    <servlet-class>msUtils.ASPTranslator</servlet-class>
    </servlet>
    <!-- ... -->
    <servlet-mapping>
    <servlet-name>BashMS</servlet-name>
    <url-pattern>/*.asp</url-pattern>
    </servlet-mapping>
    3.3 命名JSP頁面
    因為JSP頁面要轉(zhuǎn)換成sevlet,自然希望就像命名servlet一樣命名JSP頁面。畢竟,JSP頁面可能會從初始化參數(shù)、安全設(shè)置或定制的URL中受益,正如普通的serlvet那樣。雖然JSP頁面的后臺實際上是servlet這句話是正確的,但存在一個關(guān)鍵的猜疑:即,你不知道JSP頁面的實際類名(因為系統(tǒng)自己挑選這個名字)。因此,為了命名JSP頁面,可將jsp-file元素替換為servlet-calss元素,如下所示:
    <servlet>
    <servlet-name>Test</servlet-name>
    <jsp-file>/TestPage.jsp</jsp-file>
    </servlet>
    命名JSP頁面的原因與命名servlet的原因完全相同:即為了提供一個與定制設(shè)置(如,初始化參數(shù)和安全設(shè)置)一起使用的名稱,并且,以便能更改激活 JSP頁面的URL(比方說,以便多個URL通過相同頁面得以處理,或者從URL中去掉.jsp擴(kuò)展名)。但是,在設(shè)置初始化參數(shù)時,應(yīng)該注意,JSP頁面是利用jspInit方法,而不是init方法讀取初始化參數(shù)的。
    例如,程序清單5-3給出一個名為TestPage.jsp的簡單JSP頁面,它的工作只是打印出用來激活它的URL的本地部分。TestPage.jsp放置在deployDemo應(yīng)用的頂層。程序清單5-4給出了用來分配一個注冊名PageName,然后將此注冊名與http://host/webAppPrefix/UrlTest2/anything 形式的URL相關(guān)聯(lián)的web.xml文件(即,deployDemo/WEB-INF/web.xml)的一部分。

    程序清單5-3 TestPage.jsp
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
    <HEAD>
    <TITLE>
    JSP Test Page
    </TITLE>
    </HEAD>
    <BODY BGCOLOR="#FDF5E6">
    <H2>URI: <%= request.getRequestURI() %></H2>
    </BODY>
    </HTML>

    程序清單5-4 web.xml(說明JSP頁命名的摘錄)
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "

    <web-app>
    <!-- ... -->
    <servlet>
    <servlet-name>PageName</servlet-name>
    <jsp-file>/TestPage.jsp</jsp-file>
    </servlet>
    <!-- ... -->
    <servlet-mapping>
    <servlet-name> PageName </servlet-name>
    <url-pattern>/UrlTest2/*</url-pattern>
    </servlet-mapping>
    <!-- ... -->
    </web-app>

    轉(zhuǎn)自:http://lizzyostrich.blog.sohu.com/83686972.html

    web.xml的元素
    首先注意 xml是大小寫敏感的

    1、 web.xml的頭和根元素
    必須以一個XML頭開始。這個頭聲明可以使用的XML版本并給出文件的字符編碼。
    DOCYTPE聲明必須立即出現(xiàn)在此頭之后。這個聲明告訴服務(wù)器適用的servlet規(guī)范的版本(如2.2或2.3)并指定管理此文件其余部分內(nèi)容的語法的DTD(Document Type Definition,文檔類型定義)。
    所有部署描述符文件的頂層(根)元素為web-app。
    例(紅色部分是可選項):
    --------------------------------------------------------------------------------------------------------------------------
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
       <web-app id="WebApp">
       </web-app>
    --------------------------------------------------------------------------------------------------------------------------
     2、元素
    以下元素幾乎都是可選項,不過要注意它們是有順序的。雖然有些服務(wù)器要求寬松些,但某些服務(wù)器會拒絕執(zhí)行順序不正確的web應(yīng)用。所以還是按順序?qū)懞?/p>

    --------------------------------------------------------------------------------------------------------------------------
    · icon icon元素指出IDE和GUI工具用來表示W(wǎng)eb應(yīng)用的一個和兩個圖像文件的位置。
    · display-name display-name元素提供GUI工具可能會用來標(biāo)記這個特定的Web應(yīng)用的一個名稱。
    · description description元素給出與此有關(guān)的說明性文本。
    · context-param context-param元素聲明應(yīng)用范圍內(nèi)的初始化參數(shù)。
    · filter 過濾器元素將一個名字與一個實現(xiàn)javax.servlet.Filter接口的類相關(guān)聯(lián)。
    · filter-mapping 一旦命名了一個過濾器,就要利用filter-mapping元素把它與一個或多個servlet或JSP頁面相關(guān)聯(lián)。
    · listener servlet API的版本2.3增加了對事件監(jiān)聽程序的支持,事件監(jiān)聽程序在建立、修改和刪除會話或servlet環(huán)境時得到通知。Listener元素指出事件監(jiān)聽程序類。
    · servlet 在向servlet或JSP頁面制定初始化參數(shù)或定制URL時,必須首先命名servlet或JSP頁面。Servlet元素就是用來完成此項任務(wù)的。
    · servlet-mapping服務(wù)器一般為servlet提供一個缺省的URL:http://host/webAppPrefix/servlet/ServletName。但是,常常會更改這個URL,以便servlet可以訪問初始化參數(shù)或更容易地處理相對URL。在更改缺省URL時,使用servlet-mapping元素。
    ·session-config如果某個會話在一定時間內(nèi)未被訪問,服務(wù)器可以拋棄它以節(jié)省內(nèi)存。可通過使用HttpSession的setMaxInactiveInterval方法明確設(shè)置單個會話對象的超時值,或者可利用session-config元素制定缺省超時值。
    · mime-mapping 如果Web應(yīng)用具有想到特殊的文件,希望能保證給他們分配特定的MIME類型,則mime-mapping元素提供這種保證。
    · welcom-file-list welcome-file-list元素指示服務(wù)器在收到引用一個目錄名而不是文件名的URL時,使用哪個文件。
    · error-page error-page元素使得在返回特定HTTP狀態(tài)代碼時,或者特定類型的異常被拋出時,能夠制定將要顯示的頁面。
    · taglib taglib元素對標(biāo)記庫描述符文件(Tag Libraryu Descriptor file)指定別名。此功能使你能夠更改TLD文件的位置,而不用編輯使用這些文件的JSP頁面。
    · resource-env-ref resource-env-ref元素聲明與資源相關(guān)的一個管理對象。
    · resource-ref resource-ref元素聲明一個資源工廠使用的外部資源。
    · security-constraint security-constraint元素制定應(yīng)該保護(hù)的URL。它與login-config元素聯(lián)合使用
    · login-config 用login-config元素來指定服務(wù)器應(yīng)該怎樣給試圖訪問受保護(hù)頁面的用戶授權(quán)。它與sercurity-constraint元素聯(lián)合使用。
    · security-role security-role元素給出安全角色的一個列表,這些角色將出現(xiàn)在servlet元素內(nèi)的security-role-ref元素的role-name子元素中。分別地聲明角色可使高級IDE處理安全信息更為容易。
    · env-entry env-entry元素聲明Web應(yīng)用的環(huán)境項。
    · ejb-ref ejb-ref元素聲明一個EJB的主目錄的引用。
    · ejb-local-ref ejb-local-ref元素聲明一個EJB的本地主目錄的應(yīng)用。


    該文章的原文地址為:http://www.tkk7.com/fastzch/archive/2007/08/28/140607.html

     

    posted @ 2008-04-06 17:34 阿偉 閱讀(233) | 評論 (0)編輯 收藏
     

    Springweblogic jndi集成

    雖然spring本身是可以直接使用jndi來進(jìn)行獲取一些對象,但是在和weblogic集成的時候往往還是容易出

    現(xiàn)問題(web應(yīng)用的時候出現(xiàn)問題的可能性不大,因為container已經(jīng)做了很多事情了.)但是在ide或者其

    他的應(yīng)用環(huán)境下(不同的jvm的時候),通常找不到provider_url等屬性造成無法找到jndi.

    修改配置文件如下:

    <!-- 通過jndi的方式來調(diào)用datasource,即使不一定是在j2ee環(huán)境中也可以正常使用默認(rèn)情況下,如果

    沒有指定,"java:comp/env/"將放在后面jndi名稱前面

    -->

    <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">

    <property name="jndiName">

    <value>jdbc/myDatasource</value>

    </property>

    <!-- 如果你不想使用 'java:comp/env/'前綴的話請設(shè)置下面的值為true, 默認(rèn)值為false -->

    <property name="resourceRef">

    <value>false</value>

    </property>

    <property name="jndiEnvironment">

    <props>

    Spring連接weblogic-DataSource錯誤

    <!-- The value of Context.PROVIDER_URL -->

    <prop key="java.naming.provider.url">t3://localhost:7001</prop>

    <prop key="java.naming.factory.initial">weblogic.jndi.WLInitialContextFactory

    </prop>

    </props>

    </property>

    </bean>

    注意在設(shè)置的時候由于不在同一個jvm里面,所以一定要設(shè)置provider.urlfactory.initial的屬性值,

    則會出現(xiàn)NoInitialContextException的異常出現(xiàn).

    此外如果和其他的應(yīng)用服務(wù)器集成的話可能不只是要設(shè)置上面的兩個屬性,還要設(shè)置相關(guān)的其他屬性。詳

    細(xì)情況參考:javax.naming.Context類的說明文檔。

    http://java.sun.com/j2se/1.4.2/docs/api/javax/naming/Context.html

    其中設(shè)置的:

    <property name="jndiEnvironment">

    <props>

    <!-- The value of Context.PROVIDER_URL -->

    <prop key="java.naming.provider.url">t3://localhost:7001</prop>

    <prop key="java.naming.factory.initial">weblogic.jndi.WLInitialContextFactory

    </prop>

    </props>

    </property> 實際上就是設(shè)置Context初始化的時候設(shè)置的Properties屬性。

    http://java.mblogger.cn/layout/posts/11849.aspx

    =====================================================================

    =====================================================================

    各種應(yīng)用服務(wù)器的不同的properties集合:

    websphere:

    java.naming.provider.url->iiop://websphere.machine.domain.com:900

    java.naming.factory.initial ->com.ibm.websphere.naming.WsnInitialContextFactory

    java.naming.factory.url.pkgs ->com.ibm.ws.naming

    org.omg.CORBA.ORBClass->com.ibm.rmi.iiop.ORB

    org.omg.CORBA.ORBSingletonClass->com.ibm.rmi.corba.ORBSingleton

    javax.rmi.CORBA.UtilClass->com.ibm.rmi.javax.rmi.CORBA.Util

    javax.rmi.CORBA.StubClass->com.ibm.rmi.javax.rmi.CORBA.StubDelegateImpl

    javax.rmi.CORBA.PortableRemoteObjectClass->com.ibm.rmi.javax.rmi.PortableRemoteObject

    weblogic:

    java.naming.factory.initial -> weblogic.jndi.WLInitialContextFactory

    java.naming.provider.url -> t3://localhost:7001

    jboss:

    ava.naming.factory.initial ->org.jnp.interfaces.NamingContextFactory

    java.naming.factory.url.pkgs->org.jboss.naming.client

    java.naming.provider.url ->jnp://10.0.0.18:1099

    sunone IMQ ldap:

    java.naming.provider.url -> ldap://localhost:389/dc=yusong,dc=com

    java.naming.factory.initial -> com.sun.jndi.ldap.LdapCtxFactory

    sunone Application Server:

    java.naming.provider.url -> iiop://192.168.0.34:3700

    java.naming.factory.initial -> com.sun.jndi.cosnaming.CNCtxFactory

    oracle oc4j:

    java.naming.factory.initial->com.evermind.server.ApplicationClientInitialContextFactory

    java.naming.provider.url->ormi://localhost/bmpapp

    posted @ 2008-03-01 01:01 阿偉 閱讀(3493) | 評論 (0)編輯 收藏

    配置WEB.XML ,讓SESSION在頁面中一直打開.

    <!-- spring中對hibernate的一個session支持,直到頁面執(zhí)行完后才能關(guān)閉 -->
    <filter>
      <filter-name>opensession</filter-name>
      <filter-class>
       org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
      </filter-class>

    <!--  當(dāng)遇到所有的.do文件都要按照此設(shè)置 -->
     </filter>
     <filter-mapping>
      <filter-name>opensession</filter-name>
      <url-pattern>*.do</url-pattern>
     </filter-mapping>
    posted @ 2008-02-26 23:02 阿偉 閱讀(927) | 評論 (0)編輯 收藏

    1.在weblogic目錄下的serverlib下添加mysql驅(qū)動

    mysql-connector-java-3.1.11-bin.jar

    2.在weblogic目錄下的commonbin下找到commEnv.cmd打開

    找到set weblogic_classpath= 后邊加上mysql驅(qū)動的路徑

    例:%WL_HOME%\server\lib\mysql-connector-java-3.1.11-bin.jar
    (@rem set up WebLogic Server's class path
    set WEBLOGIC_CLASSPATH=%PATCH_CLASSPATH%;%JAVA_HOME%\lib\tools.jar;%WL_HOME%\server\lib\weblogic_sp.jar;%WL_HOME%\server\lib\weblogic.jar;%WL_HOME%\server\lib\webservices.jar;%WL_HOME%\server\lib\MySQL5.0 driver.zip)

    3.創(chuàng)建domain

    4.在開始菜單打開start AdminServer for weblogic Server domain

    等到running狀態(tài)

    5.打開console 輸入用戶名密碼。

    6.點開Service->JDBC->Data Source

    7.JDBC Data Source Properties 頁面

    Name和JNDI Name可以一樣 我起名為MySQLJDBCDataSource

    Database Type:選擇MySQL

    Database Driver:選擇第一個com包下的驅(qū)動就可以 Next.

    8.Transaction Options

    選擇倒數(shù)第二個Emulate Two-Phase Commit Next.

    9.Connection Properties

    Database Name :自己的數(shù)據(jù)庫名 例如:test

    Host Name :主機(jī)名 例如:localhost或192.168.1.117

    Port :3306 (mysql默認(rèn))

    Database User Name:數(shù)據(jù)庫用戶名

    Password :數(shù)據(jù)庫密碼

    Confirm Password :同上 Next

    10.Test Database Connection

    可以點擊Test Configuration 測試一下數(shù)據(jù)庫連接。Next

    11.Select Targets

    選擇發(fā)布到哪個AdminServer的JNDI樹上。Next

    12.點擊左上的Activate Changes 如果沒有異常就OK了哦。

    友情提示:

    1) 如果你直接在weblogic下配連接池而不在weblogic下的domain下配置,可以跳過1,2步。

    2) 如果配置成功后你可以在console下的Environment->Servers頁面點擊你的AdminServer(admin),然后View JNDI Tree中看到你剛配置的JNDI名。

    posted @ 2008-02-26 10:11 阿偉 閱讀(373) | 評論 (0)編輯 收藏
     Weblogic9.0圖解安裝   (詳細(xì)可參考BEA官方網(wǎng)站:http://e-docs.bea.com/wlp/docs92/index.html)
    初次使用Weblogic9.0圖解安裝


    weblogic1.jpg

    weblogic2.jpg

    weblogic3.jpg

    weblogic4.jpg

    weblogic9.jpg

    weblogic10.jpg

    weblogic7.jpg

    weblogic8.jpg

    初次使用Weblogic,需要對其進(jìn)行域的配置。現(xiàn)在我就圖解說明怎樣配置Weblogic9.0


    weblogic1.jpg

    weblogic2.jpg

    weblogic3.jpg

    weblogic4.jpg

    weblogic9.jpg

    weblogic10.jpg

    weblogic7.jpg

    weblogic8.jpg

     
     

    Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1636515

    posted @ 2008-02-25 16:58 阿偉 閱讀(1856) | 評論 (0)編輯 收藏

    Java系統(tǒng)中內(nèi)存泄漏測試方法的研究

    本文鏈接:http://user.qzone.qq.com/18485108/blog/1203413108
    摘 要 穩(wěn)定性是衡量軟件系統(tǒng)質(zhì)量的重要指標(biāo),內(nèi)存泄漏是破壞系統(tǒng)穩(wěn)定性的重要因素。由于采用垃圾回收機(jī)制,Java語言的內(nèi)存泄漏的模式與C++等語言相比有很大的不同。全文通過與C++中的內(nèi)存泄漏問題進(jìn)行對比,講述了Java內(nèi)存泄漏的基本原理,以及如何借助Optimizeit profiler工具來測試內(nèi)存泄漏和分析內(nèi)存泄漏的原因,在實踐中證明這是一套行之有效的方法。

      關(guān)鍵詞 Java; 內(nèi)存泄漏; GC(垃圾收集器) 引用; Optimizeit

      問題的提出

      筆者曾經(jīng)參與開發(fā)的網(wǎng)管系統(tǒng),系統(tǒng)規(guī)模龐大,涉及上百萬行代碼。系統(tǒng)主要采用Java語言開發(fā),大體上分為客戶端、服務(wù)器和數(shù)據(jù)庫三個層次。在版本進(jìn)入測試和試用的過程中,現(xiàn)場人員和測試部人員紛紛反映:系統(tǒng)的穩(wěn)定性比較差,經(jīng)常會出現(xiàn)服務(wù)器端運行一晝夜就死機(jī)的現(xiàn)象,客戶端跑死的現(xiàn)象也比較頻繁地發(fā)生。對于網(wǎng)管系統(tǒng)來講,經(jīng)常性的服務(wù)器死機(jī)是個比較嚴(yán)重的問題,因為頻繁的死機(jī)不僅可能導(dǎo)致前后臺數(shù)據(jù)不一致,發(fā)生錯誤,更會引起用戶的不滿,降低客戶的信任度。因此,服務(wù)器端的穩(wěn)定性問題必須盡快解決。

      解決思路

      通過察看服務(wù)器端日志,發(fā)現(xiàn)死機(jī)前服務(wù)器端頻繁拋出OutOfMemoryException內(nèi)存溢出錯誤,因此初步把死機(jī)的原因定位為內(nèi)存泄漏引起內(nèi)存不足,進(jìn)而引起內(nèi)存溢出錯誤。如何查找引起內(nèi)存泄漏的原因呢?有兩種思路:第一種,安排有經(jīng)驗的編程人員對代碼進(jìn)行走查和分析,找出內(nèi)存泄漏發(fā)生的位置;第二種,使用專門的內(nèi)存泄漏測試工具Optimizeit進(jìn)行測試。這兩種方法都是解決系統(tǒng)穩(wěn)定性問題的有效手段,使用內(nèi)存測試工具對于已經(jīng)暴露出來的內(nèi)存泄漏問題的定位和解決非常有效;但是軟件測試的理論也告訴我們,系統(tǒng)中永遠(yuǎn)存在一些沒有暴露出來的問題,而且,系統(tǒng)的穩(wěn)定性問題也不僅僅只是內(nèi)存泄漏的問題,代碼走查是提高系統(tǒng)的整體代碼質(zhì)量乃至解決潛在問題的有效手段。基于這樣的考慮,我們的內(nèi)存穩(wěn)定性工作決定采用代碼走查結(jié)合測試工具的使用,雙管齊下,爭取比較徹底地解決系統(tǒng)的穩(wěn)定性問題。

      在代碼走查的工作中,安排了對系統(tǒng)業(yè)務(wù)和開發(fā)語言工具比較熟悉的開發(fā)人員對應(yīng)用的代碼進(jìn)行了交叉走查,找出代碼中存在的數(shù)據(jù)庫連接聲明和結(jié)果集未關(guān)閉、代碼冗余和低效等故障若干,取得了良好的效果,文中主要講述結(jié)合工具的使用對已經(jīng)出現(xiàn)的內(nèi)存泄漏問題的定位方法。

      內(nèi)存泄漏的基本原理

      在C++語言程序中,使用new操作符創(chuàng)建的對象,在使用完畢后應(yīng)該通過delete操作符顯示地釋放,否則,這些對象將占用堆空間,永遠(yuǎn)沒有辦法得到回收,從而引起內(nèi)存空間的泄漏。如下的簡單代碼就可以引起內(nèi)存的泄漏:

    void function(){
     Int[] vec = new int[5];
    }
      在function()方法執(zhí)行完畢后,vec數(shù)組已經(jīng)是不可達(dá)對象,在C++語言中,這樣的對象永遠(yuǎn)也得不到釋放,稱這種現(xiàn)象為內(nèi)存泄漏。

      而Java是通過垃圾收集器(Garbage Collection,GC)自動管理內(nèi)存的回收,程序員不需要通過調(diào)用函數(shù)來釋放內(nèi)存,但它只能回收無用并且不再被其它對象引用的那些對象所占用的空間。在下面的代碼中,循環(huán)申請Object對象,并將所申請的對象放入一個Vector中,如果僅僅釋放對象本身,但是因為Vector仍然引用該對象,所以這個對象對GC來說是不可回收的。因此,如果對象加入到Vector后,還必須從Vector中刪除,最簡單的方法就是將Vector對象設(shè)置為null。

    Vector v = new Vector(10);
    for (int i = 1; i < 100; i++)
    {
     Object o = new Object();
     v.add(o);
     o = null;
    }//此時,所有的Object對象都沒有被釋放,因為變量v引用這些對象。
      實際上無用,而還被引用的對象,GC就無能為力了(事實上GC認(rèn)為它還有用),這一點是導(dǎo)致內(nèi)存泄漏最重要的原因。

      Java的內(nèi)存回收機(jī)制可以形象地理解為在堆空間中引入了重力場,已經(jīng)加載的類的靜態(tài)變量和處于活動線程的堆棧空間的變量是這個空間的牽引對象。這里牽引對象是指按照J(rèn)ava語言規(guī)范,即便沒有其它對象保持對它的引用也不能夠被回收的對象,即Java內(nèi)存空間中的本原對象。當(dāng)然類可能被去加載,活動線程的堆棧也是不斷變化的,牽引對象的集合也是不斷變化的。對于堆空間中的任何一個對象,如果存在一條或者多條從某個或者某幾個牽引對象到該對象的引用鏈,則就是可達(dá)對象,可以形象地理解為從牽引對象伸出的引用鏈將其拉住,避免掉到回收池中;而其它的不可達(dá)對象由于不存在牽引對象的拉力,在重力的作用下將掉入回收池。在圖1中,A、B、C、D、E、F六個對象都被牽引對象所直接或者間接地“牽引”,使得它們避免在重力的作用下掉入回收池。如果TR1-A鏈和TR2-D鏈斷開,則A、B、C三個對象由于失去牽引,在重力的作用下掉入回收池(被回收),D對象也是同樣的原因掉入回收池,而F對象仍然存在一個牽引鏈(TR3-E-F),所以不會被回收,如圖2、3所示。

      
      圖1 初始狀態(tài)

      
      圖2 TR1-A鏈和TR2-D鏈斷開,A、B、C、D掉入回收池

      
      圖3 A、B、C、D四個對象被回收

      通過前面的介紹可以看到,由于采用了垃圾回收機(jī)制,任何不可達(dá)對象都可以由垃圾收集線程回收。因此通常說的Java內(nèi)存泄漏其實是指無意識的、非故意的對象引用,或者無意識的對象保持。無意識的對象引用是指代碼的開發(fā)人員本來已經(jīng)對對象使用完畢,卻因為編碼的錯誤而意外地保存了對該對象的引用(這個引用的存在并不是編碼人員的主觀意愿),從而使得該對象一直無法被垃圾回收器回收掉,這種本來以為可以釋放掉的卻最終未能被釋放的空間可以認(rèn)為是被“泄漏了”。

      這里通過一個例子來演示Java的內(nèi)存泄漏。假設(shè)有一個日志類Logger,其提供一個靜態(tài)的log(String msg)方法,任何其它類都可以調(diào)用Logger.Log(message)來將message的內(nèi)容記錄到系統(tǒng)的日志文件中。Logger類有一個類型為HashMap的靜態(tài)變量temp,每次在執(zhí)行l(wèi)og(message)方法的時候,都首先將message的值丟入temp中(以當(dāng)前線程+當(dāng)前時間為鍵),在方法退出之前再從temp中將以當(dāng)前線程和當(dāng)前時間為鍵的條目刪除。注意,這里當(dāng)前時間是不斷變化的,所以log方法在退出之前執(zhí)行刪除條目的操作并不能刪除方法執(zhí)行之初丟入的條目。這樣,任何一個作為參數(shù)傳給log方法的字符串最終由于被Logger的靜態(tài)變量temp引用,而無法得到回收,這種違背實現(xiàn)者主觀意圖的無意識的對象保持就是我們所說的Java內(nèi)存泄漏。
    鑒別泄漏對象的方法

      一般說來,一個正常的系統(tǒng)在其運行穩(wěn)定后其內(nèi)存的占用量是基本穩(wěn)定的,不應(yīng)該是無限制的增長的,同樣,對任何一個類的對象的使用個數(shù)也有一個相對穩(wěn)定的上限,不應(yīng)該是持續(xù)增長的。根據(jù)這樣的基本假設(shè),我們可以持續(xù)地觀察系統(tǒng)運行時使用的內(nèi)存的大小和各實例的個數(shù),如果內(nèi)存的大小持續(xù)地增長,則說明系統(tǒng)存在內(nèi)存泄漏,如果某個類的實例的個數(shù)持續(xù)地增長,則說明這個類的實例可能存在泄漏情況。

      Optimizeit是Borland公司的產(chǎn)品,主要用于協(xié)助對軟件系統(tǒng)進(jìn)行代碼優(yōu)化和故障診斷,其功能眾多,使用方便,其中的OptimizeIt Profiler主要用于內(nèi)存泄漏的分析。Profiler的堆視圖(如圖4)就是用來觀察系統(tǒng)運行使用的內(nèi)存大小和各個類的實例分配的個數(shù)的,其界面如圖四所示,各列自左至右分別為類名稱、當(dāng)前實例個數(shù)、自上個標(biāo)記點開始增長的實例個數(shù)、占用的內(nèi)存空間的大小、自上次標(biāo)記點開始增長的內(nèi)存的大小、被釋放的實例的個數(shù)信息、自上次標(biāo)記點開始增長的內(nèi)存的大小被釋放的實例的個數(shù)信息,表的最后一行是匯總數(shù)據(jù),分別表示目前JVM中的對象實例總數(shù)、實例增長總數(shù)、內(nèi)存使用總數(shù)、內(nèi)存使用增長總數(shù)等。

      在實踐中,可以分別在系統(tǒng)運行四個小時、八個小時、十二個小時和二十四個小時時間點記錄當(dāng)時的內(nèi)存狀態(tài)(即抓取當(dāng)時的內(nèi)存快照,是工具提供的功能,這個快照也是供下一步分析使用),找出實例個數(shù)增長的前十位的類,記錄下這十個類的名稱和當(dāng)前實例的個數(shù)。在記錄完數(shù)據(jù)后,點擊Profiler中右上角的Mark按鈕,將該點的狀態(tài)作為下一次記錄數(shù)據(jù)時的比較點。

      
      圖4 Profiler 堆視圖

      系統(tǒng)運行二十四小時以后可以得到四個內(nèi)存快照。對這四個內(nèi)存快照進(jìn)行綜合分析,如果每一次快照的內(nèi)存使用都比上一次有增長,可以認(rèn)定系統(tǒng)存在內(nèi)存泄漏,找出在四個快照中實例個數(shù)都保持增長的類,這些類可以初步被認(rèn)定為存在泄漏。

      分析與定位

      通過上面的數(shù)據(jù)收集和初步分析,可以得出初步結(jié)論:系統(tǒng)是否存在內(nèi)存泄漏和哪些對象存在泄漏(被泄漏),如果結(jié)論是存在泄漏,就可以進(jìn)入分析和定位階段了。

      前面已經(jīng)談到Java中的內(nèi)存泄漏就是無意識的對象保持,簡單地講就是因為編碼的錯誤導(dǎo)致了一條本來不應(yīng)該存在的引用鏈的存在(從而導(dǎo)致了被引用的對象無法釋放),因此內(nèi)存泄漏分析的任務(wù)就是找出這條多余的引用鏈,并找到其形成的原因。前面還講到過牽引對象,包括已經(jīng)加載的類的靜態(tài)變量和處于活動線程的堆棧空間的變量。由于活動線程的堆棧空間是迅速變化的,處于堆棧空間內(nèi)的牽引對象集合是迅速變化的,而作為類的靜態(tài)變量的牽引對象的集合在系統(tǒng)運行期間是相對穩(wěn)定的。

      對每個被泄漏的實例對象,必然存在一條從某個牽引對象出發(fā)到達(dá)該對象的引用鏈。處于堆棧空間的牽引對象在被從棧中彈出后就失去其牽引的能力,變?yōu)榉菭恳龑ο螅虼耍陂L時間的運行后,被泄露的對象基本上都是被作為類的靜態(tài)變量的牽引對象牽引。

      Profiler的內(nèi)存視圖除了堆視圖以外,還包括實例分配視圖(圖5)和實例引用圖(圖6)。

      Profiler的實例引用圖為找出從牽引對象到泄漏對象的引用鏈提供了非常直接的方法,其界面的第二個欄目中顯示的就是從泄漏對象出發(fā)的逆向引用鏈。需要注意的是,當(dāng)一個類的實例存在泄漏時,并非其所有的實例都是被泄漏的,往往只有一部分是被泄漏對象,其它則是正常使用的對象,要判斷哪些是正常的引用鏈,哪些是不正常的引用鏈(引起泄漏的引用鏈)。通過抽取多個實例進(jìn)行引用圖的分析統(tǒng)計以后,可以找出一條或者多條從牽引對象出發(fā)的引用鏈,下面的任務(wù)就是找出這條引用鏈形成的原因。

      實例分配圖提供的功能是對每個類的實例的分配位置進(jìn)行統(tǒng)計,查看實例分配的統(tǒng)計結(jié)果對于分析引用鏈的形成具有一定的作用,因為找到分配鏈與引用鏈的交點往往就可以找到了引用鏈形成的原因,下面將具體介紹。

      
      圖5 實例分配圖

      
      圖6 實例引用圖

      設(shè)想一個實例對象a在方法f中被分配,最終被實例對象b所引用,下面來分析從b到a的引用鏈可能的形成原因。方法f在創(chuàng)建對象a后,對它的使用分為四種情況:1、將a作為返回值返回;2、將a作為參數(shù)調(diào)用其它方法;3、在方法內(nèi)部將a的引用傳遞給其它對象;4、其它情況。其中情況4不會造成由b到a的引用鏈的生成,不用考慮。下面考慮其它三種情況:對于1、2兩種情況,其造成的結(jié)果都是在另一個方法內(nèi)部獲得了對象a的引用,它的分析與方法f的分析完全一樣(遞歸分析);考慮第3種情況:1、假設(shè)方法f直接將對象a的引用加入到對象b,則對象b到a的引用鏈就找到了,分析結(jié)束;2、假設(shè)方法f將對象a的引用加入到對象c,則接下來就需要跟蹤對象c的使用,對象c的分析比對象a的分析步驟更多一些,但大體原理都是一樣的,就是跟蹤對象從創(chuàng)建后被使用的歷程,最終找到其被牽引對象引用的原因。

      現(xiàn)在將泄漏對象的引用鏈以及引用鏈形成的原因找到了,內(nèi)存泄漏測試與分析的工作就到此結(jié)束,接下來的工作就是修改相應(yīng)的設(shè)計或者實現(xiàn)中的錯誤了。

      總結(jié)

      使用上述的測試和分析方法,在實踐中先后進(jìn)行了三次測試,找出了好幾處內(nèi)存泄漏錯誤。系統(tǒng)的穩(wěn)定性得到很大程度的提高,最初運行1~2天就拋出內(nèi)存溢出異常,修改完成后,系統(tǒng)從未出現(xiàn)過內(nèi)存溢出異常。此方法適用于任何使用Java語言開發(fā)的、對穩(wěn)定性有比較高要求的軟件系統(tǒng)。
    posted @ 2008-02-24 18:23 阿偉 閱讀(304) | 評論 (0)編輯 收藏

    1.將數(shù)據(jù)庫驅(qū)動程序的JAR文件放在Tomcat的 common/lib 中

    2.在server.xml中設(shè)置數(shù)據(jù)源,以MySQL數(shù)據(jù)庫為例,如下:
    在<GlobalNamingResources> </GlobalNamingResources>節(jié)點中加入,
          <Resource
          name="jdbc/DBPool"
          type="javax.sql.DataSource"
          password="root"
          driverClassName="com.mysql.jdbc.Driver"
          maxIdle="2"
          maxWait="5000"
          username="root"
          url="jdbc:mysql://127.0.0.1:3306/test"
          maxActive="4"/>
       屬性說明:name,數(shù)據(jù)源名稱,通常取”jdbc/XXX”的格式;
                type,”javax.sql.DataSource”;
                password,數(shù)據(jù)庫用戶密碼;
                driveClassName,數(shù)據(jù)庫驅(qū)動;
                maxIdle,最大空閑數(shù),數(shù)據(jù)庫連接的最大空閑時間。超過空閑時間,數(shù)據(jù)庫連
                         接將被標(biāo)記為不可用,然后被釋放。設(shè)為0表示無限制。
                MaxActive,連接池的最大數(shù)據(jù)庫連接數(shù)。設(shè)為0表示無限制。
                maxWait ,最大建立連接等待時間。如果超過此時間將接到異常。設(shè)為-1表示
                         無限制。

    3.在你的web應(yīng)用程序的web.xml中設(shè)置數(shù)據(jù)源參考,如下:
      在<web-app></web-app>節(jié)點中加入,
      <resource-ref>
        <description>MySQL DB Connection Pool</description>
        <res-ref-name>jdbc/DBPool</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
        <res-sharing-scope>Shareable</res-sharing-scope>
     </resource-ref>
      子節(jié)點說明: description,描述信息;
                   res-ref-name,參考數(shù)據(jù)源名字,同上一步的屬性name;
                   res-type,資源類型,”javax.sql.DataSource”;
                   res-auth,”Container”;
                   res-sharing-scope,”Shareable”;

    4.在web應(yīng)用程序的context.xml中設(shè)置數(shù)據(jù)源鏈接,如下:
      在<Context></Context>節(jié)點中加入,
      <ResourceLink
       name="jdbc/DBPool" 
       type="javax.sql.DataSource" 
       global="jdbc/DBPool"/>
       屬性說明:name,同第2步和第3步的屬性name值,和子節(jié)點res-ref-name值;
                 type,同樣取”javax.sql.DataSource”;
                 global,同name值。
     
    至此,設(shè)置完成,下面是如何使用數(shù)據(jù)庫連接池
    1.建立一個連接池類,DBPool.java,用來創(chuàng)建連接池,代碼如下:
    import javax.naming.Context;
    import javax.naming.InitialContext;
    import javax.naming.NamingException;
    import javax.sql.DataSource;

    public class DBPool {
        private static DataSource pool;
        static {
             Context env = null;
              try {
                  env = (Context) new InitialContext().lookup("java:comp/env");
                  pool = (DataSource)env.lookup("jdbc/DBPool");
                  if(pool==null) 
                      System.err.println("'DBPool' is an unknown DataSource");
                   } catch(NamingException ne) {
                      ne.printStackTrace();
              }
          }
        public static DataSource getPool() {
            return pool;
        }
    }

    2.在要用到數(shù)據(jù)庫操作的類或jsp頁面中,用DBPool.getPool().getConnection(),獲得一個Connection對象,就可以進(jìn)行數(shù)據(jù)庫操作,最后別忘了對Connection對象調(diào)用close()方法,注意:這里不會關(guān)閉這個Connection,而是將這個Connection放回數(shù)據(jù)庫連接池。

    posted @ 2008-02-19 15:47 阿偉 閱讀(222) | 評論 (0)編輯 收藏

    substr 方法
    返回一個從指定位置開始的指定長度的子字符串。

    stringvar.substr(start [, length ])

    參數(shù)
    stringvar

    必選項。要提取子字符串的字符串文字或 String 對象。

    start

    必選項。所需的子字符串的起始位置。字符串中的第一個字符的索引為 0。

    length

    可選項。在返回的子字符串中應(yīng)包括的字符個數(shù)。

    說明
    如果 length 為 0 或負(fù)數(shù),將返回一個空字符串。如果沒有指定該參數(shù),則子字符串將延續(xù)到 stringvar 的最后。

    示例
    下面的示例演示了substr 方法的用法。

    function SubstrDemo(){
       var s, ss;                // 聲明變量。
       var s = "The rain in Spain falls mainly in the plain.";
       ss = s.substr(12, 5);  // 獲取子字符串。
       return(ss);               // 返回 "Spain"。
    }


    substring 方法
    返回位于 String 對象中指定位置的子字符串。

    strVariable.substring(start, end)
    "String Literal".substring(start, end)

    參數(shù)
    start

    指明子字符串的起始位置,該索引從 0 開始起算。

    end

    指明子字符串的結(jié)束位置,該索引從 0 開始起算。

    說明
    substring 方法將返回一個包含從 start 到最后(不包含 end )的子字符串的字符串。

    substring 方法使用 start 和 end 兩者中的較小值作為子字符串的起始點。例如, strvar.substring(0, 3) 和 strvar.substring(3, 0) 將返回相同的子字符串。

    如果 start 或 end 為 NaN 或者負(fù)數(shù),那么將其替換為0。

    子字符串的長度等于 start 和 end 之差的絕對值。例如,在 strvar.substring(0, 3) 和 strvar.substring(3, 0) 返回的子字符串的的長度是 3。

    示例
    下面的示例演示了 substring 方法的用法。

    function SubstringDemo(){
       var ss;                         // 聲明變量。
       var s = "The rain in Spain falls mainly in the plain..";
       ss = s.substring(12, 17);   // 取子字符串。
       return(ss);                     // 返回子字符串。
    }

    posted @ 2008-01-23 16:45 阿偉 閱讀(717) | 評論 (0)編輯 收藏
    轉(zhuǎn)自: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1967495

    第一句話是:優(yōu)秀是一種習(xí)慣。
    這句話是古希臘哲學(xué)家亞里士多德說的。如果說優(yōu)秀是一種習(xí)慣,那么懶惰也是一種習(xí)慣。人出生的時候,除了脾氣會因為天性而有所不同,其他的東西基本都是后天形成的,是家庭影響和教育的結(jié)果。所以,我們的一言一行都是日積月累養(yǎng)成的習(xí)慣。我們有的人形成了很好的習(xí)慣,有的人形成了很壞的習(xí)慣。所以我們從現(xiàn)在起就要把優(yōu)秀變成一種習(xí)慣,使我們的優(yōu)秀行為習(xí)以為常,變成我們的第二天性。讓我們習(xí)慣性地去創(chuàng)造性思考,習(xí)慣性地去認(rèn)真做事情,習(xí)慣性地對別人友好,習(xí)慣性地欣賞大自然。

    注解:要會“裝”,要持續(xù)的、不間斷的“裝”,裝久了就成了真的了,就成了習(xí)慣了,比如準(zhǔn)時到會,每次都按時到會,你裝裝看,你裝30年看看,裝的時間長了就形成了習(xí)慣。:)

    第二句話是:生命是一種過程。
    事情的結(jié)果盡管重要,但是做事情的過程更加重要,因為結(jié)果好了我們會更加快樂,但過程使我們的生命充實。人的生命最后的結(jié)果一定是死亡,我們不能因此說我們的生命沒有意義。世界上很少有永恒。大學(xué)生談戀愛,每天都在信誓旦旦地說我會愛你一輩子,這實際上是不真實的。統(tǒng)計數(shù)據(jù)表明,大學(xué)生談戀愛的 100對里有 90對最后會分手,最后結(jié)婚了的還有一半會離婚。你說愛情能永恒嗎?所以最真實的說法是:“我今天,此時此刻正在真心地愛著你。”明天也許你會失戀,失戀后我們會體驗到失戀的痛苦。這種體驗也是豐富你生命的一個過程。

    注解:生命本身其實是沒有任何意義的,只是你自己賦予你的生命一種你希望實現(xiàn)的意義,因此享受生命的過程就是一種意義所在。

    第三句話是:兩點之間最短的距離并不一定是直線。

    在人與人的關(guān)系以及做事情的過程中,我們很難直截了當(dāng)就把事情做好。我們有時需要等待,有時需要合作,有時需要技巧。我們做事情會碰到很多困難和障礙,有時候我們并不一定要硬挺、硬沖,我們可以選擇有困難繞過去,有障礙繞過去,也許這樣做事情更加順利。大家想一想,我們和別人說話還得想想哪句話更好聽呢。尤其在中國這個比較復(fù)雜的社會中,大家要學(xué)會想辦法諒解別人,要讓人覺得你這個人很成熟,很不錯,你才能把事情做成。

    注解:如果你在考數(shù)學(xué)試題,一定要答兩點之間直線段最短,如果你在走路,從A到B,明明可以直接過去,但所有人都不走,你最好別走,因為有陷阱。在中國辦事情,直線性思維在很多地方要碰壁,這是中國特色的中國處事方式。

    第四句話是:只有知道如何停止的人才知道如何加快速度。

    我在滑雪的時候,最大的體會就是停不下來。我剛開始學(xué)滑雪時沒有請教練,看著別人滑雪,覺得很容易,不就是從山頂滑到山下嗎?于是我穿上滑雪板,哧溜一下就滑下去了,結(jié)果我從山頂滑到山下,實際上是滾到山下,摔了很多個跟斗。我發(fā)現(xiàn)根本就不知道怎么停止、怎么保持平衡。最后我反復(fù)練習(xí)怎么在雪地上、斜坡上停下來。練了一個星期,我終于學(xué)會了在任何坡上停止、滑行、再停止。這個時候我就發(fā)現(xiàn)自己會滑雪了,就敢從山頂高速地往山坡下沖。因為我知道只要我想停,一轉(zhuǎn)身就能停下來。只要你能停下來,你就不會撞上樹、撞上石頭、撞上人,你就不會被撞死。因此,只有知道如何停止的人,才知道如何高速前進(jìn)。

    注解:用汽車來比喻,寶馬可以上200公里,奇瑞卻只能上120公里,為什么?發(fā)動機(jī)估計不相上下,差距在剎車系統(tǒng),上了200公里剎不了車,呵呵,我的天!

    第五句話是:放棄是一種智慧,缺陷是一種恩惠。

    當(dāng)你擁有六個蘋果的時候,千萬不要把它們都吃掉,因為你把六個蘋果全都吃掉,你也只吃到了六個蘋果,只吃到了一種味道,那就是蘋果的味道。如果你把六個蘋果中的五個拿出來給別人吃,盡管表面上你丟了五個蘋果,但實際上你卻得到了其他五個人的友情和好感。以后你還能得到更多,當(dāng)別人有了別的水果的時候,也一定會和你分享,你會從這個人手里得到一個橘子,那個人手里得到一個梨,最后你可能就得到了六種不同的水果,六種不同的味道,六種不同的顏色,六個人的友誼。人一定要學(xué)會用你擁有的東西去換取對你來說更加重要和豐富的東西。所以說,放棄是一種智慧。


    Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1967495

     

     

    posted @ 2008-01-23 13:26 阿偉 閱讀(192) | 評論 (0)編輯 收藏
    僅列出標(biāo)題
    共8頁: 上一頁 1 2 3 4 5 6 7 8 下一頁 
    主站蜘蛛池模板: 日本系列1页亚洲系列| 亚洲性猛交XXXX| 免费看韩国黄a片在线观看| 中文字幕免费视频一| 91精品导航在线网址免费| 色欲A∨无码蜜臀AV免费播| 日韩免费人妻AV无码专区蜜桃| 免费福利在线视频| 99精品国产成人a∨免费看| 久久免费动漫品精老司机| 久久午夜夜伦鲁鲁片无码免费| 久久综合给合久久国产免费| 18成禁人视频免费网站| 1000部拍拍拍18勿入免费视频软件| h片在线免费观看| 好大好硬好爽免费视频| 免费真实播放国产乱子伦| 亚洲国产综合精品一区在线播放| 久久久青草青青国产亚洲免观 | 色婷婷综合缴情综免费观看| 一级特黄a免费大片| 三上悠亚在线观看免费| 无码精品国产一区二区三区免费| 222www免费视频| 最新中文字幕免费视频| 国产高清免费在线| 国产亚洲精品精品国产亚洲综合| 国产成A人亚洲精V品无码| 亚洲国产成人精品无码区在线秒播 | 亚洲va无码va在线va天堂| 精品亚洲aⅴ在线观看| 亚洲综合无码一区二区痴汉| 青青久久精品国产免费看| 两个人看的www视频免费完整版| 无码人妻精品中文字幕免费| 一二三四影视在线看片免费 | 最近免费中文字幕高清大全| 手机在线毛片免费播放 | 国产精品视频免费观看| 国产又黄又爽又刺激的免费网址| 国产亚洲精品精品国产亚洲综合|