㈠ 請教各位大神,通常javaweb都是單例多線程的嗎
舉個栗子
你用杯子喝可樂,喝完了不刷,繼續去倒果汁喝,就是單例。
你用杯子喝可樂,直接扔了杯子,換個杯子去倒果汁喝,就是多例。
資料庫連接池就是單例模式,有且僅有一個連接池管理者,管理多個連接池對象。
1. 什麼是單例多例:
所謂單例就是所有的請求都用一個對象來處理,比如我們常用的service和層的對象通常都是單例的,而多例則指每個請求用一個新的對象來處理,比如action;
2. 如何產生單例多例:
在通用的SSH中,單例在spring中是默認的,如果要產生多例,則在配置文件的bean中添加scope="prototype";
3. 為什麼用單例多例:
之所以用單例,是因為沒必要每個請求都新建一個對象,這樣子既浪費CPU又浪費內存;
之所以用多例,是為了防止並發問題;即一個請求改變了對象的狀態,此時對象又處理另一個請求,而之前請求對對象狀態的改變導致了對象對另一個請求做了錯誤的處理;
用單例和多例的標准只有一個:
當對象含有可改變的狀態時(更精確的說就是在實際應用中該狀態會改變),則多例,否則單例;
單例其實就在內存中該對象只有一個內存對應地址。無論你多少個線程訪問那個對象,都是同一個地址。這樣節省內存
4. 何時用單例?何時用多例?
對於struts2來說,action必須用多例,因為action本身含有請求參數的值,即可改變的狀態;
而對於struts1來說,action則可用單例,因為請求參數的值是放在actionForm中,而非action中的;
另外要說一下,並不是說service或一定是單例,標准同第3點所講的,就曾見過有的service中也包含了可改變的狀態,同時執行方法也依賴該狀態,但一樣用的單例,這樣就會出現隱藏的BUG,而並發的BUG通常很難重現和查找;
㈡ java新手痛苦時期,請教怎麼在web應用程序中創建一個一直生存的對象
1、public static A a;這樣建出來的就是全局存在的,從項目啟動到項目關閉會一直都存在。2、存在資料庫或者本地文件,不過這樣有個問題,如果是頻繁調用的數據可能會有大問題,有可能會數據沖突,也必然會怎加緩存壓力3、存在每個會話的session中,這樣只針對各個用戶的會話,沒法交叉影響java新手痛苦時期,請教怎麼在web應用程序中創建一個一直生存的對象
㈢ JAVA考試題求助
11在Oracle中,有一個教師表teacher的結構如下:
ID NUMBER(5),NAME VARCHAR2(25),EMAIL VARCHAR2(50)
下面哪個語句顯示沒有Email地址的教師姓名( )
A、SELECT name FROM teacher WHERE email = NULL;
B、SELECT name FROM teacher WHERE email <> NULL;
C、SELECT name FROM teacher WHERE email IS NULL;
D、SELECT name FROM teacher WHERE email IS NOT NULL;
12 關於類型定義Number(9,2)說法正確的有( )
A、整數部分9位,小數部分2位,共11位 B、整數部分7位,小數部分2位,共9位
C、整數部分6位,小數點一位,小數部分2位,共9位 D、以上說法均不正確
在Oracle中,有表Person,如下
id name tel age
001 Amber 1234 20
002 Bmy 2345 23
003 Emily 4567 30
004 Eric 5678 20
005 Roy 6789 25
13 SELECT Tel FROM Person WHERE Name like 『_m_』;執行以上查詢,結果是( )。
A 1234
B 2345
C 4567
D 以上皆非
14 以下對於存儲過程和函數,描述錯誤的是( ):
A、存儲過程和函數都屬於子程序。
B、函數可以返回結果集,而過程不能。
C、JDBC中,調用oracle的存儲過程,必須使用CallableStatement類。
D、JDBC中,可以使用CallableStatement調用返回結果集的函數,也可以直接在sql中調
15 在Oracle中,下面用於限制分組函數的返回值的子句是( )
A、WHERE B、HAVING
C、ORDER BY D、無法限定分組函數的返回值
16 關於觸發器,下面說法錯誤的是( ):
A、觸發器創建後,可以在sql和PL/SQL中調用
B、替代觸發器中,不能包含commit語句
C、替代觸發器主要應用於視圖
D、創建觸發器的語法是:create trigger …
17 .在畫布中選擇畫筆的成員函數是
A.SelectObject(…);
B.SelectPen(…);
C.SelectBrush(…);
D.GetObject(…);
18 用於捕獲鍵盤事件的消息是
A.WM_KEYBOARD
B.VK_ CHAR
C.VK_RETURN
D.WM_CHAR
19 4. 若有以下說明和語句,且0≤i<10, 則下面哪個是對數組元素地址的正確表示?
int a[ ]={1,2,3,4,5,6,7,8,9,0}, *p, i;
p=a;
A. &a[1] B. a++ C. &p D.&p[i]
20 有如下程序段:
int a []={6,8,7,5,2,4,3};
int y,*p=&a[1];
y=(*--p)++;
printf(「%d\n」,y);
輸出結果是什麼?
A.6
B.8
C.7
D.5
21 .已定義"int a[5]={100, 200, 300, 400, 500};int *P1=&a[0]",若b=*(++P1),則b和*P1的值分別為_ __。
A.100 200 B.200 200 C101 101 D.100 101
22 關於構造函數與析構函數的下列說法中正確的是: ①在類中構造函數與析構函數都有固定的函數名。
②在類中構造函數與析構函數都有相同的作用。
③在類中構造函數與析構函數都可以定義多個。
④在類中構造函數與析構函數都可以有返回值。
⑤在類中構造函數與析構函數的參數都可以有默認值。
23 在SGIP協議中,SP向運營商網關發送下行數據前,需要發送的數據包包是
A UNBIND B HELLO C BIND D DELIVER
24 關於synchronized關鍵字,下面正確的是
A 可以聲明同步變數
B 可以聲明同步線程
C 可以聲明同步方法
D 可以聲明同步類
25 public class Foo{
public static void main(String[] args){
try{
return;
}
finally{System.out.println(""Finally"");
}
}
}
結果是:
A 程序正常運行,但不輸出任何結果。
B 程序正常運行,並輸出 ""Finally""。
C 編譯能通過,但運行時會出現一個例外。
D 因為沒有catch語句塊,所以不能通過編譯。
26 下列程序的輸出結果是()
public class MainClass{
private int i = 10;
public static void main(String[] args){
int i = 0;
i = i ++;
i+= 1;
System.out.println(i);
}
}
A、1 B、2 C、11 D、12
27 ServletContext對象是由誰創建的?()
選項:
(A)由Servlet容器負責創建,對於每個HTTP請求, Servlet容器都會創建一個ServletContext對象
(B)由JavaWeb應用本身負責為自己創建一個ServletContext對象
(C)由Servlet容器負責創建,對於每個JavaWeb應用,在啟動時,Servlet容器都會創建一個ServletContext對象
28 以下代碼能否編譯通過,假如能編譯通過,運行時得到什麼列印結果?(單選)
request.setAttribute("count",new Integer(0));
Integer count = request.getAttribute("count");
選項:
A)不能編譯通過 B)能編譯通過,並正常運行
C) 編譯通過,但運行時拋出ClassCastException
29 下面哪個說法是正確的? ()
選項:
(A) 對於每個要求訪問maillogin.jsp的HTTP請求,Servlet容器都會創建一個HttpSession對象
(B)每個HttpSession對象都有惟一的ID。
(C)JavaWeb應用程序必須負責為HttpSession分配惟一的ID
30 為了使索引鍵的值在基本表中唯一,在建立索引語句中應使用保留字( )
A UNIQUE
B COUNT
C DISDINCT
D UNION
㈣ 在web應用程序中哪些對象的改變可能產生事件
面向對象(Object Oriented,OO)是當前計算機界關心的重點,它是90年代軟體開發方法的主流。面向對象的概念和應用已超越了程序設計和軟體開發,擴展到很寬的范圍。如資料庫系統、互動式界面、應用結構、應用平台、分布式系統、網路管理結構、CAD技術、人工智慧等領域。
談到面向對象,這方面的文章非常多。但是,明確地給出對象的定義或說明對象的定義的非常少——至少我現在還沒有發現。其初,「面向對象」是專指在程序設計中採用封裝、繼承、抽象等設計方法。可是,這個定義顯然不能再適合現在情況。面向對象的思想已經涉及到軟體開發的各個方面。如,面向對象的分析(OOA,Object Oriented Analysis),面向對象的設計(OOD,Object Oriented Design)、以及我們經常說的面向對象的編程實現(OOP,Object Oriented Programming)。許多有關面向對象的文章都只是講述在面向對象的開發中所需要注意的問題或所採用的比較好的設計方法。看這些文章只有真正懂得什麼是對象,什麼是面向對象,才能最大程度地對自己有所裨益。這一點,恐怕對初學者甚至是從事相關工作多年的人員也會對它們的概念模糊不清。
面向對象是當前計算機界關心的重點,它是90年代軟體開發方法的主流。面向對象的概念和應用已超越了程序設計和軟體開發,擴展到很寬的范圍。如資料庫系統、互動式界面、應用結構、應用平台、分布式系統、網路管理結構、CAD技術、人工智慧等領域。
一、傳統開發方法存在問題
1.軟體重用性差
重用性是指同一事物不經修改或稍加修改就可多次重復使用的性質。軟體重用性是軟體工程追求的目標之一。
2.軟體可維護性差
軟體工程強調軟體的可維護性,強調文檔資料的重要性,規定最終的軟體產品應該由完整、一致的配置成分組成。在軟體開發過程中,始終強調軟體的可讀性、可修改性和可測試性是軟體的重要的質量指標。實踐證明,用傳統方法開發出來的軟體,維護時其費用和成本仍然很高,其原因是可修改性差,維護困難,導致可維護性差。
3.開發出的軟體不能滿足用戶需要
用傳統的結構化方法開發大型軟體系統涉及各種不同領域的知識,在開發需求模糊或需求動態變化的系統時,所開發出的軟體系統往往不能真正滿足用戶的需要。
用結構化方法開發的軟體,其穩定性、可修改性和可重用性都比較差,這是因為結構化方法的本質是功能分解,從代表目標系統整體功能的單個處理著手,自頂向下不斷把復雜的處理分解為子處理,這樣一層一層的分解下去,直到僅剩下若干個容易實現的子處理功能為止,然後用相應的工具來描述各個最低層的處理。因此,結構化方法是圍繞實現處理功能的「過程」來構造系統的。然而,用戶需求的變化大部分是針對功能的,因此,這種變化對於基於過程的設計來說是災難性的。用這種方法設計出來的系統結構常常是不穩定的 ,用戶需求的變化往往造成系統結構的較大變化,從而需要花費很大代價才能實現這種變化。
二、面向對象的基本概念
(1)對象。
對象是人們要進行研究的任何事物,從最簡單的整數到復雜的飛機等均可看作對象,它不僅能表示具體的事物,還能表示抽象的規則、計劃或事件。
(2)對象的狀態和行為。
對象具有狀態,一個對象用數據值來描述它的狀態。
對象還有操作,用於改變對象的狀態,對象及其操作就是對象的行為。
對象實現了數據和操作的結合,使數據和操作封裝於對象的統一體中
(3)類。
具有相同或相似性質的對象的抽象就是類。因此,對象的抽象是類,類的具體化就是對象,也可以說類的實例是對象。
類具有屬性,它是對象的狀態的抽象,用數據結構來描述類的屬性。
類具有操作,它是對象的行為的抽象,用操作名和實現該操作的方法來描述。
(4)類的結構。
在客觀世界中有若干類,這些類之間有一定的結構關系。通常有兩種主要的結構關系,即一般--具體結構關系,整體--部分結構關系。
①一般——具體結構稱為分類結構,也可以說是「或」關系,或者是「is a」關系。
②整體——部分結構稱為組裝結構,它們之間的關系是一種「與」關系,或者是「has a」關系。
(5)消息和方法。
對象之間進行通信的結構叫做消息。在對象的操作中,當一個消息發送給某個對象時,消息包含接收對象去執行某種操作的信息。發送一條消息至少要包括說明接受消息的對象名、發送給該對象的消息名(即對象名、方法名)。一般還要對參數加以說明,參數可以是認識該消息的對象所知道的變數名,或者是所有對象都知道的全局變數名。
類中操作的實現過程叫做方法,一個方法有方法名、參數、方法體。消息傳遞如圖10-1所示。
二、面向對象的特徵
(1)對象唯一性。
每個對象都有自身唯一的標識,通過這種標識,可找到相應的對象。在對象的整個生命期中,它的標識都不改變,不同的對象不能有相同的標識。
(2)分類性。
分類性是指將具有一致的數據結構(屬性)和行為(操作)的對象抽象成類。一個類就是這樣一種抽象,它反映了與應用有關的重要性質,而忽略其他一些無關內容。任何類的劃分都是主觀的,但必須與具體的應用有關。
(3)繼承性。
繼承性是子類自動共享父類數據結構和方法的機制,這是類之間的一種關系。在定義和實現一個類的時候,可以在一個已經存在的類的基礎之上來進行,把這個已經存在的類所定義的內容作為自己的內容,並加入若干新的內容。
繼承性是面向對象程序設計語言不同於其它語言的最重要的特點,是其他語言所沒有的。
在類層次中,子類只繼承一個父類的數據結構和方法,則稱為單重繼承。
在類層次中,子類繼承了多個父類的數據結構和方法,則稱為多重繼承。
在軟體開發中,類的繼承性使所建立的軟體具有開放性、可擴充性,這是信息組織與分類的行之有效的方法,它簡化了對象、類的創建工作量,增加了代碼的可重性。
採用繼承性,提供了類的規范的等級結構。通過類的繼承關系,使公共的特性能夠共享,提高了軟體的重用性。
(4)多態性(多形性)
多態性使指相同的操作或函數、過程可作用於多種類型的對象上並獲得不同的結果。不同的對象,收到同一消息可以產生不同的結果,這種現象稱為多態性。
多態性允許每個對象以適合自身的方式去響應共同的消息。
多態性增強了軟體的靈活性和重用性。
三、面向對象的要素
(1)抽象。
抽象是指強調實體的本質、內在的屬性。在系統開發中,抽象指的是在決定如何實現對象之前的對象的意義和行為。使用抽象可以盡可能避免過早考慮一些細節。
類實現了對象的數據(即狀態)和行為的抽象。
(2)封裝性(信息隱藏)。
封裝性是保證軟體部件具有優良的模塊性的基礎。
面向對象的類是封裝良好的模塊,類定義將其說明(用戶可見的外部介面)與實現(用戶不可見的內部實現)顯式地分開,其內部實現按其具體定義的作用域提供保護。
對象是封裝的最基本單位。封裝防止了程序相互依賴性而帶來的變動影響。面向對象的封裝比傳統語言的封裝更為清晰、更為有力。
(3)共享性
面向對象技術在不同級別上促進了共享
同一類中的共享。同一類中的對象有著相同數據結構。這些對象之間是結構、行為特徵的共享關系。
在同一應用中共享。在同一應用的類層次結構中,存在繼承關系的各相似子類中,存在數據結構和行為的繼承,使各相似子類共享共同的結構和行為。使用繼承來實現代碼的共享,這也是面向對象的主要優點之一。
在不同應用中共享。面向對象不僅允許在同一應用中共享信息,而且為未來目標的可重用設計准備了條件。通過類庫這種機制和結構來實現不同應用中的信息共享。
4.強調對象結構而不是程序結構
四、面向對象的開發方法
目前,面向對象開發方法的研究已日趨成熟,國際上已有不少面向對象產品出現。面向對象開發方法有Coad方法、Booch方法和OMT方法等。
1.Booch方法
Booch最先描述了面向對象的軟體開發方法的基礎問題,指出面向對象開發是一種根本不同於傳統的功能分解的設計方法。面向對象的軟體分解更接近人對客觀事務的理解,而功能分解只通過問題空間的轉換來獲得。
2.Coad方法
Coad方法是1989年Coad和Yourdon提出的面向對象開發方法。該方法的主要優點是通過多年來大系統開發的經驗與面向對象概念的有機結合,在對象、結構、屬性和操作的認定方面,提出了一套系統的原則。該方法完成了從需求角度進一步進行類和類層次結構的認定。盡管Coad方法沒有引入類和類層次結構的術語,但事實上已經在分類結構、屬性、操作、消息關聯等概念中體現了類和類層次結構的特徵。
3.OMT方法
OMT方法是1991年由James Rumbaugh等5人提出來的,其經典著作為「面向對象的建模與設計」。
該方法是一種新興的面向對象的開發方法,開發工作的基礎是對真實世界的對象建模,然後圍繞這些對象使用分析模型來進行獨立於語言的設計,面向對象的建模和設計促進了對需求的理解,有利於開發得更清晰、更容易維護的軟體系統。該方法為大多數應用領域的軟體開發提供了一種實際的、高效的保證,努力尋求一種問題求解的實際方法。
4.UML(Unified Modeling Language)語言
軟體工程領域在1995年~1997年取得了前所未有的進展,其成果超過軟體工程領域過去15年的成就總和,其中最重要的成果之一就是統一建模語言(UML)的出現。UML將是面向對象技術領域內佔主導地位的標准建模語言。
UML不僅統一了Booch方法、OMT方法、OOSE方法的表示方法,而且對其作了進一步的發展,最終統一為大眾接受的標准建模語言。UML是一種定義良好、易於表達、功能強大且普遍適用的建模語言。它融入了軟體工程領域的新思想、新方法和新技術。它的作用域不限於支持面向對象的分析與設計,還支持從需求分析開始的軟體開發全過程。
五、面向對象的模型
·對象模型
對象模型表示了靜態的、結構化的系統數據性質,描述了系統的靜態結構,它是從客觀世界實體的對象關系角度來描述,表現了對象的相互關系。該模型主要關心系統中對象的結構、屬性和操作,它是分析階段三個模型的核心,是其他兩個模型的框架。
1.對象和類
(1) 對象。
對象建模的目的就是描述對象。
(2) 類。
通過將對象抽象成類,我們可以使問題抽象化,抽象增強了模型的歸納能力。
(3) 屬性。
屬性指的是類中對象所具有的性質(數據值)。
(4) 操作和方法。
操作是類中對象所使用的一種功能或變換。類中的各對象可以共享操作,每個操作都有一個目標對象作為其隱含參數。
方法是類的操作的實現步驟。
2.關聯和鏈
關聯是建立類之間關系的一種手段,而鏈則是建立對象之間關系的一種手段。
(1) 關聯和鏈的含義。
鏈表示對象間的物理與概念聯結,關聯表示類之間的一種關系,鏈是關聯的實例,關聯是鏈的抽象。
(2) 角色。
角色說明類在關聯中的作用,它位於關聯的端點。
(3) 受限關聯。
受限關聯由兩個類及一個限定片語成,限定詞是一種特定的屬性,用來有效的減少關聯的重數,限定詞在關聯的終端對象集中說明。
限定提高了語義的精確性,增強了查詢能力,在現實世界中,常常出現限定詞。
(4) 關聯的多重性。
關聯的多重性是指類中有多少個對象與關聯的類的一個對象相關。重數常描述為「一」或「多」。
圖10-8表示了各種關聯的重數。小實心圓表示「多個」,從零到多。小空心圓表示零或一。沒有符號表示的是一對一關聯。
3.類的層次結構
(1) 聚集關系。
聚集是一種「整體-部分」關系。在這種關系中,有整體類和部分類之分。聚集最重要的性質是傳遞性,也具有逆對稱性。
聚集可以有不同層次,可以把不同分類聚集起來得到一顆簡單的聚集樹,聚集樹是一種簡單表示,比畫很多線來將部分類聯系起來簡單得多,對象模型應該容易地反映各級層次,圖10-10表示一個關於微機的多極聚集。
(2)一般化關系。
一般化關系是在保留對象差異的同時共享對象相似性的一種高度抽象方式。它是「一般---具體」的關系。一般化類稱為你類,具體類又能稱為子類,各子類繼承了交類的性質,而各子類的一些共同性質和操作又歸納到你類中。因此,一般化關系和繼承是同時存在的。一般化關系的符號表示是在類關聯的連線上加一個小三角形,如圖10-11
4.對象模型
(1)模板。模板是類、關聯、一般化結構的邏輯組成。
(2)對象模型。
對象模型是由一個或若干個模板組成。模板將模型分為若干個便於管理的子塊,在整個對象模型和類及關聯的構造塊之間,模板提供了一種集成的中間單元,模板中的類名及關聯名是唯一的。
·動態模型
動態模型是與時間和變化有關的系統性質。該模型描述了系統的控制結構,它表示了瞬間的、行為化的系統控制
性質,它關心的是系統的控制,操作的執行順序,它表示從對象的事件和狀態的角度出發,表現了對象的相互行為。
該模型描述的系統屬性是觸發事件、事件序列、狀態、事件與狀態的組織。使用狀態圖作為描述工具。它涉及到事件、狀態、操作等重要概念。
1.事件
事件是指定時刻發生的某件事。
2.狀態
狀態是對象屬性值的抽象。對象的屬性值按照影響對象顯著行為的性質將其歸並到一個狀態中去。狀態指明了對象
對輸入事件的響應。
3.狀態圖
狀態圖是一個標準的計算機概念,他是有限自動機的圖形表示,這里把狀態圖作為建立動態模型的圖形工具。
狀態圖反映了狀態與事件的關系。當接收一事件時,下一狀態就取決於當前狀態和所接收的該事件,由該事件引起的狀態變化稱為轉換。
狀態圖是一種圖,用結點表示狀態,結點用圓圈表示;圓圈內有狀態名,用箭頭連線表示狀態的轉換,上面標記事件名,箭頭方向表示轉換的方向。
·功能模型
功能模型描述了系統的所有計算。功能模型指出發生了什麼,動態模型確定什麼時候發生,而對象模型確定發生的客體。功能模型表明一個計算如何從輸入值得到輸出值,它不考慮計算的次序。功能模型由多張數據流圖組成。數據流圖用來表示從源對象到目標對象的數據值的流向,它不包含控制信息,控制信息在動態模型中表示,同時數據流圖也不表示對象中值的組織,值的組織在對象模型中表示。圖10-15給出了一個窗口系統的圖標顯示的數據流圖。
數據流圖中包含有處理、數據流、動作對象和數據存儲對象。
1.處理
數據流圖中的處理用來改變數據值。最低層處理是純粹的函數,一張完整的數據流圖是一個高層處理。
2.數據流
數據流圖中的數據流將對象的輸出與處理、處理與對象的輸入、處理與處理聯系起來。在一個計算機中,用數據流來表示一中間數據值,數據流不能改變數據值。
3.動作對象
動作對象是一種主動對象,它通過生成或者使用數據值來驅動數據流圖。
4.數據存儲對象
數據流圖中的數據存儲是被動對象,它用來存儲數據。它與動作對象不一樣,數據存儲本身不產生任何操作,它只響應存儲和訪問的要求。
六、面向對象的分析
面向對象分析的目的是對客觀世界的系統進行建模。本節以上面介紹的模型概念為基礎,結合「銀行網路系統」的具體實例來構造客觀世界問題的准確、嚴密的分析模型。
分析模型有三種用途:用來明確問題需求;為用戶和開發人員提供明確需求;為用戶和開發人員提供一個協商的基礎,作為後繼的設計和實現的框架。
(一) 面向對象的分析
系統分析的第一步是:陳述需求。分析者必須同用戶一塊工作來提煉需求,因為這樣才表示了用戶的真實意圖,其中涉及對需求的分析及查找丟失的信息。下面以「銀行網路系統」為例,用面向對象方法進行開發。
銀行網路系統問題陳述: 設計支持銀行網路的軟體,銀行網路包括人工出納站和分行共享的自動出納機。每個分理處用分理處計算機來保存各自的帳戶,處理各自的事務;各自分理處的出納站與分理處計算機通信,出納站錄入帳戶和事務數據;自動出納機與分行計算機通信,分行計算機與撥款分理處結帳,自動出納機與用戶介面接受現金卡,與分行計算機通信完成事務,發放現金,列印收據;系統需要記錄保管和安全措施;系統必須正確處理同一帳戶的並發訪問;每個分處理為自己的計算機准備軟體,銀行網路費用根據顧客和現金卡的數目分攤給各分理處。
圖10-18給出銀行網路系統的示意圖。
(二)建立對象模型
首先標識和關聯,因為它們影響了整體結構和解決問題的方法,其次是增加屬性,進一步描述類和關聯的基本網路,使用繼承合並和組織類,最後操作增加到類中去作為構造動態模型和功能模型的副產品。
1.確定類
構造對象模型的第一步是標出來自問題域的相關的對象類,對象包括物理實體和概念。所有類在應用中都必須有意義,在問題陳述中,並非所有類都是明顯給出的。有些是隱含在問題域或一般知識中的。
按圖10-19所示的過程確定類
查找問題陳述中的所有名詞,產生如下的暫定類。
軟體 銀行網路 出納員 自動出納機 分行
分處理 分處理計算機 帳戶 事務 出納站
事務數據 分行計算機 現金卡 用戶 現金
收據 系統 顧客 費用 帳戶數據
訪問 安全措施 記錄保管
根據下列標准,去掉不必要的類和不正確的類。
(1) 冗餘類:若兩個類表述了同一個信息 ,保留最富有描述能力的類。如"用戶"和"顧客"就是重復的描述,因為"顧客"最富有描述性,因此保留它。
(2) 不相乾的類:除掉與問題沒有關系或根本無關的類。例如,攤派費用超出了銀行網路的范圍。
(3) 模糊類:類必須是確定的,有些暫定類邊界定義模糊或范圍太廣,如"記錄保管"就模糊類,它是"事務"中的一部分。
(4) 屬性:某些名詞描述的是其他對象的屬性,則從暫定類中刪除。如果某一性質的獨立性很重要,就應該把他歸屬到類,而不把它作為屬性。
(5) 操作:如果問題陳述中的名詞有動作含義,則描述的操作就不是類。但是具有自身性質而且需要獨立存在的操作應該描述成類。如我們只構造電話模型,"撥號"就是動態模型的一部分而不是類,但在電話撥號系統中,"撥號"是一個重要的類,它日期、時間、受話地點等屬性。
在銀行網路系統中,模糊類是"系統"、"安全措施"、"記錄保管"、"銀行網路"等。屬於屬性的有:"帳戶數據"、"收據"、"現金"、"事務數據"。屬於實現的如:"訪問"、"軟體"等。這些均應除去。
2.准備數據字典
為所有建模實體准備一個數據字典。准確描述各個類的精確含義,描述當前問題中的類的范圍,包括對類的成員、用法方面的假設或限制。
3.確定關聯
兩個或多個類之間的相互依賴就是關聯。一種依賴表示一種關聯,可用各種方式來實現關聯,但在分析模型中應刪除實現的考慮,以便設計時更為靈活。關聯常用描述性動詞或動詞片語來表示,其中有物理位置的表示、傳導的動作、通信、所有者關系、條件的滿足等。從問題陳述中抽取所有可能的關聯表述,把它們記下來,但不要過早去細化這些表述。
下面是銀行網路系統中所有可能的關聯,大多數是直接抽取問題中的動詞片語而得到的。在陳述中,有些動詞片語表述的關聯是不明顯的。最後,還有一些關聯與客觀世界或人的假設有關,必須同用戶一起核實這種關聯,因為這種關聯在問題陳述中找不到。
銀行網路問題陳述中的關聯:
·銀行網路包括出納站和自動出納機;
·分行共享自動出納機;
·分理處提供分理處計算機;
·分理處計算機保存帳戶;
·分理處計算機處理帳戶支付事務;
·分理處擁有出納站;
·出納站與分理處計算機通信;
·出納員為帳戶錄入事務;
·自動出納機接受現金卡;
·自動出納機與用戶介面;
·自動出納機發放現金;
·自動出納機列印收據;
·系統處理並發訪問;
·分理處提供軟體;
·費用分攤給分理處。
隱含的動詞片語:
·分行由分理處組成;
·分理處擁有帳戶;
·分行擁有分行計算機;
·系統提供記錄保管;
·系統提供安全;
·顧客有現金卡。
基於問題域知識的關聯:
·分理處僱傭出納員;
·現金卡訪問帳戶。
使用下列標准去掉不必要和不正確的關聯:
(1) 若某個類已被刪除,那麼與它有關的關聯也必須刪除或者用其它類來重新表述。在例中,我們刪除了"銀行網路",相關的關聯也要刪除。
(2) 不相乾的關聯或實現階段的關聯:刪除所有問題域之外的關聯或涉及實現結構中的關聯。如"系統處理並發訪問"就是一種實現的概念。
(3) 動作:關聯應該描述應用域的結構性質而不是瞬時事件,因此應刪除"自動出納機接受現金卡","自動出納機與用戶介面"等。
(4) 派生關聯:省略那些可以用其他關聯來定義的關聯。因為這種關聯是冗餘的。銀行網路系統的初步對象圖如圖10-20所示。其中含有關聯。
㈤ java考試題求助
Bank類中有一個customers集合,用來存儲所有的Customer(儲戶)對象,addCustomer()方法用語向該集合中添加儲戶,getCustomer()方法根據下標值獲取某個儲戶,getNumOfCustomer()方法獲取儲戶總數,getCustomers()方法返回儲戶列表,以便獲得每個儲戶對象『
Customer類有一個accounts集合,用來存儲某個儲戶的所有Account(賬號)對象,addAccount()方法用於向該集合中添加賬號,getAccount()方法根據下標值獲取該儲戶的某個賬號,getNumOfAccounts()方法獲取該儲戶的賬號總數,getAccounts()方法返回該儲戶的賬號Iterator,以便獲得每個賬號對象。
Account類是抽象類,有一個balance屬性,代表余額。Deposit()方法表示存款,amount參數是存款額,Withdraw()方法表示取款,取款額amount如果超出了余額就會拋出透支異常,我們需要定義一個OverdraftException類來表示這個異常,當拋出異常時,不進行取款交易,並報告用戶此項錯誤。
SavingsAccount類表示大額存款賬號,繼承Account,新增一個屬性interestRate,代表利率。
CheckingAccount類表示大額存款賬號,也繼承Account,它有一個叫canOverdraft的屬性,是一個boolean值,代表該賬號能否透支(true——能,false——否);它還有一個叫maxOverdraft的屬性,表示該賬號允許的最大透支額。這個類的withdraw()方法(取款)需要考慮的因素比較多:在發生透支時,如果賬號不允許透支(canOverdraft=false),則拋出異常並退出交易;如果允許透支(canOverdraft=true),但透支額(amount-balance)超出最大透支額的話,也拋出異常並退出交易;只有在不發生透支或透支額小於最大透支額時,交易才能正常進行。另外,在每次進行透支交易時,最大透支額(maxOverdraft)應作調整,以便使該賬號的最大透支額隨透支次數的增加而不斷減少,從而避免透支的濫用,阻止信用膨脹。CheckingAccount類有兩個構造方法,只帶一個參數的構造方法用來初始化balance,同時設定canOverdraft=false,maxOverdraft=0.00.
CustomReport類用來顯示每個儲戶的姓名及他所有的賬號的類別和余額,以報表的形式輸出。
根據以上描述,創建一個TestBanking類,並在其main方法中添加若干儲戶和賬號,然後模擬存款,取款業務,並最終輸出一張完整的報表。
要求:
1. 用文件來存儲用戶的所有信息。
2. 有用戶圖形界面。(最基本的:存錢、取錢、新增賬號、新增賬戶,可以使用菜單來實現,也可以使用按鈕來實現)。
採用以下表格進行模擬:
儲戶姓名 賬號
Saving Account Checking Account
Jane Simms SavingsAccount(500.00,0.05) CheckingAccount(200.00,true,400.00)
Owen Bryant 無 CheckingAccount(200.00)
Tim Soley SavingsAccout(1500.00,0.05) CheckingAccount(300.00)
Maria Soley SavingsAccount(160.00,0.05) 與Tim Soley共享一個CheckingAccount
輸出報表格式如下:
CUSTOMERS REPORT
儲戶姓名:Jane Simms
Savings Account:當前余額是¥****
Checking Account:當前余額是¥****
儲戶姓名:Owen Bryant
Checking Account:當前余額是¥****
儲戶姓名:Tim Soley
Savings Account:當前余額是¥****
Checking Account :當前余額是¥****
儲戶姓名:Maria Soley
Savings Account :當前余額是¥****
Checking Account :當前余額是¥****
㈥ 為什麼在web容器中servlet對象只有一個
1、為了節省內存,servlet的設計非常的巧妙,如果我們對每一個用戶請求都生成一個對應servlet的對象,第一、由於web伺服器的訪問量比較大,意味著內存開銷會很大,第二、要GC大量內存,延長GC時間。
2、servlet本身是多線程的,雖然我們可以通過實現SingleThreadModel介面來實現多實例servlet,但並不提倡。
3、一個servlet實例對應一個線程池,每當有一個請求到來時,就會選擇其中的一個線程,執行service方法,若多個請求都選中同一個線程,則請求排隊,在tomcat中,線程池中線程的個數通過server.xml中的<Connector>來配置。
㈦ 一個應用程序可以有幾個servlet對象
一個應用程序可以包括多個servlet對象,每次訪問只訪問一個servlet對象,多個servlet必須有各自的配置文件才可執行傳參,取值,跳轉,請求與相應
㈧ ASP.NET7大內置對象以及對應功能
ASP.NET的內置對象介紹
1.Response
2.Request
3.Server
4.Application
5.Session
6.Cookie
Request對象主要是讓伺服器取得客戶端瀏覽器的一些數據,包括從HTML表單用Post或者GET方法傳遞的參數、Cookie和用戶認證。因為Request對象是Page對象的成員之一,所以在程序中不需要做任何的聲明即可直接使用;
其類名為 HttpRequest屬性很多,但方法很少,只有一個BinaryRead()
1.使用Request.Form屬性獲取數據
通過該屬性,讀取<Form></Form>之間的表單數據.注意:提交方式要設置為「post」與Get方法相比較,使用Post方法可以將大量數據發送到伺服器端
2.利用Request.QueryString屬性獲取數據
Request對象的QuerySting屬性可以獲取 HTTP 查詢字元串變數集合 。通過該屬性,我們可以讀取地址信息 http://localhost/aaa.aspx?uid=tom&pwd=abc 其中標識為紅色部分的數據.
注意:提交方式要設置為「Get」
3.問題:Request.Form用於表單提交方式為Post的情況,而Request.QueryString用於表單提交方式為Get的情況,如果用錯,則獲取不到數據。
解決方法:利用Request(「元素名」)來簡化操作。
4.Request.ServerVariables("環境變數名稱")
類似的還有:UserHostAddress,Browser,Cookies,ContentType,IsAuthenticated
Item,Params
Response對象用語輸出數據到客戶端,包括向瀏覽器輸出數據、重定向瀏覽器到另一個URL或向瀏覽器輸出Cookie文件。
其類名為httpResponse
屬性和方法
Write() 向客戶端發送字元串信息
BufferOutPut屬性 是否使用緩存
Clear() 清除緩存
Flush() 強制輸出緩存的所有數據
Redirect() 網頁轉向地址
End() 終止當前頁的運行
WriteFile() 讀取一個文件,並且寫入客戶端輸出流
(實質:打開文件,並且輸出到客戶端。)
1.Response.Write 變數數據或字元串
Response.Write (變數數據或字元串)
<%=…%>
Response.Write("<script language=javascript>alert('歡迎學習ASP.NET')</script>")
Response.Write("<script>window.open('WebForm2.aspx')</script>")
2.Response對象的Redirect方法將客戶端瀏覽器重定向到另外的URL上,即跳轉到另一個網頁。
例如:
Response.Redirect("http://www.163.net/")
3. Response.End() 終止當前頁的運行
4.Response.WriteFile(FileName)
其中:
FileName 指代需向瀏覽器輸出的文件的文件名
Server對象提供對伺服器上的方法和屬性進行的訪問 .其類名稱是HttpServerUtility.
Server對象的主要屬性有:
MachineName:獲取伺服器的計算機名稱。
ScriptTimeout:獲取和設置請求超時(以秒計)。
方法名稱 說明
CreateObject 創建 COM 對象的一個伺服器實例。
Execute 執行當前伺服器上的另一個aspx頁,執行完該頁後再返回本頁繼續執行
HtmlEncode 對要在瀏覽器中顯示的字元串進行HTML編碼並返回已編碼的字元串。
HtmlDecode 對HTML編碼的字元串進行解碼,並返回已解碼的字元串。
MapPath 返回與 Web 伺服器上的指定虛擬路徑相對應的物理文件路徑。
Transfer 終止當前頁的執行,並為當前請求開始執行新頁。
UrlEncode 將代表URL的字元串進行編碼,以便通過 URL 從 Web 伺服器到客戶端進行可靠的 HTTP 傳輸。
UrlDecode 對已被編碼的URL字元串進行解碼,並返回已解碼的字元串。
UrlPathEncode 對 URL 字元串的路徑部分進行 URL 編碼,並返回已編碼的字元串。
編碼:
Server.HtmlEncode(「HTML代碼」)
解碼:
Server.HtmlDecode(「已編碼的HTML」)
1.Server對象的MapPath方法將虛擬路徑或相對於當前頁的相對路徑轉化為Web 伺服器上的物理文件路徑。
語法:Server.MapPath(「虛擬路徑」)
String FilePath
FilePath = Server.MapPath(「/」)
Response.Write(FilePath)
Application對象在實際網路開發中的用途就是記錄整個網路的信息,如上線人數、在線名單、意見調查和網上選舉等。在給定的應用程序的多有用戶之間共享信息,並在伺服器運行期間持久的保存數據。而且Application對象還有控制訪問應用層數據的方法和可用於在應用程序啟動和停止時觸發過程的事件。
1.使用Application對象保存信息
使用Application對象保存信息
Application(「鍵名」) = 值
或
Application(「鍵名」,值)
獲取Application對象信息
變數名 = Application(「鍵名」)
或:變數名 = Application.Item(「鍵名」)
或:變數名 = Application.Get(「鍵名」)
更新Application對象的值
Application.Set(「鍵名」, 值)
刪除一個鍵
Application.Remove(「鍵名」, 值)
刪除所有鍵
Application.RemoveAll()
或Application.Clear()
2.有可能存在多個用戶同時存取同一個Application對象的情況。這樣就有可能出現多個用戶修改同一個Application命名對象,造成數據不一致的問題。
HttpApplicationState 類提供兩種方法 Lock 和 Unlock,以解決對Application對象的訪問同步問題,一次只允許一個線程訪問應用程序狀態變數。
關於鎖定與解鎖
鎖定:Application.Lock()
訪問:Application(「鍵名」) = 值
解鎖:Application.Unlock()
注意:Lock方法和UnLock方法應該成對使用。
可用於網站訪問人數,聊天室等設備
3. 使用Application事件
在ASP.NET 應用程序中可以包含一個特殊的可選文件——Global.asax 文件,也稱作 ASP.NET 應用程序文件,它包含用於響應 ASP.NET或HTTP模塊引發的應用程序級別事件的代碼。
Global.asax 文件提供了7個事件,其中5個應用於Application對象
事件名稱說明
Application_Start 在應用程序啟動時激發
Application_BeginRequest 在每個請求開始時激發
Application_AuthenticateRequest 嘗試對使用者進行身份驗證時激發
Application_Error 在發生錯誤時激發
Application_End 在應用程序結束時激發
Session即會話,是指一個用戶在一段時間內對某一個站點的一次訪問。
Session對象在.NET中對應HttpSessionState類,表示「會話狀態」,可以保存與當前用戶會話相關的信息。
Session對象用於存儲從一個用戶開始訪問某個特定的aspx的頁面起,到用戶離開為止,特定的用戶會話所需要的信息。用戶在應用程序的頁面切換時,Session對象的變數不會被清除。
對於一個Web應用程序而言,所有用戶訪問到的Application對象的內容是完全一樣的;而不同用戶會話訪問到的Session對象的內容則各不相同。 Session可以保存變數,該變數只能供一個用戶使用,也就是說,每一個網頁瀏覽者都有自己的Session對象變數,即Session對象具有唯一性。
(1)將新的項添加到會話狀態中
語法格式為:
Session ("鍵名") = 值
或者
Session.Add( "鍵名" , 值)
(2)按名稱獲取會話狀態中的值
語法格式為:
變數 = Session ("鍵名")
或者
變數 = Session.Item("鍵名")
(3)刪除會話狀態集合中的項
語法格式為:
Session.Remove("鍵名")
(4)清除會話狀態中的所有值
語法格式為:
Session.RemoveAll()
或者
Session.Clear()
(5)取消當前會話
語法格式為:
Session.Abandon()
(6)設置會話狀態的超時期限,以分鍾為單位。
語法格式為:
Session.TimeOut = 數值
Global.asax 文件中有2個事件應用於Session對象
事件名稱 說明
Session_Start 在會話啟動時激發
Session_End 在會話結束時激發
Cookie就是Web伺服器保存在用戶硬碟上的一段文本。Cookie允許一個Web站點在用戶的電腦上保存信息並且隨後再取回它。信息的片斷以『鍵/值』對的形式存儲。
Cookie是保存在客戶機硬碟上的一個文本文件,可以存儲有關特定客戶端、會話或應用程序的信息,在.NET中對應HttpCookie類。
有兩種類型的Cookie:會話Cookie(Session Cookie)和持久性Cookie。前者是臨時性的,一旦會話狀態結束它將不復存在;後者則具有確定的過期日期,在過期之前Cookie在用戶的計算機上以文本文件的形式存儲。
在伺服器上創建並向客戶端輸出Cookie可以利用Response對象實現。
Response對象支持一個名為Cookies的集合,可以將Cookie對象添加到該集合中,從而向客戶端輸出Cookie。 通過Request對象的Cookies集合來訪問Cookie
謝謝。
㈨ java 面向對象這個思想 在web應用中具體是怎麼體現的。
MVC三層架構的目的就是解耦 把層次分離出來 以便以後代碼的二次卡發和維護
㈩ 一個Web應用最多有幾個httpsession對象
沒有查到相關資料。我覺得,這還和單個seesion對象所佔位元組數有關,還有一個主要指標就是seesion存取並發數問題,如果session數量雖少,但是存取頻繁,也有影響。