殺毒軟件

          _______ >>>>>>>

          BlogJava 聯系 管理
            5 Posts :: 3 Stories :: 2 Comments :: 0 Trackbacks

          2006年6月30日 #

          今天看了一片關于OOAD和UML的一個PPT文檔,感覺寫得非常好,其中寫得把現實世界中的實際業務流程轉換成適合計算機實現,而且是面向對象的系統流程一種實現方法,說的真是言簡意賅。讓人一下子就對程序設計的架構有了一種豁然開朗的感覺。我想如果能真正掌握UML的話,對今后的基本設計,詳細設計和程序開發有很大的好處! 我想這篇文章,主要的精髓有兩個,如下所示:

          利用兩段式OOAD,開發出三段式WINDOWS DNA應用程式。

          兩段式OOAD物件導向分析和設計(Object-Oriented Analysis & Design);其中最重要的思想是:

          找出企業流程àOOAD分析企業流程,從企業流程導出系統流程àOOAD分析系統流程àOOP寫元件。

          ?

          三段式Windows DNA應用程序:

          ClientUser界面à中間層企業元件à后端資料庫



          這篇文章如要下載,請點擊此處下載。 呵呵。 :)

          posted @ 2006-07-11 10:05 趙守広 閱讀(376) | 評論 (1)編輯 收藏

          光說不練,等于紙上談兵。緊接上第二篇文章所講的,本節將談論一下servlet在tomcat環境下的配置。例子雖小,但是他確集中反映了問題的實質。好了,開始進入主題。

          我用的tomcat是4.1版本。
          準備工作:
          ???? 1.安裝好JDK,解壓縮Eclipse,如果eclipse中沒有Tomcat包的話,在eclipse安裝目錄下添加Tomcat包。
          ???? 2.設置好eclipse中tomcat的安裝目錄和相關配置。
          ? 以上不是本節重點,只是稍微說一下,請讀者自己配置。下面進入重點:

          1.在tomcat的webapps下面新建目錄myServlet目錄,然后在Eclipse中新建Java工程,并將工作目錄指向剛剛新建的目錄上。例如:C:\Program Files\Apache Group\Tomcat 4.1\webapps\myServlet

          2.配置myServlet工程。
          ?? A.在myServlet工程下面分別新建WEB-INF,src,lib三個目錄,并在剛新建的WEB-INF目錄下面再新建classes目錄。
          ??
          ?? B.選擇myServlet工程,點擊右鍵,選擇“屬性”,將src做為代碼目錄,WEB-INF/classes做為編譯后的class目錄,把servlet.jar放在lib目錄下,并將lib包添加到工程中。

          ? C.在src目錄下面新建HelloWorld.java,這個就是我們要的Servlet。代碼如下:

          import java.io.IOException;
          import java.io.PrintWriter;

          import javax.servlet.ServletException;
          import javax.servlet.http.HttpServlet;
          import javax.servlet.http.HttpServletRequest;
          import javax.servlet.http.HttpServletResponse;

          public class HelloWorld extends HttpServlet {

          ?public void doGet(HttpServletRequest request, HttpServletResponse response)
          ???throws IOException, ServletException {
          ??response.setContentType("text/html");
          ??PrintWriter out = response.getWriter();
          ??out.println("<html>");
          ??out.println("<head>");
          ??out.println("<title>Hello World!</title>");
          ??out.println("</head>");
          ??out.println("<body>");
          ??out.println("<h1>Hello World!</h1>");
          ??out.println("</body>");
          ??out.println("</html>");
          ?}
          }

          將代碼編譯,在WEB-INF/classes目錄下就會有HelloWorld.class文件生成。

          3.下面是配置web.xml文件,在myServlet/WEB-INF目錄下新建web.xml文件,配置文件如下:

          <?xml version="1.0" encoding="ISO-8859-1"?>

          <!DOCTYPE web-app
          PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
          "

          <web-app>
          <display-name>Welcome to Tomcat</display-name>
          <description>
          Welcome to Tomcat
          </description>
          <servlet>
          <servlet-name>HelloWorld</servlet-name>
          <servlet-class>HelloWorld</servlet-class>
          </servlet>
          <servlet-mapping>
          <servlet-name>HelloWorld</servlet-name>
          <url-pattern>/HelloWorld</url-pattern>
          </servlet-mapping>
          </web-app>


          4.最后一步是將此工程設置為tomcat工程。打開tomcat安裝目錄下的conf目錄下的server.xml文件。
          打開此文件,找到<!-- Tomcat Root Context --> 這一行。在這一行的下面添加如下一段文字:
          <Context path="/myServlet" reloadable="true" docBase="myServlet" debug="0"/>

          保存以上文件,至此已經完成了全部的配置工作。重啟Tomcat,在瀏覽器中輸入:
          http://localhost:8080/myServlet/HelloWorld?即可看到Hello World!


          以上。

          posted @ 2006-07-06 10:35 趙守広 閱讀(968) | 評論 (0)編輯 收藏

          Servlet是對支持Java的服務器的一般擴充。它最常見的用途是擴展Web服務器,提供非常安全的、可移植的、易于使用的CGI替代品。它是一種動態加載的模塊,為來自Web服務器的請求提供服務。它完全運行在Java虛擬機上。由于它在服務器端運行,因此它不依賴于瀏覽器的兼容性。
          servlet容器:
          負責處理客戶請求、把請求傳送給servlet并把結果返回給客戶。不同程序的容器實際實現可能有所變化,但容器與servlet之間的接口是由servlet API定義好的,這個接口定義了servlet容器在servlet上要調用的方法及傳遞給servlet的對象類。
          servlet的生命周期:
          1、servlet容器創建servlet的一個實例
          2、容器調用該實例的init()方法
          3、如果容器對該servlet有請求,則調用此實例的service()方法
          4、容器在銷毀本實例前調用它的destroy()方法
          5、銷毀并標記該實例以供作為垃圾收集
          一旦請求了一個servlet,就沒有辦法阻止容器執行一個完整的生命周期。
          容器在servlet首次被調用時創建它的一個實例,并保持該實例在內存中,讓它對所有的請求進行處理。容器可以決定在任何時候把這個實例從內存中移走。在典型的模型中,容器為每個servlet創建一個單獨的實例,容器并不會每接到一個請求就創建一個新線程,而是使用一個線程池來動態的將線程分配給到來的請求,但是這從servlet的觀點來看,效果和為每個請求創建一個新線程的效果相同。

          servlet API
          servlet接口:
          public interface Servlet
          它的生命周期由javax.servlet.servlet接口定義。當你在寫servlet的時候必須直接或間接的實現這個接口。一般趨向于間接實現:通過從javax.servlet.GenericServlet或javax.servlet.http.HttpServlet派生。在實現servlet接口時必須實現它的五個方法:
          init():
          public void init(ServletConfig config) throws ServletException
          一旦對servlet實例化后,容器就調用此方法。容器把一個ServletConfig對象傳統給此方法,這樣servlet的實例就可以把與容器相關的配置數據保存起來供以后使用。如果此方法沒有正常結束就會拋出一個ServletException。一旦拋出該異常,servlet就不再執行,而隨后對它的調用會導致容器對它重新載入并再次運行此方法。接口規定對任何servlet實例,此方法只能被調用一次,在任何請求傳遞給servlet之前,此方法可以在不拋出異常的情況下運行完畢。
          service():
          public void service(ServletRequest req,ServletResponse res) throws ServletException,IOException
          只有成功初始化后此方法才能被調用處理用戶請求。前一個參數提供訪問初始請求數據的方法和字段,后一個提供servlet構造響應的方法。
          destroy():
          public void destroy()
          容器可以在任何時候終止servlet服務。容器調用此方法前必須給service()線程足夠時間來結束執行,因此接口規定當service()正在執行時destroy()不被執行。
          getServletConfig():
          public ServletConfig getServletConfig()
          在servlet初始化時,容器傳遞進來一個ServletConfig對象并保存在servlet實例中,該對象允許訪問兩項內容:初始化參數和ServletContext對象,前者通常由容器在文件中指定,允許在運行時向sevrlet傳遞有關調度信息,后者為servlet提供有關容器的信息。此方法可以讓servlet在任何時候獲得該對象及配置信息。
          getServletInfo():
          public String getServletInfo()
          此方法返回一個String對象,該對象包含servlet的信息,例如開發者、創建日期、描述信息等。該方法也可用于容器。

          GenericServlet類
          Public abstract class GenericServlet implants Servlet,ServletConfig,Serializable
          此類提供了servlet接口的基本實現部分,其service()方法被申明為abstract,因此需要被派生。init(ServletConfig conf)方法把servletConfig對象存儲在一個private transient(私有臨時)實例變量里,getServletConfig()方法返回指向本對象的指針,如果你重載此方法,將不能使用getServletConfig來獲得ServletConfig對象,如果確實想重載,記住要包含對super.config的調用。2.1版的API提供一個重載的沒有參數的init()方法?,F在在init(ServletConfig)方法結束時有一個對init()的調用,盡管目前它是空的。2.1版API里面,此類實現了ServletConfig接口,這使得開發者不用獲得ServletConfig對象情況下直接調用ServletConfig的方法,這些方法是:getInitParameter(),getInitParameterNames(),getServletContext。此類還包含兩個寫日志的方法,它們實際上調用的是ServletContext上的對應方法。log(String msg)方法將servlet的名稱和msg參數寫到容器的日志中,log(String msg,Throwable cause)除了包含servlet外還包含一個異常。

          HttpServlet類
          該類擴展了GenericServlet類并對servlet接口提供了與HTTP更相關的實現。
          service():
          protected void service(HttpServletRequest req,HttpServletResponse res) throws ServletException,IOException
          public void service(HttpServletRequest req,HttpServletResponse res)throws ServletException,IOException
          該方法作為HTTP請求的分發器,這個方法在任何時候都不能被重載。當請求到來時,service()方法決定請求的類型(GET,POST,HEAD,OPTIONS,DELETE,PUT,TRACE),并把請求分發給相應的處理方法(doGet(),doPost(),doHead(),doOptions(),doDelete(),doPut(),doTrace())每個do方法具有和第一個service()相同的形式。為了響應特定類型的HTTP請求,我們必須重載相應的do方法。如果servlet收到一個HTTP請求而你沒有重載相應的do方法,它就返回一個說明此方法對本資源不可用的標準HTTP錯誤。
          getLatModified():
          protected long getLastModified(HttpServletRequest req)
          該方法返回以毫秒為單位的的自GMT時間1970年1月1日0時0分0秒依賴的最近一次修改servlet的時間,缺省是返回一個負數表示時間未知。當處理GET請求時,調用此方法可以知道servlet的最近修改時間,服務器就可決定是否把結果從緩存中去掉。

          HttpServletRequest接口
          public interface HttpServletRequest extends ServletRequest
          所有實現此接口的對象(例如從servlet容器傳遞的HTTP請求對象)都能讓servlet通過自己的方法訪問所有請求的數據。下面是一些用來獲取表單數據的基本方法。
          getParameter()
          public String getParameter(String key)
          此方法試圖將根據查詢串中的關鍵字定位對應的參數并返回其值。如果有多個值則返回列表中的第一個值。如果請求信息中沒有指定參數,則返回null。
          getParameterValues():
          public String[] getParameterValues(String key)
          如果一個參數可以返回多個值,比如復選框集合,則可以用此方法獲得對應參數的所有值。如果請求信息中沒有指定參數,則返回null。
          GetParameterNames():
          Public Enumeration getParameterNames()
          此方法返回一個Enumeration對象,包含對應請求的所有參數名字列表。
          HttpServletResponse接口
          public interface HttpServletResponse extends servletResponse
          servlet容器提供一個實現該接口的對象并通過service()方法將它傳遞給servlet。通過此對象及其方法,servlet可以修改響應頭并返回結果。
          setContentType():
          public void setContentType(String type)
          在給調用者發回響應前,必須用此方法來設置HTTP響應的MIME類型??梢允侨魏斡行У腗IME類型,當給瀏覽器返回HTML是就是”text/html”類型。
          getWriter():
          public PrintWriter getWriter()throws IOException
          此方法將返回PrintWriter對象,把servlet的結果作為文本返回給調用者。PrintWriter對象自動把Java內部的UniCode編碼字符轉換成正確的編碼以使客戶端能夠閱讀。
          getOutputStream():
          public ServletOutputStream getOutputStream() throws IOException
          此方法返回ServletOutputStream對象,它是java.io.OutputStream的一個子類。此對象向客戶發送二進制數據。
          setHeader():
          public void setHeader(String name,String value)
          此方法用來設置送回給客戶的HTTP響應頭。有一些快捷的方法用來改變某些常用的響應頭,但有時也需要直接調用此方法。
          編譯條件
          需要從http://java.sun.com/products/servlet/ 獲得一份JSDK的拷貝,并把servlet.jar移動到JDK安裝目錄下的\jre\lib\ext目錄下。如果是JDK1.1,則移動到\lib下,并在CLASSPATH中加入servlet.jar的絕對路徑。
          運行條件
          需要Apache Jserv,Jrun Servlet Exec,Java Web Server,Weblogic,WebSphere,Tomcat,Resin等servlet服務器端程序。
          簡單范例

          				
          import java.io.*;
          import javax.servlet.*;
          import javax.servlet.http.*;
          public class HelloWorld extends HttpServlet {
          ? ?public void doGet(HttpServletRequest request, HttpServletResponse response)? ? throws IOException, ServletException?
          ? {? ? ?
          ? response.setContentType("text/html");? ? ?
          ? ?PrintWriter out = response.getWriter();
          ? ? ? ?out.println("<html>");? ? ?
          ? ?out.println("<body>");? ? ? ?
          out.println("<head>");? ? ? ?
          out.println("<title>Hello World!</title>");? ?
          ? ? out.println("</head>");? ?
          ? ? ?out.println("<body>");? ?
          ? ? out.println("<h1>Hello World!</h1>");?
          ? ? ? out.println("</body>");? ?
          ? ? ?out.println("</html>");? ? }}


          servlet的性能和效率
          一個servlet僅被初始化一次而執行多次,因此極小的低效性也會隨著時間的增加而產生很很大的影響。在代碼中需要考慮String對象的使用,如果產生HTML響應需要用到很多字符串時,不應該為每一個字符串生成一個String對象,因為這會產生大量的String和StringBuffer對象,造成大量的對象構造消耗和垃圾收集負擔,解決的辦法是一行一行的把所有需要寫入的直接寫入PrintWriter中,或者創建一個StringBuffer對象,并使用append()方法將文本加入。
          及時回送
          有時,程序需要花費很長時間執行,在這種情況下應該回送給客戶端一些信息,而不是長時間顯示白屏,這可以在執行到一定程度就回送一些東西,可以使用PrintWriter的flush()方法強制將現有的內容回送給瀏覽器。

          Servlet會話
          由于Web服務器使用的協議HTTP是一種無狀態的協議,因此要維護單個客戶機一系列請求的當前狀態就需要使用其它的附加手段,在以前,一般的方法是使用:
          l 隱藏的表格字段:在瀏覽器中,這種類型的字段是不可見的,然而,它在請求中被傳送,服務器端程序可以讀取它的值。它的優點是實現容易,且大多瀏覽器都支持;缺點是字段必須按照特定的順序建立,客戶端可以通過查看源代碼得到其值,在瀏覽器中單擊“后退”按鈕會丟失加到當前頁中的附加字段,同時也限制了用戶動態的生成文檔。
          l Cookie:是一些關鍵的數據片斷,由服務器建立并由客戶機的瀏覽器存放。瀏覽器維護一個它自己的Cookie表,這使得它可以作為一種會話跟蹤的解決方案。使用Cookie的好處是它比在URL或表單中儲存數據更直觀。它的缺點是它可以用于在比一次短會話更長時間內跟蹤用戶,甚至可以用來跟蹤某個用戶向站點發送的每一個請求,因此有人擔心自己的隱私問題而關閉了Cookie,一些老的瀏覽器也不支持cookie。Servlet API提供一個Cookie類支持cookie,使用HttpServletResponse.addCookie()和HttpServletResponse.getCookies()方法添加和讀取cookie。
          l URL重寫:修改請求的url,使之包含會話ID。這種方法的缺點是:對于大量的數據,URL會變得很長而失去控制;在某些環境下,URL的字符串長度有一定的限制;數據保密問題,你可能不想讓旁邊的人或者可以使用同一個計算機的看到你的會話數據。Servlet提供HttpServletRequest類可以獲得參數。
          Servlet API有自己內置的會話跟蹤支持,使用HttpSession對象既可。它的setAttribute()方法綁定一對名字/值數據,把它存到當前會話中,如果會話中已經存在該名字責替換它,語法為:public void setAttribute(String name,Object value)。getAttribute()方法讀取存儲在會話中的對象,語法為:public Object getAttribute(String name)。getAttributeNames()方法返回存儲在會話中的所有名字,語法為:public String[] getAttributeNames()。最后一個方法是removeAttribute()方法,它從會話中刪除指定的信息,語法為:public void removeAttribute(String name)。HttpSession對象可以使用HttpServletRequest對象request的getSession(true)方法獲得。參數為true意味著如果不存在該對象則創建一個。


          以上是關于Servlet的一些概念,在Tomcat的安裝文件中有servlet的例子,也可以能運行,但是自己想配置一個servlet的例子海沒有成功。 所以下次想找一篇關于如何配置的servlet的例子。當然是在Eclipse+tomcat+JDk1.4下。完工·
          posted @ 2006-06-30 14:32 趙守広 閱讀(566) | 評論 (0)編輯 收藏

          主站蜘蛛池模板: 黄梅县| 桐柏县| 彭山县| 化隆| 德钦县| 临澧县| 屏南县| 沙雅县| 顺昌县| 保康县| 灵寿县| 三都| 庆云县| 岱山县| 黄冈市| 南昌市| 伊金霍洛旗| 丹江口市| 崇州市| 岳池县| 济宁市| 铁岭县| 成安县| 宜兰市| 苏尼特右旗| 名山县| 珲春市| 莆田市| 清流县| 阿克陶县| 宜良县| 余江县| 满城县| 团风县| 甘谷县| 平邑县| 汝州市| 康乐县| 孝义市| 福州市| 文山县|