Java面試題

yanguz123 13年前發布 | 4K 次閱讀 Cron

目錄

Java面試題整理... - 6 -

Java面向對象... - 6 -

1.   super()this()的區別?... - 6 -

2.    作用域public,protected,private,以及不寫時的區別... - 6 -

3.    編程輸出如下圖形。... - 6 -

4.    JAVA的事件委托機制和垃圾回收機制... - 6 -

5.    JAVA中,如何跳出當前的多重嵌套循環?... - 6 -

6.    什么是java序列化,如何實現java序列化?(寫一個實例) - 6 -

7.    一個".java"源文件中是否可以包括多個類(不是內部類)?有什么限制?... - 7 -

8.    排序都有哪幾種方法?請列舉。用JAVA實現一個快速排序?... - 7 -

9.    OverloadOverride的區別。Overloaded的方法是否可以改變返回值的類型?. - 7 -

10.      Final類有什么特點?... - 7 -

11.      繼承時候類的執行順序問題,一般都是選擇題,問你將會打印出什么?. - 7 -

12.      內部類的實現方式?. - 8 -

13.      JAVA實現一種排序JAVA類實現序列化的方法(二種)... - 8 -

14.      如在COLLECTION框架中實現比較要實現什么樣的接口... - 8 -

15.     用插入法進行排序代碼如下... - 8 -

16.    編程:編寫一個截取字符串的函數,輸入為一個字符串和字節數,輸出
按字節截取的字符串。 但是要保證漢字不被截半個,如"ABC"4,應該截
"AB",輸入"ABCDEF"6,應該輸出為"ABC"而不是"ABC
+漢的半個"... - 9 -

15Java編程,打印昨天的當前時刻... - 9 -

16、文件讀寫,實現一個計數器... - 10 -

17、指出下面程序的運行結果... - 10 -

18、抽象類和接口的區別?... - 10 -

19、什么是類的返射機制?. - 11 -

20、類的返射機制中的包及核心類?. - 11 -

21、得到Class的三個過程是什么?. - 11 -

22、如何喚起類中的一個方法?... - 11 -

23、如何將數值型字符轉換為數字(IntegerDouble)?... - 11 -

24、如何將數字轉換為字符?... - 11 -

25、如何去小數點前兩位,并四舍五入。... - 11 -

26、如何取得年月日,小時分秒?... - 11 -

27、如何取得從1970年到現在的毫秒數... - 11 -

28、如何獲取某個日期是當月的最后一天... - 11 -

29、如何格式化日期... - 12 -

30、編碼轉換,怎樣實現將GB2312編碼的字符串轉換為ISO-8859-1編碼的字符串。... - 12 -

32String s = new String("xyz");創建了幾個String Object?. - 12 -

33floatfloat f=3.4是否正確?. - 12 -

35、說出一些常用的類,包,接口,請各舉5... - 12 -

36java中會存在內存泄漏嗎,請簡單描述。... - 12 -

37java中實現多態的機制是什么?... - 13 -

38、垃圾回收器的基本原理是什么?垃圾回收器可以馬上回收內存嗎?有什么辦法主動通知虛擬機進行垃圾回收?    - 13 -

39、靜態變量和實例變量的區別?... - 13 -

41、是否可以從一個static方法內部發出對非static方法的調用?... - 13 -

42、寫clone()方法時,通常都有一行代碼,是什么?... - 13 -

43JAVA語言如何進行異常處理,關鍵字:throws,throw,try,catch,finally分別代表什么意義?在try塊中可以拋出異常嗎?... - 13 -

45、冒泡排序法... - 13 -

46String and StringBuffer的區別... - 14 -

47、用java代碼編寫堆棧... - 14 -

48、集合的作用是什么?. - 15 -

49、集合的通用方法有那些?通用方法是什么?(操作) - 15 -

50、說出ArrayList,Vector, LinkedList的存儲性能和特性HashMapHashtable的區別... - 15 -

51Collection Collections的區別。... - 15 -

52Set里的元素是不能重復那么用什么方法來區分重復與否呢? 是用==還是equals()? 它們有何區別?contains來區分是否有重復的對象。還是都不用。... - 15 -

53List, Set, Map是否繼承自Collection接口?. - 16 -

54、面向對象的特征有哪些方面... - 16 -

55String是最基本的數據類型嗎?. - 16 -

56int Integer 有什么區別?... - 16 -

57、運行時異常與一般異常有何異同?... - 16 -

58&&&的區別?... - 16 -

59final, finally, finalize的區別?... - 16 -

62heapstack有什么區別?... - 16 -

63Static Nested Class Inner Class的不同... - 16 -

64、什么時候用assert... - 17 -

65GC是什么? 為什么要有GC?. - 17 -

66short s1 = 1; s1 = s1 + 1;有什么錯? short s1 = 1; s1 += 1;有什么錯?. - 17 -

67Math.round(11.5)等於多少? Math.round(-11.5)等於多少?. - 17 -

68Java有沒有goto?. - 17 -

69、給我一個你最常見到的runtime exception. - 17 -

70、接口是否可繼承接口? 抽象類是否可實現(implements)接口? 抽象類是否可繼承實體類(concrete class)?  - 17 -

71abstractmethod是否可同時是static,是否可同時是native是否可同時是synchronized?  - 17 -

72、數組有沒有length()這個方法? String有沒有length()這個方法?... - 18 -

73、構造器Constructor是否可被override?. - 18 -

74、是否可以繼承String?. - 18 -

75swtich是否能作用在byte是否能作用在long是否能作用在String?. - 18 -

76try {}里有一個return語句,那么緊跟在這個try后的finally {}里的code會不會被執行,什么時候被執行,在return前還是后?. - 18 -

77、編程題: 用最有效率的方法算出2乘以8等於幾?. - 18 -

78、兩個對象值相同(x.equals(y) == true),但卻可有不同的hash code,這句話對不對?. - 18 -

79、當一個對象被當作參數傳遞到一個方法后,此方法可改變這個對象的屬性,并可返回變化后的結果,那么這里到底是值傳遞還是引用傳遞?. - 18 -

80、四種會話跟蹤技術... - 18 -

81、編程題: 寫一個Singleton出來。... - 18 -

83Java中的異常處理機制的簡單原理和應用。... - 19 -

84、垃圾回收的優點和原理。并考慮2種回收機制。... - 19 -

85、描述一下JVM加載class文件的原理機制?. - 19 -

86char型變量中能不能存貯一個中文漢字?為什么?. - 19 -

88、寫一個程序,從文件(c:\test.txt)中查出字符串”mobnet”出現的次數?... - 19 -

java基礎類庫(io流,集合類,線程,SocketAWTSwing,sql) - 20 -

1java中有幾種類型的流?JDK為每種類型的流提供了一些抽象類以供繼承,請說出他們分別是哪些類?    - 20 -

2、啟動一個線程是用run()還是start()?. - 20 -

3、線程的基本概念、線程的基本狀態以及狀態之間的關系... - 20 -

4、多線程有幾種實現方法,都是什么?同步有幾種實現方法,都是什么? 用什么關鍵字修飾同步方法? stop()suspend()方法為何不推薦使用?... - 20 -

synchoronized修飾同步方法。... - 20 -

5、集合框架有什么?. - 20 -

12、設計4個線程,其中兩個線程每次對j增加1,另外兩個線程對j每次減少1。寫出程序    - 21 -

13、同步和異步有和異同,在什么情況下分別使用他們?舉例說明。... - 21 -

14sleep() wait() 有什么區別?. - 22 -

15、當一個線程進入一個對象的一個synchronized方法后,其它線程是否可進入此對象的其它方法?  - 22 -

17、輸入輸出流的理解: - 22 -

18、請寫一個程序的讀寫要求用兩種方式一種是低層流另一種是高層流。... - 22 -

19、如何列出某個目錄下的所有文件... - 23 -

Socket. - 24 -

20、用socket通訊寫出客戶端和服務器端的通訊,要求客戶發送數據后能夠回顯相同的數據?    - 24 -

23、介紹JAVA中的Collection FrameWork(包括如何寫自己的數據結構)?. - 25 -

24、請說出你所知道的線程同步的方法... - 25 -

jdbc數據訪問技術... - 25 -

1JDBC如何做事務處理?... - 25 -

2、寫出幾個在Jdbc中常用的接口... - 25 -

3、簡述你對Statement,PreparedStatement,CallableStatement的理解... - 25 -

4Java中訪問數據庫的步驟... - 26 -

5JDBC中的核心類及其作用是什么?. - 26 -

6、執行存儲過程用那一個類,如何操作輸出參數?(操作). - 26 -

8、可能會讓你寫一段JdbcOracle的程序. - 26 -

9Class.forName的作用?為什么要用?. - 26 -

10Jdo是什么?. - 26 -

11在ORACLE大數據量下的分頁解決方法。一般用截取ID方法,還有是三層嵌套方法... - 27 -

Web編程Jsp&Servlet技術... - 27 -

1、簡單說說tomcat的配置... - 27 -

2JSP中動態INCLUDE與靜態INCLUDE的區別... - 27 -

3forwardredirect的區別?... - 27 -

4Servlet的體系結構是什么?. - 28 -

Servlet. - 28 -

5、如何實現一個自定義的servlet?. - 28 -

6Servlet的生命周期是什么?. - 28 -

7jsp就是一個servlet是否正確?. - 28 -

8、請羅列jsp中的腳本、指令及動作?. - 28 -

9JSP的內置對象及方法... - 28 -

10、說出在JSP頁面里是怎么分頁的?. - 28 -

11include的兩種實現方式的區別?. - 30 -

12jsp頁面中兩種跳轉方式分別是什么?有什么區別?. - 30 -

13、描述JSPServlet的區別、共同點、各自應用的范圍... - 30 -

14、在JSP中如何讀取客戶端的請求,如何確定某個Jsp文件的真實路徑?... - 30 -

15、描述CookieSession的作用區別和各自的應用范圍Session工作原理。... - 30 -

16、說明JsperrorPage的作用應用范圍。... - 31 -

17、介紹在Jsp中如何使用JavaBeans - 31 -

19、簡單介紹JSP的標記庫... - 31 -

20Servlet中的核心類有那些,各有什么特點?. - 31 -

21Servlet中重要的包有那些,有什么區別?. - 31 -

22、說出Servlet的生命周期,并說出ServletCGI的區別?... - 31 -

23、什么情況下調用doGet()doPost()... - 31 -

25、如何現實servlet的單線程模式... - 32 -

27Request對象的主要方法... - 32 -

28、我們在web應用開發過程中經常遇到輸出某種編碼的字符,如iso8859-1等,如何輸出一個某種編碼的字符串    - 32 -

30Servlet執行時一般實現哪幾個方法?. - 32 -

5 Hibernate持久層技術... - 32 -

1、在myeclipse加入hibernate環境的全過程是什么?. - 32 -

2hibernate的核心配置文件是什么及其作用?. - 33 -

3hibernate的核心類是什么它們的相互關系是什么?重要的方法是什么?. - 33 -

4、關聯: - 33 -

5hibernate中的one-to-manymany-to-one中常用的方式是什么?. - 33 -

6Criteria 的作用?. - 33 -

7DetachedCriteria的作用... - 33 -

8Query. - 34 -

9、繼承關系的實現... - 34 -

10tomcat連接池:在容器中預先產生了n個連接實例,客戶端不用重新實例化可以直接取。    - 34 -

11、對象的三大狀態... - 35 -

12hibernate常見優化策略... - 36 -

6.    iBatis持久層技術... - 36 -

ibatis的原因:. - 36 -

jdbchibernateibatis的區別... - 36 -

ibatis的核心配置文件: - 36 -

ibatis的核心類: - 36 -

7 Structs界面控制層技術... - 37 -

1請說出struts框架的幾大組件... - 37 -

3struts的核心類有那些,在MVC模式中其對應的關系是什么?... - 37 -

4Struts的處理請求的全過程是什么?. - 37 -

5、在struts中如何通過一個url找到一個action它的核心配置文件是什么?. - 38 -

6、為什么使用MVC其主要目的是什么?. - 38 -

7、對于MVCaction中對應有類有幾種,各有什么作用?. - 38 -

8struts的標記有幾類,請列舉并說明其作用?. - 38 -

9、如何在struts中配置數據源在,什么文件?用什么標簽?如何取出DataSource?. - 38 -

10、如何在jbuilder中開發struts?. - 38 -

11、如何實現strutsvalidator框架... - 39 -

13、如何實現國際化?. - 39 -

國際化:不用修改代碼,就適用于不同的語言國家... - 39 -

8 JSF界面控制層技術... - 40 -

1Jsf中的核心類用那些?有什么作用?. - 40 -

2Jsf中的LiftCycle六大生命周期是什么?. - 40 -

3、如何管量web層中的Bean,用什么標簽。如何通過jsp頁面與Bean綁定在一起進行處理?  - 40 -

4Jsf中導航的標簽是什么?. - 40 -

5jsf中用戶界面組件模型有幾類各代表什么?. - 40 -

6、表格處理及取值... - 40 -

7jsf的標簽庫有哪些?... - 41 -

9 Spring 應用框架技術... - 41 -

1SpringStruts的區別?     strusts:是一種基于MVC模式的一個web層的處理。... - 41 -

2、什么是aopaop的作用是什么?. - 41 -

3aop中的關鍵名詞有些那些,相互關系是什么?. - 41 -

4、依賴注入的方式有幾種,各是什么?. - 41 -

5spring中的核心類有那些,各有什么作用?. - 42 -

6ApplicationContext的作用... - 42 -

7、如何實現資源管理... - 42 -

8、如何實現加web框架中... - 42 -

9、如何實現事件處理... - 42 -

10springiocdi代表什么意思?. - 42 -

、如何在spring中實現國際化?. - 42 -

12spring的配置的主要標簽是什么?有什么作用?. - 43 -

13springejb2.0的事務管理比較的優缺點?. - 43 -

14springjdbc與傳統的jdbc有什么區別,其核心類有那些?. - 43 -

15、在spring中有幾種事務管理分別是什么?. - 43 -

16、在spring中如何配代碼的事務管理?. - 44 -

17、在spring中如何配容器的事務管理相關的類有那些?. - 44 -

18、如果springhibernate結合在一起可以不需要hibernate.cfg.xml文件是否正確?. - 44 -

19spring+hibernate的配置文件中的主要類有那些?如何配置?. - 44 -

20spring+hibernate的代碼實現中對于實現類一定繼承于一個類是那一個它有什么作用。    - 44 -

21、如何配置spring+struts?. - 44 -

22、如何在web環境中配置applicationContext.xml文件?. - 44 -

24Jsfspring的區別?. - 45 -

jsf:是一種基于MVC模式的一個web層的處理,粒度較struts較細。... - 45 -

Ejb技術... - 45 -

1weblogic的熱發布... - 45 -

2、在ejb中實現one-to-many. - 45 -

3ejb所用的技術: - 45 -

4、實ejb幾個接口,幾個類?. - 45 -

5、實現ejb相關的配置文件是什么?. - 45 -

6ejb的分類?區別... - 46 -

7、本地接口與遠程接口的區別。... - 46 -

8、請求處理的過程?. - 46 -

9statefull的生命周期... - 46 -

10stateless的生命周期... - 46 -

11entityBean的生命周期: - 46 -

12EJB需直接實現它的業務接口或Home接口嗎,請簡述理由。... - 47 -

13EJB的激活機制... - 47 -

14EJB是基于哪些技術實現的?并說 SessionBeanEntityBean的區別,... - 47 -

15EJB的分類是什么?各有什么特點?. - 47 -

10EJB中主要的配置文件及作用是什么?. - 47 -

15、說出數據連接池的工作機制是什么?. - 48 -

16EJB2.0有哪些內容?分別用在什么場合? EJB2.0EJB1.1的區別?. - 48 -

18EJBJAVA BEAN的區別... - 48 -

19EJB的角色和三個對象... - 48 -

20EJB容器提供的服務... - 48 -

21EJB規范規定EJB中禁止的操作有哪些?... - 48 -

26EJB的基本架構... - 49 -

30、如何在weblogic中進行ssl配置與客戶端的認證配置或說說j2ee(標準)進行ssl的配置... - 49 -

31如何查看在weblogic中已經發布的EJB?. - 49 -

WebService技術... - 49 -

1、什么是Web Service?. - 49 -

2、什么是Web容器?. - 50 -

3、應用服務器有那些?... - 50 -

5、如何給weblogic指定大小的內存?. - 50 -

6、如何設定的weblogic的熱啟動模式(開發模式)與產品發布模式?. - 50 -

7、如何啟動時不需輸入用戶名與密碼?. - 50 -

8、在weblogic管理制臺中對一個應用域(或者說是一個網站,Domain)進行jmsejb或連接池等相關信息進行配置后,實際保存在什么文件中?. - 50 -

9、說說weblogic中一個Domain的缺省目錄結構?比如要將一個簡單的helloWorld.jsp放入何目錄下,然的在瀏覽器上就可打入 http://主機:端口號//helloword.jsp就可以看到運行結果了? 又比如這其中用到了一個自己寫的javaBean該如何辦?. - 50 -

12CORBA是什么?用途是什么?. - 50 -

13、說說在weblogic中開發消息Bean時的persistentnon-persisten的差別... - 50 -

14WEB SERVICE名詞解釋。JSWDL開發包的介紹。JAXPJAXM的解釋。SOAPUDDI,WSDL解釋。    - 50 -

j2ee模式MVC模式、Model1Model2... - 51 -

1j2ee常用的設計模式?說明工廠模式。... - 51 -

2、說說你所熟悉或聽說過的j2ee中的幾種常用模式?及對設計模式的一些看法... - 51 -

3、解釋下面關于J2EE的名詞... - 51 -

4、介紹J2EEJ2SEJ2ME的區別。... - 51 -

5、開發中都用到了那些設計模式?用在什么場合?. - 52 -

6J2EE是什么?... - 52 -

7J2EE是技術還是平臺還是框架?... - 52 -

其他... - 52 -

1、當前主流的解析器有那些?. - 52 -

2Dom解析處理的過程是什么?. - 52 -

3Sax解析處理的過程是什么?. - 53 -

4DomSax相比它們的優缺點是什么?. - 54 -

5、如何將Dom對象寫入到文件中?. - 54 -

6、用jdom解析xml文件時如何解決中文問題?. - 54 -

7XML文檔定義有幾種形式?它們之間有何本質區別?解析XML文檔有哪幾種方式?... - 54 -

8、標準建模語言UML中的各種圖?. - 54 -

9BSCS的聯系與區別。... - 54 -

10Uml的概念是什么?主要的工具是什么... - 55 -

Uml:統一建模語言... - 55 -

11Uml的概念中的九大圖形是什么?最重的三個圖是什么?各有什么特點?. - 55 -

13、在類圖中如何找類?. - 56 -


Java
面試題整理

 Java面向對象

1.        super()this()的區別?

This():當前類的對象,super父類對象。

Super():在子類訪問父類的成員和行為,必須受類繼承規則的約束

this他代表當前對象,當然所有的資源都可以訪問.

在構造函數中,如果第一行沒有寫super(),編譯器會自動插入.但是如果父類沒有不帶參數的構造函數,或這個函數被私有化了(private修飾).此時你必須加入對父類的實例化構造.this就沒有這個要求,因為它本身就進行實例化的構造.
而在方法中superthis使用的方法就差不多了.只不過super 要考慮是否能訪問其父類的資源.

 

2.        作用域public,protected,private,以及不寫時的區別

?         Public:不同包、同一包、類內都可用

?         Private:類內

?         Protected: 不同包的子類、同一包、類內都可用

?         不寫時:同一包內、類內

3.        編程輸出如下圖形

* * * * *

* * * *

* * *

* *

*

代碼如下:

public class Print {

    public static void main(String[] args) {

       for (int i = 0; i < 5; i++) {

           for (int j = 5; j > i; j--) {

              System.out.print("*");

           }

           System.out.println();

       }

    }

}

4.        JAVA的事件委托機制和垃圾回收機制

java 事件委托機制的概念,一個源產生一個事件并將它送到一個或多個監聽器那里。在這種方案中,監聽器簡單的等待,直到它收到一個事件。一旦事件被接受,監聽器將處理這個事件,然后返回。

垃圾回收機制 垃圾收集是將分配給對象但不再使用的內存回收或釋放的過程。如果一個對象沒有指向它的引用或者其賦值為null,則次對象適合進行垃圾回收

 

5.        JAVA中,如何跳出當前的多重嵌套循環?

break; return 方法。

6.        什么是java序列化,如何實現java序列化?(寫一個實例)

序列化:

    可以將一個對象保存到一個文件,所以可以通過流的方式在網絡上傳輸,可以將文件的內容讀取,轉化為一個對象。

 

處理對象流的機制,所謂對象流也就是將對象的內容進行流化。可以對流化后的對象進行讀寫操作,也可將流化后的對象傳輸于網絡之間。序列化是為了解決在對對象流進行讀寫操作時所引發的問題。

序列化的實現:

將需要被序列化的類實現Serializable接口,該接口沒有需要實現的方法,implements Serializable只是為了標注該對象是可被序列化的,然后使用一個輸出流(如:FileOutputStream)來構造一個ObjectOutputStream(對象流)對象,接著,使用ObjectOutputStream對象的writeObject(Object obj)方法就可以將參數為obj的對象寫出(即保存其狀態),要恢復的話則用輸入流。

 

7.        一個".java"源文件中是否可以包括多個類(不是內部類)?有什么限制?

可以。如果這個類的修飾符是public,其類名與文件名必須相同。

8.        排序都有哪幾種方法?請列舉。用JAVA實現一個快速排序?

排序的方法有:插入排序(直接插入排序、希爾排序),交換排序(冒泡排序、快速排序),選擇排序(直接選擇排序、堆排序),歸并排序,分配排序(箱排序、基數排序)

快速排序的偽代碼。

9.        OverloadOverride的區別。Overloaded的方法是否可以改變返回值的類型?

方法的

重寫Override,子類覆蓋父類的方法,將子類傳與父類的引用調用的還是子類的方法。

重載Overloading 一個類多個方法,名稱相同,參數個數類型不同。

兩者都是Java多態性的不同表現。

Overloaded的方法是可以改變返回值的類型。

 

1 public class Ctest()

{

    Public static void main()

{

System.out.prinln(8+8+88+8+8);

}

}

 

168888

10.    Final類有什么特點?

       屬性常量

       方法不可以overridding

       類不可以繼承

11.    繼承時候類的執行順序問題,一般都是選擇題,問你將會打印出什么?

答:父類:

package test;

public class FatherClass

{

public FatherClass()

{

System.out.println("FatherClass Create");

}

}

子類:

package test;

import test.FatherClass;

public class ChildClass extends FatherClass

{

public ChildClass()

{

System.out.println("ChildClass Create");

}

public static void main(String[] args)

{

FatherClass fc = new FatherClass();

ChildClass cc = new ChildClass();

}

}

輸出結果

C:>java test.ChildClass

FatherClass Create

FatherClass Create

ChildClass Create

12.    內部類的實現方式?

示例代碼如下

package test;

public class OuterClass

{

private class InterClass

{

Public Interlass()

{

System.out.println("InterClass Create");

}

}

public OuterClass()

{

InterClass ic = new InterClass();

System.out.println("OuterClass Create");

}

public static void main(String[] args)

{

OuterClass oc = new OuterClass();

}

}

輸出結果:

C:>java test/OuterClass

InterClass Create

OuterClass Create

13.    JAVA實現一種排序JAVA類實現序列化的方法(二種)

14.     如在COLLECTION框架中實現比較要實現什么樣的接口

15.  用插入法進行排序代碼如下

package test;

import java.util.*;

class InsertSort

{

ArrayList al;

public InsertSort(int num,int mod)

{

al = new ArrayList(num);

Random rand = new Random();

System.out.println("The ArrayList Sort Before:");

for (int i=0;i<num ;i++ )

{

al.add(new Integer(Math.abs(rand.nextInt()) % mod + 1));

System.out.println("al["+i+"]="+al.get(i));

}

}

public void SortIt()

{

Integer tempInt;

int MaxSize=1;

for(int i=1;i<al.size();i++)

{

tempInt = (Integer)al.remove(i);

if(tempInt.intValue()>=((Integer)al.get(MaxSize-1)).intValue())

{

al.add(MaxSize,tempInt);

MaxSize++;

System.out.println(al.toString());

} else {

for (int j=0;j<MaxSize ;j++ )

{

if

 

(((Integer)al.get(j)).intValue()>=tempInt.intValue())

{

al.add(j,tempInt);

MaxSize++;

System.out.println(al.toString());

break;

}

}

}

}

System.out.println("The ArrayList Sort After:");

for(int i=0;i<al.size();i++)

{

System.out.println("al["+i+"]="+al.get(i));

}

}

public static void main(String[] args)

{

InsertSort is = new InsertSort(10,100);

is.SortIt();

}

}

 

 

JAVA類實現序例化的方法是實現java.io.Serializable接口

Collection框架中實現比較要實現Comparable 接口和 Comparator 接口

 

16.    編程:編寫一個截取字符串的函數,輸入為一個字符串和字節數,輸出為按字節截取的字符串。 但是要保證漢字不被截半個,如"ABC"4,應該截為"AB",輸入"ABCDEF"6,應該輸出為"ABC"而不是"ABC+漢的半個"

答:代碼如下:

public static void split(String source,int num) throws Exception

    {

        int k=0;

        String temp="";

        for (int i = 0; i <source.length(); i++)

        {  

            byte[] b=(source.charAt(i)+"").getBytes();

            k=k+b.length;

            if(k>num)

            {

                break;

            }

            temp=temp+source.charAt(i);        

        }  

        System.out.println(temp);

    }

 

15Java編程,打印昨天的當前時刻

public class YesterdayCurrent{

public void main(String[] args){

Calendar cal = Calendar.getInstance();

cal.add(Calendar.DATE, -1);

System.out.println(cal.getTime());

}

}

16、文件讀寫,實現一個計數器

public int getNum(){

int i = -1;

try{

String stri="";

BufferedReader in = new BufferedReader(new FileReader(f));

while((stri=in.readLine())!=null){

i = Integer.parseInt(stri.trim());

}

in.close();

}catch(Exception e){

e.printStackTrace();

}

return i;

}

public void setNum(){

int i = getNum();

i++;

try{

PrintWriter out=new PrintWriter(new BufferedWriter(new FileWriter(f,false)));

out.write(String.valueOf(i)); //可能是編碼的原因如果直接寫入int的話將出現java編碼和windows編碼的混亂因此此處寫入的是String

out.close() ;

}catch(Exception e){

e.printStackTrace();

}

}

 

17、指出下面程序的運行結果

class A{

static{

System.out.print("1");

}

public A(){

System.out.print("2");

}

}

class B extends A{

static{

System.out.print("a");

}

public B(){

System.out.print("b");

}

}

public class Hello{

public static void main(String[] ars){

A ab = new B(); //執行到此處,結果: 1a2b

ab = new B(); //執行到此處,結果: 1a2b2b

}

}

  注:類的static 代碼段,可以看作是類首次加載(被虛擬機加載)執行的代碼,而對于類的加載,首先要執行其基類的構造,再執行其本身的構造

18、抽象類和接口的區別?

(1)接口可以被多重implements,抽象類只能被單一extends

(2)接口只有定義,抽象類可以有定義和實現

(3)接口的字段定義默認為:public static final, 抽象類字段默認是"friendly"(本包可見)

當功能需要累積時用抽象類,不需要累積時用接口。

19、什么是類的返射機制?

通過類(Class對象),可以得出當前類的fields、method、construtor、interface、superClass、modified等,同是可以通過類實例化一個實例、設置屬性、喚醒方法。Spring中一切都是返射、struts、hibernate都是通過類的返射進行開發的。

20、類的返射機制中的包及核心類?

?  java.lang.Class

?  java.lang.refrection.Method

?  java.lang.refrection.Field

?  java.lang.refrection.Constructor

?  java.lang.refrection.Modifier

?  java.lang.refrection.Interface

21、得到Class的三個過程是什么?

對象.getClass()

        .classInteger.type(int)  Integer.class(java.lang.Integer)

        Class.forName();

22、如何喚起類中的一個方法?

產生一個Class數組,說明方法的參數

通過Class對象及方法參數得到Method

通過method.invoke(實例,參數值數組)喚醒方法

23、如何將數值型字符轉換為數字(IntegerDouble)?

Integer.parseInt(1234)

Double.parseDouble(123.2)

24、如何將數字轉換為字符?

1+””

1.0+””

25、如何去小數點前兩位,并四舍五入。

double d=1256.22d;

d=d/100;

System.out.println(Math.round(d)*100);

26、如何取得年月日,小時分秒?

Calendar c=Calendar.getInstance();

        c.set(Calendar.YEAR,2004);

        c.set(Calendar.MONTH,0);

        c.set(Calendar.DAY_OF_MONTH,31);

        System.out.println(c.get(Calendar.YEAR)+"  "+(c.get(Calendar.MONTH)+1)+"  "+c.get(Calendar.DAY_OF_MONTH));

27、如何取得從1970年到現在的毫秒數

Java.util.Date dat=new Date();

long now=dat.getTime();

28、如何獲取某個日期是當月的最后一天

當前日期加一天,若當前日期與結果的月份不相同,就是最后一天。

 

取下一個月的第一天,下一個月的第一天-1

 

public static void main(String[] args)

    {

        Calendar c=Calendar.getInstance();

        c.set(Calendar.YEAR,2004);

        c.set(Calendar.MONTH,0);

        c.set(Calendar.DAY_OF_MONTH,30);

        Calendar c1=(Calendar)c.clone();

        System.out.println(c.get(Calendar.YEAR)+"  "+(c.get(Calendar.MONTH)+1)+"  "+c.get(Calendar.DAY_OF_MONTH));

       

        c.add(Calendar.DAY_OF_MONTH,1);

        if(c.get(Calendar.MONTH)!=c1.get(Calendar.MONTH))

        {

            System.out.println("是最后一天");

        }

        else

        {

            System.out.println("不是取后一天");

           

        }

    }

29、如何格式化日期

Import java.text. SimpleDateFormat;

SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

Date dat=new Date();

//把日期轉化為字符串

String str=sdf.format(dat);

System.out.println(str);

//將字符串轉化為日期

Java.util.Date d1=sdf.parse(yyyy-mm-dd);

30、編碼轉換,怎樣實現將GB2312編碼的字符串轉換為ISO-8859-1編碼的字符串。

String a=new String("".getBytes("gb2312"),"iso-8859-1");

 

 

String a=new String("".getBytes("iso-8859-1"));

 

32String s = new String("xyz");創建了幾個String Object?

New了一個,XYZ本來又是一個

兩個

33floatfloat f=3.4是否正確?

?  報錯應當是float f=3.4f

?  如果是float f=3(整數)正確

35、說出一些常用的類,包,接口,請各舉5

常用的類:BufferedReader  BufferedWriter  FileReader  FileWirter  String  Integer

常用的包:java.lang  java.awt  java.io  java.util  java.sql javax.xml javax.sevlet javax.ejb.  java.net  javax.faces 

常用的接口 List  Map  Document  NodeList EjbObject EjbHome SessionBean  EntityBean

36java中會存在內存泄漏嗎,請簡單描述。

會。如:int i,i2;  return (i-i2);   //when i為足夠大的正數,i2為足夠大的負數。結果會造成溢位,導致錯誤。

37java中實現多態的機制是什么?

       靜態的多態:方法名相同,參數個數或類型不相同。(overloading)

       動態的多態:

              子類覆蓋父類的方法,將子類的實例傳與父類的引用調用的是子類的方法

              實現接口的實例傳與接口的引用調用的實現類的方法。      

38、垃圾回收器的基本原理是什么?垃圾回收器可以馬上回收內存嗎?有什么辦法主動通知虛擬機進行垃圾回收?

動態內存

        存放類實例

靜態內存

類本身

垃圾收集主要針對的是動態內存,一般當內存不夠用時會進行垃圾收集。

或通過System.gc()手動收集,但不保證一定執行。

39、靜態變量和實例變量的區別?

static i = 10; //常量

  class A a;  a.i =10;//可變

靜態方法可以調用靜態變量。

實現方法可以調用靜態變量、實例變量

41、是否可以從一個static方法內部發出對非static方法的調用?

不可以,如果其中包含對象的method();不能保證對象初始化.

42、寫clone()方法時,通常都有一行代碼,是什么?

Clone 有缺省行為,super.clone();他負責產生正確大小的空間,并逐位復制。

43JAVA語言如何進行異常處理,關鍵字:throws,throw,try,catch,finally分別代表什么意義?在try塊中可以拋出異常嗎?

Try:執行部分,產生異常

Catch:捕捉異常

Finally:不管有沒有異常都執行

Throws:在方法聲明處聲明要拋出的異常,調用者必須對其進行處理。

Throw:拋出一個異常

 

在try中可以拋出異常,一般與聲明的異常相同。

 

自定義異常要繼承于Exception或Exception的子類

45、冒泡排序法

//相鄰兩個數比較,將最小或最大的放到后面,最后面數的不參與比較

public class BubbleSort {

    private static int al[] = new int[10];

    public BubbleSort() {

       al[0]=2;

       al[1]=3;

       al[2]=23;

       al[3]=45;

       al[4]=1;

       al[5]=67;

       al[6]=23;

       al[7]=80;

       al[8]=35;

       al[9]=72;

    }

    public static void main(String[] args) {

       BubbleSort bs = new BubbleSort();

       System.out.println("排序前:");

       display(al);

      

       for(int i=0;i<al.length;i++) {

      

           for (int j = 0; j < al.length-i-1; j++) {

             

              if(al[j]>al[j+1]) {

                  swap(j,j+1);

              }

           }

       }

       System.out.println();

       System.out.println("排序后:");

       display(al);

    }

    private static void display(int[] al2) {

       for (int i = 0; i < al2.length; i++) {

           System.out.print(al2[i]+"  ");

       }

    }

    private static void swap(int i, int j) {

       int temp = al[i];

       al[i]= al[j];

       al[j] = temp;

    }

}

46String and StringBuffer的區別

String:長度給定不可變,當多個字符串聯合時要先轉為StringBuffer,再聯合,速度慢。

StringBuffer:長度可變,可以將多個字符串值直接聯合,效率高

47、用java代碼編寫堆棧

public class Stack {

 

    int[] data;

    int maxSize;

    int top;

    public Stack(int maxSize) {

       this.maxSize = maxSize;

       data = new int[maxSize];

       top = -1;

    }

   

    /**

     * 依次加入數據

     * @param data 要加入的數據

     * @return 添加是否成功

     */

    public boolean push(int data) {

       if(top+1== maxSize) {

           System.out.println("棧已滿!");

           return false;

       }

       this.data[++top] = data;

       return true;

    }

   

    /**

     * 從棧中取出數據

     * @return 取出的數據

     */

    public int pop() throws Exception{

       if(top==-1) {

           throw new Exception("棧已空!");

       }

       return this.data[top--];

    }

   

    public static void main(String[] args) throws Exception {

       Stack stack=new Stack(1000);

       stack.push(1);

       stack.push(2);

       stack.push(3);

       stack.push(4);

       stack.push(5);

       while(stack.top>=0)

       {

           System.out.println(stack.pop());

       }     

    }

}

48、集合的作用是什么?

數據的傳送 增、刪、改、查、constainsAll,可以存放不同類型的對象。

49、集合的通用方法有那些?通用方法是什么?(操作)

集合List 的遍歷方法有:

Iterator:

Enumeration

For

Get

set

Collection的通用方法有:

    Iterator()

    Add()

    Clear();

    remove()

   

50、說出ArrayList,Vector, LinkedList的存儲性能和特性HashMapHashtable的區別

ArrayList Vector:以數組的方式存儲,增、刪慢,查、改快

    ArrayList:線程不安全,速度快

    ArrayList:線程安全,速度慢(synchoronized)

LikedList: 以單鏈表的方式存儲,增、刪快,查、改慢

 

HashMapHashtable都實現的Map接口,HashTable線程安全,HashMap線程不安全。

51Collection Collections的區別。

Collection是集合的根接口其下有setlist

Collections是集合的算法。

52Set里的元素是不能重復的那么用什么方法來區分重復與否呢? 是用==還是equals()? 它們有何區別?contains來區分是否有重復的對象。還是都不用。

 

在比較時先調用hashCode方法,如果不相同,證明不相等。

如果相同,再調用equals方法,如果equals方法相同,證明相等,不相同,證明不相等。

 

==:主要用在基本數據類型及引用

Equals:主要是對象或對象引用的比較。

 

集合中是否包含某一個元素用contains來判斷。

53List, Set, Map是否繼承自Collection接口?

List,set繼承于Collection

Map沒有繼承于Collection,其相對是獨立的。

屬于Collection類型的對象,可以通過構造函數將一個集合構造成另外一個集合。

54、面向對象的特征有哪些方面 

1.抽象:

    找共性,將共有的屬性、方法放到父類中

2.繼承:

    子類繼承于父類,具有父類的所有屬性與方法,可以重用,也可以覆蓋。

3.封裝:

    一個類包括多個屬性及方法。

4. 多態性:

    動態:

    靜態:

55String是最基本的數據類型嗎?

基本數據類型包括byte、int、char、long、float、double、boolean和short。

 

java.lang.String類是final類型的,因此不可以繼承這個類、不能修改這個類。為了提高效率節省空間,我們應該用StringBuffer類

56int Integer 有什么區別?

       Int是基本數據類型,不是對象,占一個內存空間,沒有方法。與其同類的有long,char,doble

       Integer是封裝類,具有方法及屬性。與其同類的有Long,Double.Float

57、運行時異常與一般異常有何異同?

    運行時異常:java JVM拋出的異常,代碼中不用處理。

   

    一般異常:用戶拋出的異常,如果用throws 聲明了,調用這個方法的代碼必須對其處理。

58&&&的區別?

       &:: 左邊若為false右邊還執行。

       &&:短路與,左邊若為false右邊不執行。

59final, finally, finalize的區別?

final 用于聲明屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。

finally是異常處理語句結構的一部分,表示總是執行。

finalize是Object類的一個方法,在垃圾收集器執行的時候會調用被回收對象的此方法,可以覆蓋此方法提供垃圾收集時的其他資源回收,例如關閉文件等。

算符可以用來決定某對象的類是否實現了接口。

62heapstack有什么區別?

棧是一種線形集合,其添加和刪除元素的操作應在同一段完成。棧按照后進先出的方式進行處理。

堆是棧的一個組成元素

 

63Static Nested Class Inner Class的不同

Static Nested Class是被聲明為靜態static的內部類它可以不依賴于外部類實例被實例化。而通常的內部類需要在外部類實例化后才能實例化。

64、什么時候用assert

assertion (斷言)在軟件開發中是一種常用的調試方式,很多開發語言中都支持這種機制。在實現中,assertion就是在程序中的一條語句,它對一個 boolean表達式進行檢查,一個正確程序必須保證這個boolean表達式的值為true;如果該值為false,說明程序已經處于不正確的狀態下,系統將給出警告或退出。一般來說,assertion用于保證程序最基本、關鍵的正確性。assertion檢查通常在開發和測試時開啟。為了提高性能,在軟件發布后,assertion檢查通常是關閉的。

65GC是什么? 為什么要有GC?

GC是垃圾收集的意思(Gabage Collection),內存處理是編程人員容易出現問題的地方,忘記或者錯誤的內存回收會導致程序或系統的不穩定甚至崩潰,Java提供的GC功能可以自動監測對象是否超過作用域從而達到自動回收內存的目的,Java語言沒有提供釋放已分配內存的顯示操作方法。

66short s1 = 1; s1 = s1 + 1;有什么錯? short s1 = 1; s1 += 1;有什么錯?

short s1 = 1; s1 = s1 + 1; (s1+1運算結果是int型,需要強制轉換類型) short s1 = 1; s1 += 1;(可以正確編譯)

67Math.round(11.5)等於多少? Math.round(-11.5)等於多少?

 Math.round(11.5)==12 Math.round(-11.5)==-11 round方法返回與參數最接近的長整數參數加1/2后求其floor.

 

68Java有沒有goto?

 java中的保留字現在沒有在java中使用。

 

69、給我一個你最常見到的runtime exception

ArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowException, CannotRedoException, CannotUndoException, ClassCastException, CMMException, ConcurrentModificationException, DOMException, EmptyStackException, IllegalArgumentException, IllegalMonitorStateException, IllegalPathStateException, IllegalStateException, ImagingOpException, IndexOutOfBoundsException, MissingResourceException, NegativeArraySizeException, NoSuchElementException, NullPointerException, ProfileDataException, ProviderException, RasterFormatException, SecurityException, SystemException, UndeclaredThrowableException, UnmodifiableSetException, UnsupportedOperationException

 

一般異常:

    IOException

    FileNotFoundException

    SqlException

   

70、接口是否可繼承接口? 抽象類是否可實現(implements)接口? 抽象類是否可繼承實體類(concrete class)?

接口可以繼承接口。抽象類可以實現(implements)接口抽象類是否可繼承實體類。

71abstractmethod是否可同時是static,是否可同時是native是否可同時是synchronized?

    都不能

72、數組有沒有length()這個方法? String有沒有length()這個方法?

       數組沒有length()這個方法,length這個屬性

Stringlength()這個方法.

73、構造器Constructor是否可被override?

構造器Constructor不能被繼承因此不能重寫Overriding但可以被重載Overloading

74、是否可以繼承String?

String類是final類故不可以繼承。

75swtich是否能作用在byte是否能作用在long是否能作用在String?

switchexpr1expr1是一個整數表達式。因此傳遞給 switch case 語句的參數應該是 int short char 或者 byte。long,string 都不能作用于swtich。

76try {}里有一個return語句,那么緊跟在這個try后的finally {}里的code會不會被執行,什么時候被執行,在return前還是后?

會執行,在return前執行。

77、編程題: 用最有效率的方法算出2乘以8等於幾?

2 << 3

78、兩個對象值相同(x.equals(y) == true),但卻可有不同的hash code,這句話對不對?

對,有相同的hash code。

79、當一個對象被當作參數傳遞到一個方法后,此方法可改變這個對象的屬性,并可返回變化后的結果,那么這里到底是值傳遞還是引用傳遞?

是引用傳遞

基本數據類型:

對象: 引用

80、四種會話跟蹤技術

Cookie

Session

Hidden

url 重寫

81、編程題: 寫一個Singleton出來。

Singleton模式主要作用是保證在Java應用程序中,一個類Class只有一個實例存在。

一般Singleton模式通常有幾種種形式:

第一種形式: 定義一個類,它的構造函數為private的,它有一個static的private的該類變量,在類初始化時實例話,通過一個public的getInstance方法獲取對它的引用,繼而調用其中的方法。

public class Singleton {

private Singleton(){}

      //在自己內部定義自己一個實例,是不是很奇怪?

      //注意這是private 只供內部調用

      private static Singleton instance = new Singleton();

      //這里提供了一個供外部訪問本class的靜態方法,可以直接訪問  

      public static Singleton getInstance() {

        return instance;   

      }

    }

    第二種形式:

public class Singleton {

  private static Singleton instance = null;

  public static synchronized Singleton getInstance() {

  //這個方法比上面有所改進,不用每次都進行生成對象,只是第一次     

  //使用時生成實例,提高了效率!

  if (instance==null)

    instancenew Singleton();

return instance;   }

}

其他形式:

定義一個類,它的構造函數為private的,所有方法為static的。

一般認為第一種形式要更加安全些

83Java中的異常處理機制的簡單原理和應用。

原理

    有錯直接轉到異常處理部分或向上拋出。

應用:

JAVA的異常就是錯誤,有兩種一種是運行時,編碼可以不用捕捉。一種是一般異常,如果throws聲明了,必須進行處理。

84、垃圾回收的優點和原理。并考慮2種回收機制。

優點:

    程序員不用管內存,jvm自動完成,開發方便。運行優先非常低,程序無法清楚實例什么時候被消毀。

 

85、描述一下JVM加載class文件的原理機制?

JVM中類的裝載是由ClassLoader和它的子類來實現的,Java ClassLoader 是一個重要的Java運行時系統組件。它負責在運行時查找和裝入類文件的類。

86char型變量中能不能存貯一個中文漢字?為什么?

能夠定義成為一個中文的,因為java中以unicode編碼,一個char占16個字節,所以放一個中文是沒問題的

 

88、寫一個程序,從文件(c:\test.txt)中查出字符串”mobnet”出現的次數?

 


 

java基礎類庫(io流,集合類,線程,SocketAWTSwing,sql)

1java中有幾種類型的流?JDK為每種類型的流提供了一些抽象類以供繼承,請說出他們分別是哪些類?

字節流,字符流。字節流繼承于InputStream OutputStream,字符流繼承于Reader Writer。在java.io包中還有許多其他的流,低層流與調層流,高層流主要是為了提高性能和使用方便。

2、啟動一個線程是用run()還是start()?

啟動一個線程是調用start()方法,啟動線程并調用run方法。

3、線程的基本概念、線程的基本狀態以及狀態之間的關系

線程是進程內的并發,沒有自已內存空間,共享進程的,線程間的通信成本較低。

Java中的線程有四種狀態分別是:運行、就緒、掛起、結束。

4、多線程有幾種實現方法,都是什么?同步有幾種實現方法,都是什么? 用什么關鍵字修飾同步方法? stop()suspend()方法為何不推薦使用?

Extends Thread

Implements Runnable

同步

Public synchronized aa()

{

 

}

 

 

Public void cc(object aa)

{

    synchronized(aa)

{

}

}

 

synchoronized修飾同步方法。

 

多線程有兩種實現方法分別是繼承Thread類與實現Runnable接口

同步的實現方面有兩種分別是synchronized,waitnotify

反對使用stop(),是因為它不安全。它會解除由線程獲取的所有鎖定,而且如果對象處于一種不連貫狀態,那么其他線程能在那種狀態下檢查和修改它們。結果很難檢查出真正的問題所在。suspend()方法容易發生死鎖。調用suspend()的時候,目標線程會停下來,但卻仍然持有在這之前獲得的鎖定。此時,其他任何線程都不能訪問鎖定的資源,除非被"掛起"的線程恢復運行。對任何線程來說,如果它們想恢復目標線程,同時又試圖使用任何一個鎖定的資源,就會造成死鎖。所以不應該使用suspend(),而應在自己的Thread類中置入一個標志,指出線程應該活動還是掛起。若標志指出線程應該掛起,便用wait()命其進入等待狀態。若標志指出線程應當恢復,則用一個notify()重新啟動線程。

5、集合框架有什么?

Collection                                                              Map

    List             set                                     HashMap

ArrayList  linkedList  HashSet  TreeSet

 

12、設計4個線程,其中兩個線程每次對j增加1,另外兩個線程對j每次減少1。寫出程序

 

public class TestThread

{

    private int j;

    public synchronized void inc()

    {

        j++;

        System.out.println(Thread.currentThread().getName() + "-inc:" + j);

    }

    public synchronized void dec()

    {

        j--;

        System.out.println(Thread.currentThread().getName() + "-dec:" + j);

    }

    public static void main(String[] args)

    {

        TestThread t=new TestThread();

        for (int i = 0; i < 2; i++)

        {

            Thread inc=new Thread(new Inc(t));

            Thread dec=new Thread(new Dec(t));

            inc.start();

            dec.start();

        }

    }

}

   

    class Inc implements Runnable

    {

        private TestThread obj;

        public Inc(TestThread obj)

        {

            this.obj=obj;

        }

        public void run()

        {

//          for (int i = 0; i < 100; i++)

//          {

                this.obj.inc();

//          }

        }

    }

    class Dec implements Runnable

    {

        private TestThread obj;

        public Dec(TestThread obj)

        {

            this.obj=obj;

        }

        public void run()

        {

//          for (int i = 0; i < 100; i++)

//          {

                this.obj.dec();

//          }

        }

    }

 

13、同步和異步有和異同,在什么情況下分別使用他們?舉例說明。

同步:上一段代碼沒的完成,下一段必須等到上一段代碼完.0

成后才可以執行。如買票排隊

異步:上一段代碼沒的完成,下一段不必等到上一段代碼完成就可以執行。如手機發送短信。

14sleep() wait() 有什么區別?

Sleep是指休眠給定的時間,當這個時間達到之后,線程會再次醒來。

Wait是等待狀態,多長時間不清楚,由另一個線程將其喚醒。

 

15、當一個線程進入一個對象的一個synchronized方法后,其它線程是否可進入此對象的其它方法?

如只其它方法是同步方法,不可以進入。如果不是可以進入。

17、輸入輸出流的理解:

    在java使用流的機制進行數據的傳送,從文件到內存是輸入流,從內存到文件是輸出流,輸入流可以通過 read讀取,輸出流以write或print寫入,對于流可以是分為高層流和低層流,低層以一個字節或字符為單位進行處理,高層流以一批數據為單位進行處理。

     FileInputStreamSystem.inInputSteamReaderBufferReader

     OutputSteam(System.out)printStream

     FileReaderBufferedReader

     FileWriter PrintWriterbufferWriter

分類:

    字節(二進制)

            FileInputStream(低層輸入流)

            FileOutputStream(低層輸出流)

 

            PrintStream(高層流)  System.out.println()

    字符(一個char)

            FileReader

            FileWriter

 

18、請寫一個程序的讀寫要求用兩種方式一種是低層流另一種是高層流。

 

import java.io.FileWriter;

import java.io.InputStream;

import java.io.BufferedWriter;

import java.io.InputStreamReader;

import java.io.BufferedReader;

import java.io.FileReader;

 

 

public class Untitled1 {

    public static void writeFileChar() throws Exception {

        FileWriter f = new FileWriter("c:\\aa.txt");

        InputStream is = System.in;

        int c = is.read();

        while (((char) c) != 'x') {

            f.write(c);

            c = is.read();

        }

        f.close();

        is.close();

    }

 

    public static void writeFileString() throws Exception {

        FileWriter f = new FileWriter("c:\\aa.txt");

        BufferedWriter bwr=new BufferedWriter(f);

        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));

        String c = bf.readLine();

        while (!c.equals("stop")) {

            bwr.write(c+"\r\n");

            c = bf.readLine();

        }

        bwr.close();

        f.close();

        bf.close();

    }

   

    public static void readFileChar() throws Exception {

       FileReader f = new FileReader("c:\\aa.txt");

       int c = f.read();

       while (c!=-1) {

           System.out.print((char)c);

           c=f.read();

       }

       f.close();

   }

 

   public static void readFileString() throws Exception {

       BufferedReader bf = new BufferedReader(new FileReader("c:\\aa.txt"));

       String c = bf.readLine();

       while (c!=null)

       {

           System.out.println(c);

           c=bf.readLine();

       }

       bf.close();

   }

 

 

    public static void main(String[] args) throws Exception {

        readFileString();

    }

}

19、如何列出某個目錄下的所有文件

Import java.io.File;

File f=new File("C:\\");

        File[] f1=f.listFiles();

        for(int i=0;i<f1.length;i++)

        {

            if(f1[i].isDirectory())

            {

                System.out.println("dirctory is"+f1[i].getName());

            }

            else

            {

                System.out.println("file is"+f1[i].getName());

            }

        }

    }

1.      如何列出某個目錄下的所有子目錄

public static void main(String[] args) throws Exception

{

       getFile(new File("C:\\entityBean"),"\t");

}

public static void getFile(File f,String sem) throws Exception

{

        System.out.println(sem+f.getName());

        File fl[]=f.listFiles();

        if(fl.length>=1)

        {

            for(int i=0;i<fl.length;i++)

            {

                if(fl[i].isDirectory())

                {

                    getFile(fl[i],sem+"\t");

                }

            }

        }

    }

2.      判斷一個文件或目錄是否存在

  File f=new File("C:\\entityBean");

   if(f.exists())

   {

          System.out.println("exist");

   }

    else

    {

        System.out.println("not exist");

    }

Socket

20、用socket通訊寫出客戶端和服務器端的通訊,要求客戶發送數據后能夠回顯相同的數據?

public class ServerSocket_1

{

    public static void main(String[] args)

            throws Exception

    {

        ServerSocket ss = new ServerSocket(4001);

        Socket s = ss.accept();

        BufferedReader br = new BufferedReader(new InputStreamReader(s.

                getInputStream()));

        PrintStream ps=new PrintStream(s.getOutputStream());

        String temp = br.readLine();

        while (true)

        {

            System.out.println("客戶端:"+temp);

            ps.println(temp);

            if (temp.equals("stop"))

            {

                break;

            }

            temp = br.readLine();

        }

        br.close();

        ps.close();

        ss.close();

    }

}

 

public class ClientSocket

{

  public static void main(String[] args) throws Exception

  {

      Socket s = new Socket("localhost", 4001);

      PrintStream ps = new PrintStream(s.getOutputStream());

      BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

      BufferedReader br_server = new BufferedReader(new InputStreamReader(s.

              getInputStream()));

      String temp = br.readLine();

      while (true)

      {

          ps.println(temp);

          temp = br_server.readLine();

          System.out.println("服務器的信息:" + temp);

          if (temp.equals("stop"))

          {

              break;

          }

          temp = br.readLine();

      }

      s.close();

      br.close();

      br_server.close();

  }

}

 

23、介紹JAVA中的Collection FrameWork(包括如何寫自己的數據結構)?

Collection FrameWork如下

Collection

List

│├LinkedList

│├ArrayList

│└Vector

 Stack

Set

Map

Hashtable

HashMap

WeakHashMap

Collection是最基本的集合接口一個Collection代表一組ObjectCollection的元素Elements

Map提供keyvalue的映射

 

24、請說出你所知道的線程同步的方法

HashTable中的put,get,remove

Vector的相關方法。

 

jdbc數據訪問技術

1JDBC如何做事務處理?

       Con.setAutoCommit(false)

       Con.commit();

       Con.rollback();

2、寫出幾個在Jdbc中常用的接口

preparedStatement,callableStatement,statement,Connection,ResultSet

3、簡述你對Statement,PreparedStatement,CallableStatement的理解

statement用于執行靜態 SQL 語句并返回它所生成結果的對象,在執行時確定sql

 

 

 

PreparedStatement表示預編譯的 SQL 語句的對象。 SQL 語句被預編譯并且存儲在 PreparedStatement 對象中。然后可以使用此對象高效地多次執行該語句,可以傳參數,在得到PreparedStatement對象時確定sql.

CallableStatement用于執行 SQL 存儲過程的接口。如果有輸出參數要注冊說明是輸出參數。

 

4Java中訪問數據庫的步驟

1連接Oracle數據庫

Class.forName(oracle.jdbc.driver.OracleDriver);

Connection con=DriverManager.openConnection(jdbc:oracle:thin:@localhost:1521:DataBase , UserName,Password )

1.      利用JDBC檢索出表中的數據

Class.forName(“”);

Connection con=DriverManager.openConnection( , , )

preparedStatment  ps=Con.preparedStatment(select * from table]”);

ResultSet rs=ps.executeQuery();

While(rs.next)

{

    Rs.getString(1) rs.getString(字段名)

}

5JDBC中的核心類及其作用是什么?

DriverManager

                            Class.forName();

                            DriverManager.getConnection(“”,”sa”,””)

              Connection  

              PreparedStatement(Statement)

                            ResultSet  rs=executeQuery()  dql

                                          While(rs.next())

                                          {

 

}

                            executeUpdate()  dml ddl

6、執行存儲過程用那一個類,如何操作輸出參數?(操作) 

CallableStatement c=con. prepareCall ("{call getCustomerName(?,?)}");

c.setString(1,"1");

c.registerOutParameter(2,java.sql.Types.VARCHAR);

c.execute();

c.getString(2);

8、可能會讓你寫一段JdbcOracle的程序.

Class.forName("oracle.jdbc.driver.OracleDriver");

        Connection con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:accp","system","system");

9Class.forName的作用?為什么要用?

注冊一個數據庫驅動,將驅動加載到當前的JVM中。

10Jdo是什么?      

JDOJava對象持久化的新的規范,為java data object的簡稱,也是一個用于存取某種數據倉庫中的對象的標準化APIJDO提供了透明的對象存儲,因此對開發人員來說,存儲數據對象完全不需要額外的代碼(如JDBC API的使用)。這些繁瑣的例行工作已經轉移到JDO產品提供商身上,使開發人員解脫出來,從而集中時間和精力在業務邏輯上。另外,JDO很靈活,因為它可以在任何數據底層上運行。JDBC只是面向關系數據庫(RDBMS)JDO更通用,提供到任何數據底層的存儲功能,比如關系數據庫、文件、XML以及對象數據庫(ODBMS)等等,使得應用可移植性更強。(o/rMapping工具 集合處理)

11ORACLE大數據量下的分頁解決方法。一般用截取ID方法,還有是三層嵌套方法   

create or replace package myPack

is

    type c_type is ref cursor;

    procedure getPage(v_sql varchar2,pageSize number,pageIndex number,c out c_type);

end;

 

create or replace  package  body myPack

is

    procedure getPage(v_sql varchar2,pageSize number,pageIndex number,c out c_type)

  is

    pageTotal int:=0;

    pageFirstRow int:=0;

    pageLastRow int:=0;

    rowTotal int:=0;

  begin

    execute immediate 'select count(*)  from ('||v_sql||')' into rowTotal;

    pageTotal:=ceil(rowTotal/pageSize);

    if(pageIndex<1) then

           raise_application_error(-20001,'頁數不能小于1');

    end if;

    if(pageIndex>pageTotal) then

           raise_application_error(-20001,'頁數太大,不能讀取');

    end if;

    pageFirstRow:=(pageIndex-1)*pageIndex+1;

    pageLastRow:=pageFirstRow+pageSize;

    open c for ' select * from '||v_sql||' where rownum<'||

         pageLastRow||'minus select * from '||v_sql

         ||' where rownum<'||pageFirstRow;   

  end;

end;

Web編程Jsp&Servlet技術

1、簡單說說tomcat的配置

JAVA_HOME=JDK的根目錄

CATALINA_HOME=tomcat的根目錄

 

CATALINA-HOME\conf\server.xml:可以配置tomcat的端口,可以配置tomcat中下連接池。

CATALINA-HOME\common\lib:存放公用的類包

 

My eclipse中如何配置tomcat

eclipse,選擇windows->preference->MyEclipse->ApplicationServer->Tomcat

選擇Tomcat 的安裝目錄,并選擇TomCat所需的jdk,選擇enable,確定即可。

2JSP中動態INCLUDE與靜態INCLUDE的區別

jsp:include:在運行時調用另一個頁面變量是可以重復的。

<%@include file=””%>:在轉譯時合在一起,會成為同一個類,變量不可以重復。

3forwardredirect的區別?

forward: 轉發,在下一個頁面中,request保留上一個頁面中的request的所有值

   

redirect: 跳轉,不傳遞request對象。

4Servlet的體系結構是什么?

Servlet

GenericServlet

HttpServlet

自定義

5、如何實現一個自定義的servlet?

extends HttpServlet 并覆蓋doPost或doGet方法

 

在web.xml中進行部署

6Servlet的生命周期是什么?

Init

多次執行doGet或doPost 

destroy

7jsp就是一個servlet是否正確?

8、請羅列jsp中的腳本、指令及動作?

腳本

            <%%>  <%=%>  <%!%> <%----%>

        指令

            <%@page contentType=text/html;charset=utf-8 language=java import=””%>

            <%@include file=””%>

            <%@taglib uri=”” prefix=””%>

        動作:

            <jsp:useBean class=”” id=”” scope=””>  scope中如果沒有實例化一個對象如果有直接用以前的。

            <jsp:getProperty name=”” property=””>  向一個bean中設置屬性值

            <jsp:forward >  jsp頁的轉發

            <jsp:include page=””>  導入一個jsp頁面

9JSP的內置對象及方法

Request  request表示HttpServletRequest對象。取客戶端表單域信息及cookie, header, session

response response表示HttpServletResponse對象對客戶端的響應返回文本、寫cookies

out out 向客戶端打印html文本.

pageContext :當前jsp頁面的上下文環境可以得到sessionrequestapplication等內置對象在自定義標簽中使用的很多。

session session表示一個請求的javax.servlet.http.HttpSession對象。Session一個用戶多個頁面共享同一變量。

application applicaton 表示一個javax.servle.ServletContext對象。存放容器級的變量。

config config表示一個javax.servlet.ServletConfig對象。該對象用于存取servlet實例的初始化參數。

page page表示從該頁面產生的一個servlet實例

exception:異常,當iserrorpage=true

10、說出在JSP頁面里是怎么分頁的?

頁面需要保存以下參數:(數據庫的分頁及比較)

總行數:根據sql語句得到總行數

每頁顯示行數:設定值

當前頁數:請求參數

頁面根據當前頁數和每頁行數計算出當前頁第一行行數,定位結果集到此行,對結果集取出每頁顯示行數的行即可。

 

數據庫:

Sqlserver:

        SELECT TOP 頁大小 *

FROM TestTable

 

WHERE (ID NOT IN

        (SELECT TOP 頁大小*(頁數-1) id

         FROM 表

         ORDER BY id))

ORDER BY ID

 

 

--pageSize=5  頁大小

--pageIndex=2 所要的頁

--如果有主鍵可以,沒以及鍵不行

select top 5 *

from aa where a1 not in

(select top 5 a1 from aa order by a1)

order by a1;

 

oracle:

    select * from '||v_sql||' where rownum<'||

         pageLastRow||'minus select * from '||v_sql

         ||' where rownum<'||pageFirstRow;

 

 

Session

    先取出數據中的所有信息封裝到對象并保存在session轉發到jsp頁面做如下處理。

    <table border="1">

    <tr>

      <td>a1</td>

      <td>a2</td>

    </tr>

<%

     List l=(List)session.getAttribute("as");

     //一頁顯示多少行

     int pageSize=3;

     //總頁數

     int pageCount=0;

     int currentPage=1;

     if(l!=null && l.size()>0)

     {

     pageCount=(l.size()/pageSize)+(l.size()%pageSize==0?0:1);

     if(request.getParameter("page")!=null)

     {

       currentPage=Integer.parseInt(request.getParameter("page"));

     }

     if(currentPage<1)

     {

       currentPage=1;

     }

     if(currentPage>pageCount)

     {

       currentPage=pageCount;

     }

     for (int i = (currentPage-1)*pageSize; i <(currentPage-1)*pageSize+pageSize; i++)

     {

       if(i>=l.size())

       {

         break;

       }

       Aa aa=(Aa)l.get(i);

       %>

        <tr>

      <td><%=aa.getA1()%></td>

      <td><%=aa.getA2()%></td>

    </tr>

       <%

       }

     }

%>

<tr>

  <td colspan="2">

    <%

    if(currentPage!=1)

    {

    %>

    <a href="page.jsp?page=1">首頁</a>&nbsp;&nbsp;

    <a href="page.jsp?page=<%=currentPage-1%>">上一頁</a>&nbsp;&nbsp;

    <%

    }

    if(currentPage!=pageCount)

    {

    %>

    <a href="page.jsp?page=<%=currentPage+1%>">下一頁</a>&nbsp;&nbsp;

    <a href="page.jsp?page=<%=pageCount%>">最后一頁</a>&nbsp;&nbsp;

    <%

    }

    %>

  </td>

</tr>

  </table>

   

11include的兩種實現方式的區別?

<@include file>:在將jsp生成servlet類前將兩個文件和在一起生成一個java一起運行的。所以是一家子,當中的變量名不能重名。

<jsp:include page>:是兩個類,是一個調用關系,在運行時動態的調用,不是一家子,可以重復變量。

12jsp頁面中兩種跳轉方式分別是什么?有什么區別?

轉發: 保留上次的request

        <jsp:forward>

        actionMapping.findForWard(“”);

        pageContext.forward();

        request.getRequestDispacher(a.jsp).forward(request,response)

跳轉:不保留上次的request

        Response.setRedirect(“”)

13、描述JSPServlet的區別、共同點、各自應用的范圍

Jsp主要在于頁面的顯示動態生成頁面,可以與html標記一起使用,其還是要生成為一個servlet。

Servlet:主要是控制的處理,如調用業務層,跳轉不同的jsp頁面。

Mvc:

        Jsp:v

        Servlet:c

14、在JSP中如何讀取客戶端的請求,如何確定某個Jsp文件的真實路徑?

Request.getparameter(“”)

<%=application.getRealPath("aa.jsp") %>

15、描述CookieSession的作用區別和各自的應用范圍Session工作原理。

Cookie:主要用在保存客戶端其值在客戶端與服務端之間傳送不安全存儲的數據量有限。

Session:保存在服務端每一個session在服務端有一個sessionID作一個標識。存儲的數據量大,安全性高。占用服務端的內存資源。

16、說明JsperrorPage的作用應用范圍。

正常頁面中

%@page erropage=error.jsp%

        錯誤頁面

            <%@page iserrorpage=true%>

                 有一內置對象:exception

17、介紹在Jsp中如何使用JavaBeans

<jsp:useBean class=”” id=”” scope=””/>

<%

    New 類();

%>

19、簡單介紹JSP的標記庫

做一個標記處理類 extends TagSupport

通過tld說明標記處理的類的前綴及后綴

在web.xml中說明tld文件

<taglib>

        <taglib-uri>

        <taglib-location>

<taglib>

jsp頁面是引用tld<%@taglib uri=”” prefix=””%>

20Servlet中的核心類有那些,各有什么特點?

ServletContext:容器,放置全局變量

    setAtribute()

    getAttribute()

ServletConfig:一個servlet的配置

    getInitParameter(”名稱”)

HttpServletRequest:封裝的所有的請求

    getParameterValue(”名稱”)

    getParameterValues(”稱”)

getSession();

    getAttribute(” 名稱”);

    getRequestDispatch(a.jsp).forward(request,response)

HttpServletResponse:響應

    getOut();

    sendRedirect(””)                       

HttpSession:一個用戶多個頁面共享同一變量

    setAttribute(””,””)

21Servlet中重要的包有那些,有什么區別?

javax.servlet.*;javax.servlet.http.*;

22、說出Servlet的生命周期,并說出ServletCGI的區別?

Servlet被服務器實例化后,容器運行其init方法,請求到達時運行其service方法,service方法自動派遣運行與請求對應的doXXX方法(doGet,doPost)等,當服務器決定將實例銷毀的時候調用其destroy方法。

 

與cgi的區別在于servlet處理服務器進程中,它通過多線程方式運行其service方法,一個實例可以服務于多個請求,并且其實例一般不會銷毀,而CGI對每個請求都產生新的進程,服務完成后就銷毀,所以效率上低于servlet。

23、什么情況下調用doGet()doPost()

Jsp頁面中的form標簽里的method屬性為get時調用doGet(),為post時調用doPost()。

25、如何現實servlet的單線程模式

doGetdoPost方法前加入synchoronized

JSP:

<%@ page isThreadSafe="true"%>

27Request對象的主要方法

setAttribute(String name,Object)設置名字為namerequest的參數值

getAttribute(String name)返回由name指定的屬性值

getAttributeNames()返回request對象所有屬性的名字集合結果是一個枚舉的實例

getCookies()返回客戶端的所有Cookie對象結果是一個Cookie數組

getCharacterEncoding()返回請求中的字符編碼方式

getContentLength()返回請求的Body的長度

實例

getInputStream()返回請求的輸入流用于獲得請求中的數據

getMethod()獲得客戶端向服務器端傳送數據的方法

getParameter(String name)獲得客戶端傳送給服務器端的有name指定的參數值

getParameterNames()獲得客戶端傳送給服務器端的所有參數的名字結果是一個枚舉的實例

getParameterValues(String name)獲得有name指定的參數的所有值

getProtocol():獲取客戶端向服務器端傳送數據所依據的協議名稱

getQueryString():獲得查詢字符串

getRequestURI():獲取發出請求字符串的客戶端地址

getRemoteAddr():獲取客戶端的IP地址

getRemoteHost():獲取客戶端的名字

getSession([Boolean create]):返回和請求相關Session

getServerName():獲取服務器的名字

getServletPath():獲取客戶端所請求的腳本文件的路徑

getServerPort():獲取服務器的端口號

removeAttribute(String name):刪除請求中的一個屬性

28、我們在web應用開發過程中經常遇到輸出某種編碼的字符,如iso8859-1等,如何輸出一個某種編碼的字符串?

  Public String translate (String str) {

    String tempStr = "";

    try {

      tempStr = new String(str.getBytes("ISO-8859-1"), "GBK");

      tempStr = tempStr.trim();

    }

    catch (Exception e) {

      System.err.println(e.getMessage());

    }

    return tempStr;

  }

 

30Servlet執行時一般實現哪幾個方法?

public void init(ServletConfig config)

public ServletConfig getServletConfig()

public String getServletInfo()

public void service(ServletRequest request,ServletResponse response)

public void destroy()

5 Hibernate持久層技術

1、在myeclipse加入hibernate環境的全過程是什么?

Db-browers加入配置連接

新建工程

加入hibernate環境指定*.hbm.xmlHibernateSessionFactory文件所在的位置

2hibernate的核心配置文件是什么及其作用?

Hibernate.cfg.xml:數據庫連接、指定相關的映射文件

    *.hbm.xml:具體的o/r mapping說明

3hibernate的核心類是什么它們的相互關系是什么?重要的方法是什么?

Configuration

SessionFactory

        Session如下方法

            Save

            load

            Update

            Delete

            Query q=CreateQuery(from Customer where customerName=:customerName)

            beginTransaction

            close

            Transaction

            Commit()       

4、關聯:

    one-to-many

    inverse:主控方,外鍵的關系有誰控制

        inverse=false 是主控方,外鍵是由它控制的           

        inverse=true 是被控方,外鍵與它沒關系

        要想實現主控方的控制必須將被控方作為主控方的屬性

    cascade:級聯

        主表增從表增

        主表修從表修

        主表刪從表刪

    lazy:延遲

        lazy=false:一下將所有的內容取出,不延時(常用)

        lazy=true:取出部分內容,其余內容動態去取

        通過get可以取出對方的所有內容     

5hibernate中的one-to-manymany-to-one中常用的方式是什么?

主控方在many這邊,不及連刪除

6Criteria 的作用?

    Criteria c=session.createCriteria(Customer.class);

    //設置條件

    c.add(Expression.ge(“字段名”,”值對象”))

        ge:>=

        gt:>

        le:<=

        lt:<

        eq:=

    //排序

        c.addOrder(Order.asc(“字段名”))

    //分頁

        c.setFirstResult(1)//從第2行開始提取

        c.setMaxResults(5)//返回5

7DetachedCriteria的作用

產生時不需要session

    DetachedCriteria dc= DetachedCriteria.forClass(Customer.class)

    Criteria c=Dc.getExecutableCriteria(session)

8Query

1 個或多個屬性查詢:

    Query query=session.createQuery(select customername,customerid from Customer)

    List l=query.list();

    For(int i=0;i<l.size();i++)

{

    Obejct[] object=(Object[])l.get(i);

    Object[0]  object[1]

}

}

分組: "select count(*),productname from Product group by productname order by productname"

取值與屬性一樣

配置的查詢,*.hbm.xml

    <query name="sql">

    <![CDATA[

        from Product where productid=:productid

    ]]>

</query>

    Query query=session.getNamedQuery(sql);

聯接1

    "from Customer as customer join fetch customer.buySet":將多的放到buySet屬性中,得出的結是Customer有一個,Buy有多個

聯接2

"from Customer as customer join customer.buySet":得出的對象,customerbuy11

子查詢:

    "from Customer as customer where (select count(*) from customer.buySet)>1"

9、繼承關系的實現

    1、兩個表,子類重復父類的屬性。

    2、一個表,子類父類共用一個表

          <class name="Users" table="users" discriminator-value="Users">

            <discriminator column="DISCRIMINATOR_USERTYPE" type="string"/>

<subclass name="admin" discriminator-value="admin">

                    <property name="adminRemark" column="admin_remark" type="string" />

              </subclass>

          </class>

    3、兩個表,子類引用父類的主鍵,享用公共的字段或屬性。

    <class name="Users" table="users">

        <id name="userid" column="USERID" type="string">

            <generator class="assigned"/>

        </id>

        <property name="pwd" column="pwd" type="string" />

        <joined-subclass name="Guest" table="guest">

            <key column="USERID"/>

            <property name="guestRemark" column="guest_remark" type="string" />

        </joined-subclass>

</class>

批量刪除

    Query query=session.createQuery("update""delete");

    query.executeUpdate();

 

10tomcat連接池:在容器中預先產生了n個連接實例,客戶端不用重新實例化可以直接取。

    6.1、在tomcat-5.0\conf\server.xml</host>前面加入如下內容

    <Context path="/app1" docBase="app1" debug="0"    reloadable="true" crossContext="true">  

    <Resource name="jdbc/sa" auth="Container" type="javax.sql.DataSource"/>  

              <ResourceParams name="jdbc/sa">  

            <parameter>    

                <name>factory</name>       

                <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>      

            </parameter>             

        <parameter>    

                        <name>driverClassName</name>       

                <value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>    

            </parameter>           

        <parameter>

                <name>url</name>       

                  <value>jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=jspdev;SelectMethod=cursor</value>  

        </parameter>       

            <parameter>            

            <name>username</name>      

                    <value>sa</value>            

        </parameter>       

            <parameter>            

            <name>password</name>              

            <value></value>

            </parameter>       

            <parameter>            

            <name>maxActive</name>             

                <value>20</value>            

        </parameter>

            <parameter>    

                <name>maxIdle</name>               

            <value>10</value>            

        </parameter>             

        <parameter>

                <name>maxWait</name>               

            <value>-1</value>            

        </parameter>       

            </ResourceParams>    

    </Context>

    6.2、將sql-server包拷貝到C:\tomcat-5\common\lib

    6.3jdbc測試代碼

        Context initCtx = new InitialContext();

        Context envCtx = (Context)initCtx.lookup("java:comp/env");

        ds = (DataSource)envCtx.lookup("jdbc/sa");

        Connection conn = ds.getConnection();

    6.4hibernate通過連接池實現連接

        <session-factory name="foo">

            <property name="connection.datasource">java:comp/env/jdbc/sa</property>  <!--指定tomcat連接池-->

            <property name="show_sql">true</property> <!--是否顯示sql-->

            <property name="dialect">org.hibernate.dialect.SQLServerDialect</property> <!--hibernate的驅動管理器-->

            <mapping resource="com/accp/t15/Customer.hbm.xml"/>

        </session-factory>

 

11、對象的三大狀態

    自由(transient)

        session無關

    持久(persistent)

        session來管理

        在持久狀態中通過get方法取出對方

    游離(detached)

        session拋棄 

12hibernate常見優化策略

    用最新版本的hibernate

    制定合理的緩存策略

    采用合理的session管理機制

    盡量使用延遲加載

        many

        大文本、大文件

    設定合理的批處理參數(batch-size)

    如有可能選用uuid作為主鍵生成器

    如有可能,選用基于version的樂觀鎖替代悲觀鎖

    開發過程中,打開hibernate的SQl日志輸出(hibernate.show_sql=true),通過觀察hibernate生成的sql語句進一步了解其實現原理,從而指事實上更好的實現策略。 

6.               iBatis持久層技術

 

ibatis的原因:

       只對開發團隊提供幾條Select SQL(或存儲過程)以獲取所需數據,具體的表結構不予公開。

       開發規范中要求,所有牽涉到業務邏輯部分的數據庫操作,必須在數據庫層由存儲過程實現

       系統數據處理量巨大,性能要求極為苛刻,這往往意味著我們必須通過經過高度優化的SQL語句

       (或存儲過程)才能達到系統性能設計指標。

jdbchibernateibatis的區別

       jdbc:手動

              手動寫sql

              deleteinsertupdate要將對象的值一個一個取出傳到sql,不能直接傳入一個對象。

              select:返回的是一個resultset,要從ResultSet中一行一行、一個字段一個字段的取出,然后封裝到一個對象中,不直接返回一個對象。

       ibatis的特點:半自動化

              sql要手動寫

              deleteinsertupdate:直接傳入一個對象

              select:直接返回一個對象                  

       hibernate:全自動

              不寫sql,自動封裝

              deleteinsertupdate:直接傳入一個對象

              select:直接返回一個對象

ibatis的核心配置文件:

       sqlmapclient.xml數據庫連接及相關o/rMapping的映射文件(hibernate.cfg.xml)

       sqlmapBuy.xml:具體的o/rmapping映射(*.hbm.xml)

              四大標記:

                     select

                     update

                     delete

                     insert

                     procedure

ibatis的核心類:

       SqlMapClientBuilder:加載配置文件返回一個會話。

       SqlMapClient:具體的會話

              List list=queryForList("標簽名",object);

              Object obj=queryForObject("標簽名",object);

              delete("標簽名",object)

              update("標簽名",object)

              insert("標簽名",object)

工程的使用:

       ibatisfactory拷貝到工程目錄下

       ms3個包及ibatis的三個包拷貝到/WEB-INF/lib

       修改ibatisfactory中的abatorConfig.xml文件

       進入ibatisfactory目錄運行java -jar  abator.jar abatorConfig.xml true

       sql標記、selectupdateinsertdelete的副本刪除

spring&ibatis:

       dataSource

       sqlMapClient:SqlMapClientFactoryBean

              configLocation

                     classpath:sqlMapClient.xml

                     /WEB-INF/sqlMapClient.xml

              dataSource

       transactionManager:DataSourceTransactionManager

              dataSource

       customerDao extends SqlMapClientDaoSupport

              sqlMapClient

       buyDao

              sqlMapClient

       Facade

              buyDao

              customerDao

       abstractProxy:TransactionProxyFactoryBean

              transactionManager

              transactionAttributes

       facadeProxy

              target:fa?ade

7 Structs界面控制層技術

1請說出struts框架的幾大組件

              1MVC

              2、標簽庫

              3、校驗框架

              4、國際化

              5tiles

3struts的核心類有那些,在MVC模式中其對應的關系是什么?

C

ActionServlet

       RequestProcessor

       Action

       actionMapping(struts-config.xml)

       actionFormard

V

ActionForm

Jsp

M

    Dao

       Manager(facade)

4Struts的處理請求的全過程是什么?

url-> ActionServlet(process)-> RequestProcessor(process)->實例化form ->填充form->進行校驗->實例化action->調用execute

5、在struts中如何通過一個url找到一個action它的核心配置文件是什么?

配置文件是struts-config.xml

6、為什么使用MVC其主要目的是什么?

vM強制解耦提高可重用性旅館的服務員(C)

7、對于MVCaction中對應有類有幾種,各有什么作用?

?  Action:

1)  基本的

?  DispatchAction:

2)  存在多個方法,根據頁面傳入的表單域的值調用不同的方法,表單域的名稱在<action param=””/>標記中進行配置

?  LookupDispatchAction

3)  多個按鈕用同一個action的不同方法。實現getMap方法,說明每一個按鈕在*.properties中的鍵名及鍵值,在struts-config.xml通過parameter說明按鈕的名稱,按鈕的值對應*.properties的值,通過值找鍵名,通過鍵名找Map中的鍵名找到值就是相應的方法。

?  MappingDispatchAction:未知

?  forwordAction:直接跳轉到不同頁面不執行邏輯(???)

?  類所在的包:org.apache.struts.actions.ForwardAction

8struts的標記有幾類,請列舉并說明其作用?    

Bean:

<bean:define scope=”” name=”” property=”” id=””/>

<bean:write  name=customer property=customerName/>      

<bean:message key=””/>國際化

Logic:

<logic:iteator>  //將集合的內容取出

<logic:present> //

<logic:equals> //

Html:

<html:file>上傳文件

<html:select property=sex>

        <html:options collection=”” property=”” labelProperty=””/>

</html:select>

9、如何在struts中配置數據源在,什么文件?用什么標簽?如何取出DataSource?

Struts-config.xml

 

<data-sources>

        <data-source key="data" type="org.apache.commons.dbcp.BasicDataSource">

            <set-property property="driverClassName"   value="com.microsoft.jdbc.sqlserver.SQLServerDriver" />

             <set-property property="url"     value="jdbc:microsoft:sqlserver://localhost:1433;databaseName=t23" />

             <set-property property="username" value="sa" />

             <set-property property="password" value="" />         

        </data-source>

    </data-sources>

 

DataSource ds=(DataSource)this.getServlet().getServletContext().getAttribute("data");

        Connection con=ds.getConnection();

10、如何在jbuilder中開發struts?    

?  工程

?  Web模型(選中struts1.2.8會自加在web inf中生成tldstruts-config.xml并加載相關的類包)

?  建一個ActionForm

?  建一個Action

?  修改struts-config.xml文件

11、如何實現strutsvalidator框架   

?      手動:

?          public class myForm extends ActionForm 

?          {

?              public ActionErrors validate()

?              {

actionErrors.add(ActionErrors.GLOBAL_MESSAGE,new ActionMessage("properties中的鍵名"));

?              }

?          }  

?          struts-config.xml中修改action的標簽validate=true

?              input="錯誤頁面"

?          如果validate方法中的ActionErrors不為空且size>0

?          會回到input頁面。

?      自動

?          public class myForm extends ValidateForm   

?          {

?              不能覆蓋validate方法。

?              //public void validate()

?              //{

? 

?              //}

?          }  

?          struts-config.xml文件中加入插件

?              <plug-in className="org.apache.struts.validator.ValidatorPlugIn">

?                      <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml" />

?              </plug-in>

?  修改validation.xml中的內容

?      errors.required={0} is required.

?      errors.minlength={0} can not be less than {1} characters.

 

?      <formset>

?          <form name="loginForm">

?              <field property="userName" depends="required">

?                  <arg0 key="userName" />

?              </field>

?              <field property="pwd" depends="required,minlength">

?                  <arg0 key="pwd" />

?                  <arg1 key="${var:minlength}" resource="false"/>

?                  <var>

?                      <var-name>minlength</var-name>

?                      <var-value>6</var-value>

?                  </var>

?              </field>

?          </form>

?      </formset>

?      struts-config.xml中修改action的標簽validate=true

?              input="/錯誤頁面"  

13、如何實現國際化?

國際化:不用修改代碼,就適用于不同的語言國家

本地化:如果要適應一個國家,要修改源代碼

實現過程:

    在struts-config.xml中用如下標簽說明資源文件名,注意其只是文件名,沒有語言_國家

         <message-resources parameter="struts.ApplicationResources" />

    在資源文件對應的目錄struts中加入適應不同語言、國家的properties文件

        ApplicationResources_zh_CN.properties 中國

        ApplicationResources_en_US.properties us

    如果不是英語要轉碼

        native2ascii -encoding gb2312 ApplicationResources_zh_CN.properties

    jsp頁面中用

        <bean:message key=""/>取出信息

8 JSF界面控制層技術

1Jsf中的核心類用那些?有什么作用?   

核心類

        FacesServlet

LiftCycle    FacesContext 

       

2Jsf中的LiftCycle六大生命周期是什么?

恢復視圖->應用請求值->校驗->更新模型->調用應用程序->呈現響應

3、如何管量web層中的Bean,用什么標簽。如何通過jsp頁面與Bean綁定在一起進行處理?

<managed-bean>

            <managed-bean-name>checkNumber</managed-bean-name>

       <managed-bean-class>jsf1.CheckNumber</managed-bean-class>

            <managed-bean-scope>session</managed-bean-scope>

</managed-bean>

4Jsf中導航的標簽是什么?

<navigation-rule>

            <from-view-id>/main.jsp</from-view-id>

            <navigation-case>

                 <from-outcome>success</from-outcome>

                  <to-view-id>/result.jsp</to-view-id>

            </navigation-case>

</navigation-rule>

5jsf中用戶界面組件模型有幾類各代表什么?

UI組件、事件監聽、顯示、類型轉換、驗證

6、表格處理及取值

import javax.faces.model.DataModel;

import javax.faces.model.ListDataModel;

    DataModel:代表一個表格其可以從客戶端傳上來。

        實例化:

            DataModel dm=new ListDataModel();

        將一個list值放入到DataModel.

            dm.setWrappedData(list)

        將客戶端當前行取出

            (LogsVO) dm.getRowData()

對于多條的查詢及增刪改在模型中加入了如下屬性:      

    模型的名稱是bean其下的屬性是

        DataModel dm:代表返有的行數據

        VO vo:代表一行數據。

            取一行:

                vo=(VO) dm.getRowData();

                通#{bean.vo.屬性名},如果修改對應信息自動修改。

            增加一行:

                this.vo=new VO();

                通#{bean.vo.屬性名},顯示肯定無值,但客戶輸入值提交后會將值勤寫入

7jsf的標簽庫有哪些?

    核心:f

        校驗

            <f:validateDoubleRange>

            <f:validateLength>

        轉化

            <f:convertDateTime pattern="yyyy-MM-dd"/>          

            <f:convertNumber type="currency"/>

        選擇框:

            <f:selectItem/>

            <f:selectItems/>

       

    html:h

        選擇控件:

            <h:selectOneRadio>:一個string

            <h:selectManyCheckBox>:一個String數組

            <h:selectOneMenu>:組合框架選擇一個 

            <h:selectManyMenu>:組合框架選擇多個

            <h:selectOneList>:下拉列表選擇一個 

            <h:selectManyList>:下拉列表選擇多個

        表格:

            <h:dataTable value="集合" var="集合中的一個">

                <h:column>

                    <!---->

                    <f:facet name=header>

                        <h:outputText >

                    </f:facet> 

                    <!--具體的行值-->

                    <h:outputText value=""/>

                <h:column>             

            </h:dataTable>

9 Spring 應用框架技術

1SpringStruts的區別?
       strusts
:是一種基于MVC模式的一個web層的處理。

       Spring:提供了通用的服務,ioc/di aop,關心的不僅僅web層,應當j2ee整體的一個服務,可以很容易融合不同的技術struts hibernate ibatis ejb remote springJDBC springMVC

2、什么是aopaop的作用是什么?

Oop縱向的業務

Aopoop的一個橫向的服務是對oop進一步的補充提供安全、事務、日志等的集中式處理相關的裝備beforearoundafter exception

3aop中的關鍵名詞有些那些,相互關系是什么?

攔截器: 代理

裝備(advice)

目標對象

關切點:條件

連接點:方法、屬性

4、依賴注入的方式有幾種,各是什么?

Setter

Interface

constructor

5spring中的核心類有那些,各有什么作用?

BeanFactory:產生一個新的實例,可以實現單例模式

BeanWrapper:提供統一的get及set方法

ApplicationContext:提供框架的實現,包括BeanFactory的所有功能

6ApplicationContext的作用

beanFactory

國際化(getMesage)

資源管理:可以直接讀取一個文件的內容(getResource)

加入web框架中(加入一個servlet或監聽器)

事件處理

7、如何實現資源管理

使用

applicationContext.getResource(“classpath:文件名”):在src根目錄下,在類路徑下

applicationContext.getResource(“classpath:/chap01/文件名”): 以src根目錄下的基準往下走。

applicationContext.getResource(“file:c:/a.properties”):在系統文件目錄下。

8、如何實現加入web框架中

在web.xml中加入如下同容,在啟動web服務器時加載/WEB-INF/applicationContext.xml中的內容。

<servlet>

<servlet-name>context</servlet-name>

<servlet-class>

org.springframework.web.context.ContextLoaderServlet

</servlet-class>

<load-on-startup>1</load-on-startup>

</servlet>

通過如下類得到ApplicationContext實例

            WebApplicationContextUtils.getWebApplicationContext

9、如何實現事件處理

事件

        Extends ApplicationEvent

監聽器

        Implements ApplicationListener

事件源

        Implements ApplicationContextAware

applicationContext.xml中配置事件源、監聽器

先得到事件源調用事件源的方法通知監聽器。

10springiocdi代表什么意思?

Ioc:程序在運行過程中,根據配置文件動態加載所依賴的配置類

、如何在spring中實現國際化?

?  在applicationContext.xml加載一個bean

<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">

        <property name="basename">

            <value>message</value>

        </property>

</bean>

?  在src目錄下建多個properties文件

?  對于非英文的要用native2ascii -encoding gb2312 源  目轉化文件相關內容

?  其命名格式是message_語言_國家。

?  頁面中的中顯示提示信息,鍵名取鍵值。

?  當給定國家,系統會自動加載對應的國家的properties信息。

?  通過applictionContext.getMessage(鍵名”,參數”,區域”)取出相關的信息。

 

12spring的配置的主要標簽是什么?有什么作用?

<beans>

            <bean id=”” class=”” init=”” destroy=”” singleton=””>

                <property name=””>

                    <value></value>

                </property>

                <property name=””>

                    <ref local></ref>

                </property>

            </bean>

</beans>

13springejb2.0的事務管理比較的優缺點?

測試:

            Spring:pojo

            Ejb:二個接口一個類,一堆配置文件

事務類型

            Spring:jdbc jta  hibernate

            Ejb:jta

成本

           Spring:普通容器(tomcat jboss)

           Ejb:weblogic jboss

開發的周期:

            Spring遠比ejb.

14springjdbc與傳統的jdbc有什么區別,其核心類有那些?

Springjdbc:節省代碼不管連接(Connection)不管事務、不管異常、不管關閉(con.close() ps.close )

 

        JdbcTemplate(dataSource):增、刪、改、查

        TransactionTemplate(transactionManager):進行事務處理

15、在spring中有幾種事務管理分別是什么?

代碼管理的事務處理

TransactonTemplateexecute方法中的內部類TransactionCallback中的doInTransaction方法中使用。

public void make()

    {  

        TransactionTemplate jtm=new TransactionTemplate(this.getTransactionManager());

        jtm.execute(new myClass1());

    }

    public class myClass1 implements TransactionCallback

    {

 

        public Object doInTransaction(TransactionStatus trans)

        {

            JdbcTemplate jdbc=new JdbcTemplate(dataSource);

            jdbc.execute("insert into customer(customerName) values('b')");

            jdbc.execute("insert into customer(customerName) values('b')");

            return null;

        }      

    }

            容器管理的事務處理

16、在spring中如何配代碼的事務管理?

Datasouce

            transactionManager

            userDao要注入

                Datasouce

                transactionManager

        通過如下類實現

                TransactionTemplate

                JdbcTemplate

17、在spring中如何配容器的事務管理相關的類有那些?

Datasouce

            transactionManager

            userDao要注入

                Datasouce

            Proxy代理

                Target:userDao代理對象(目標對象)

                transactionAttributes(那些方法需要事務處理)

                transactionManager(事務處理服務)

18、如果springhibernate結合在一起可以不需要hibernate.cfg.xml文件是否正確?

不需要

19spring+hibernate的配置文件中的主要類有那些?如何配置?

myeclipse中先加入spring環境再加入hibernate環境。

    如果springhibernate結合在一起可以不需要hibernate.cfg.xml文件是否正確?

    spring+hibernate的配置文件中的主要類有那些?如何配置?

        dataSource

        sessionFactory:hibernate.cfg.xml

        transactionManager

        userDao (extends HibernateDaoSupport) 

            sessionFactory

        facade

        proxy

            sessionFactory

            transactionManager

            facade

 

20spring+hibernate的代碼實現中對于實現類一定繼承于一個類是那一個它有什么作用。

extends HibernateDaoSupport可以節省代碼。

21、如何配置spring+struts?

?  struts-config.xml加入一個插件通過它加載applicationContext.xml

?  struts-config.xml修改action-mapping標記具體action交給了DelegateActionProxy

?  通過DelegateActionProxy進入一spring的環境。

?  springapplicationContext.xml加入<bean name="/login" class="" singleton="false"/>

22、如何在web環境中配置applicationContext.xml文件?

<listener>

        <listener-class>

            org.springframework.web.context.ContextLoaderListener

        </listener-class>

    </listener>

   

    <servlet>

        <servlet-name>context</servlet-name>

            <servlet-class>

                org.springframework.web.context.ContextLoaderServlet

            </servlet-class>

        <load-on-startup>1</load-on-startup>

    </servlet>

    通過如下方法取出applicationContext實例:

    ApplicationContext ac=WebApplicationContextUtils.getWebApplicationContext(this.getServletContext);

24Jsfspring的區別?

jsf:是一種基于MVC模式的一個web層的處理,粒度較struts較細。

       Spring:提供了通用的服務,ioc/di aop,關心的不僅僅web層,應當j2ee整體的一個服務,可以很容易融合不同的技術struts hibernate ibatis ejb remote springJDBC springMVC

 

Ejb技術

1weblogic的熱發布

       earjarwar拷到C:\bea\user_projects\domains\mydomain\applications目錄

       weblogic會自動發布

       通過jbuilderearjarwar部署到服務器上。

2、在ejb中實現one-to-many

       1、在many中的將外鍵字段屬性刪除

       2、在刪除many中的值時要將Collection轉化為ArrayList

          并反向遍歷ArrayList,先刪除ArrayList中值,根據

          ArrayList刪除反回的對象轉化為many的遠程接口,通過

          遠程接口將many刪除

3ejb所用的技術:

Jndijava naming directory inferface

Rmi     remote method invoke

4、實現ejb幾個接口,幾個類?

       兩個接口一個類

       extends EJBHome

              通過jndi得到home接口

              create方法調用服務端的ejbCreate方法,在服務端產生一個EntityBeanSessionBean實例,向客戶端返回一個遠程接口。

              通過find方法在從服務端找到一個EntityBean實例,向客戶端返回一個遠程接口。

       extends EJBObject

              在客戶端通過rmi調用遠程服務端方法。

              通過remove方法調用服務端的ejbRemove方法,將EnityBean刪除

       implements SessionBean

              在服務端實現真正的處理,實現核心業務

5、實現ejb相關的配置文件是什么?

       ejb-jar.xml:說明ejb的兩個接口一個類的。

       weblogic-ejb-jar.xml:說明ejbJNDI

       weblogic-rdbms-ejb.xml:o-rMapping實現數據庫表、字段與ejb屬性對應的關系。

ejb2.0的開發

       1、用jbuilder集成環境

       2、可以用eclipse開發,用源代碼注釋說明,用ant執行xdocletxdoclet

              過源代碼注釋自動生相關的配置、兩個接口一個類。

              /**

              *     @stateLess

              *     @remote

              */

6ejb的分類?區別

       sessionBean

              stateless:方法間不保留(1..1)

              statefull:方法間保留(1..n)

       entityBean:持久化

              cmp:增刪改容器

              bmp:增刪改手動jdbc

       message driver bean

              異處的消息處理

7、本地接口與遠程接口的區別。

       EJBHome(在不同的進程或主機間調用,即不同的jvm)

       EJBObjet

       EJBLocalHome(在同一進程,同是jvm)

       EJBLocalObject    

8、請求處理的過程?

       會話

              url

              factory

       通過jndi得到一個home實例

       在客戶端通過home實例在服務端產生一個sessionBean,客戶端返回一個接口

       客戶端通過遠程接口調用方法。

9statefull的生命周期

       不存在

              setSessionContext

              create--->ejbcreate

       就緒:可以調用remove方法將sessionBean刪除、可以調用服務端的任何方法。

              ejbPassivate(從就緒到掛起)

              ejbActivate(從掛起到就緒)

       掛起      

              如果超時自動刪除

10stateless的生命周期

       不存在

              setSessionContext

              create--->ejbcreate

              remove-->ejbremove

       就緒

11entityBean的生命周期:

       不存在

              setEntityContext

              create--->ejbcreate

       入池

              空房子沒加載數據

              ejbActivate

              ejbPassivate

       就緒

              remove-->ejbRemove

              加載了數據庫的數據

 

12EJB需直接實現它的業務接口或Home接口嗎,請簡述理由。

遠程接口和Home接口不需要直接實現,

他們的實現代碼是由服務器產生的,

程序運行中通過接口調用服務端產生的實例。

 

13EJB的激活機制

Stateful Session Bean 為例:其Cache大小決定了內存中可以同時存在的Bean實例的數量,根據MRUNRU算法,實例在就緒和掛起狀態之間遷移。

 

就緒:從文件到內存,調用ejbActivate方法

掛起:從內存到文件,調用ejbPassivate方法

14EJB是基于哪些技術實現的?并說 SessionBeanEntityBean的區別,

EJB包括Session BeanEntity BeanMessage Driven Bean,基于JNDIRMIJTA等技術實現.

SessionBeanJ2EE應用程序中被用來完成一些服務器端的業務操作。例如訪問數據庫、調用其他EJB組件.

EntityBean被用來代表應用系統中用到的數據.對于客戶機,

SessionBean是一種非持久性對象,它實現某些在服務器上運行的業務邏輯;

EntityBean是一種持久性對象,它代表一個存儲在持久性存儲器中的實體的對象視圖,或是一個由現有企業應用程序實現的實體.

Session Bean 還可以再細分為 Stateful Session Bean Stateless Session Bean .這兩種的 Session Bean都可以將系統邏輯放在 method之中執行,不同的是 Stateful Session Bean 可以記錄呼叫者的狀態,因此通常來說,一個使用者會有一個相對應的 Stateful Session Bean 的實體.Stateless Session Bean 雖然也是邏輯組件,但是他卻不負責記錄使用者狀態,也就是說當使用者呼叫 Stateless Session Bean 的時候,EJB Container 并不會找尋特定的 Stateless Session Bean 的實體來執行這個 method.換言之,很可能數個使用者在執行某個 Stateless Session Bean methods 時,會是同一個 Bean Instance 在執行.從內存方面來看, Stateful Session Bean Stateless Session Bean 比較, Stateful Session Bean 會消耗 J2EE Server 較多的內存,然而 Stateful Session Bean 的優勢卻在于他可以維持使用者的狀態.

 

15EJB的分類是什么?各有什么特點?

sessionBean:主機重起消失

    Stateless:不記憶

    StateFull:一個用戶多個操作可記憶

EntityBean:持久的數據庫中

    Cmp:容器通過o/r mapping實現數據的持久化,不寫sql,實現方便,在速度慢。

    Bmp:通過jdbc實現持久化,實現復雜,速度快

messageBean:提供異步處理。

 

10EJB中主要的配置文件及作用是什么?

EJB部署時需要三個文件:

?  Ejb-jar.xml:

?  將二個接口一個類打包在一起,給EJB一個名稱。

?  說明當前的sessionBean的事務是由容器處理的。

?  其在所有的服務器上是通用的。

?  Weblogic-ejb-jar.xml:

?  將一個EJB名稱,對應一個JNDI,在僅對weblogic服務器

?  Weblogic-rdbms-jar.xml:

?  實現o/r mapping的說明,相當于*.hbm.xml

15、說出數據連接池的工作機制是什么?

容器或相關的應用程序在其池中實例化多個邊接,當應用程序在使用時,容器直接將池中的連接取出應用程序直接使用,同時當應用程序使用完后,容器還可以將連接收回。從而提高系統的效率。

16EJB2.0有哪些內容?分別用在什么場合? EJB2.0EJB1.1的區別?

sessionBean:是一個過程

entityBean:是持久化,代表的是一個業務實體,有主鍵。

Struts+sessionBean+entityBean

EJB2.0加入的本地接口及本地home

EJB1.1中只有遠程接口及遠程home

 

 

18EJBJAVA BEAN的區別

Java Bean 是可復用的組件任何一個Java類都可以是一個Bean。但通常情況下,Java Bean是被容器所創建(如Tomcat)的,所以Java Bean具有如下特點:

 

一個無參的構造器

實現Serializable接口

私有屬性

公有get set方法

 

Enterprise Java Bean 是一個分布式組件,其特點是

基于(RMI)技術的,可以被遠程訪問(跨進程、跨計算機)。

EJB必須被布署在Webspere、WebLogic容器中,不能直接訪問ejb,而是通過容器訪問ejb,容器是ejb訪問的一個代理。

19EJB的角色和三個對象

六個角色組成,分別是

EJB組件開發者(Enterprise Bean Provider):sun

應用組合者(Application Assembler)真正的開發商

部署者Deployer:

EJB 服務器提供者EJB Server Provider:sun ibm 小機

EJB 容器提供者EJB Container Provider:weblogic jboss

系統管理員System Administrator:維護員

三個對象是RemoteLocal接口、HomeLocalHome接口Bean

20EJB容器提供的服務

主要提供

安全

事務管理

分布式

jts

聲明周期管理

代碼產生

持續性管理

鎖和并發行管理等服務。

21EJB規范規定EJB中禁止的操作有哪些?

1.不能操作線程和線程API(線程API指非線程對象的方法如notify,wait等),

2.不能操作awt,

3.不能實現服務器功能,

4.不能對靜態屬生存取,

5.不能使用IO操作直接存取文件系統,

6.不能加載本地庫.,

7.不能將this作為變量和返回,

8.不能循環調用。

26EJB的基本架構

答:一個EJB包括三個部分:

 

Remote Interface 接口的代碼

package Beans;

import javax.ejb.EJBObject;

import java.rmi.RemoteException;

public interface Add extends EJBObject

{

//some method declare

}

Home Interface 接口的代碼

package Beans;

import java.rmi.RemoteException;

import jaax.ejb.CreateException;

import javax.ejb.EJBHome;

public interface AddHome extends EJBHome

{

//some method declare

}

 

EJB類的代碼

 

package Beans;

 

import java.rmi.RemoteException;

import javax.ejb.SessionBean;

import javx.ejb.SessionContext;

public class AddBean Implements SessionBean

{

//some method declare

}

30、如何在weblogic中進行ssl配置與客戶端的認證配置或說說j2ee(標準)進行ssl的配置

缺省安裝中使用DemoIdentity.jksDemoTrust.jks KeyStore實現SSL需要配置服務器使用Enable SSL配置其端口在產品模式下需要從CA獲取私有密鑰和數字證書創建identitytrust keystore裝載獲得的密鑰和數字證書。可以配置此SSL連接是單向還是雙向的。

31如何查看在weblogic中已經發布的EJB?

可以使用管理控制臺,在它的Deployment中可以查看所有已發布的EJB

WebService技術

1、什么是Web Service?

Web Service就是為了使原來各孤立的站點之間的信息能夠相互通信、共享而提出的一種接口。

使用的技術:

HTTP、XML、SOAP(簡單對象訪問協議)、WSDL

優點:

    跨平臺、跨語言、跨系統

SOAP協議:

    SOAP協議(Simple Object Access Protocal,簡單對象訪問協議)

    Tcp/ipàhttp->soap,soap 通過xml文件傳送信息

缺點:

 (1).WebService使用了XML對數據封裝,會造成大量的數據要在網絡中傳輸。

 (2).WebService規范沒有規定任何與實現相關的細節,包括對象模型、編程語言,這一點,它不如CORBA。

2、什么是Web容器?

實現J2EE規范中web協議的應用.該協議定義了web程序的運行時環境,包括:并發性,安全性,生命周期管理等等.

    就是在tomcat、weblogic下運行jsp、servlet、struts

3、應用服務器有那些?

BEA WebLogic ServerIBM WebSphere Application ServerOracle9i Application ServerjBossTomcat

5、如何給weblogic指定大小的內存?

在啟動Weblogic的腳本中(位于所在Domian對應服務器目錄下的startServerName),增加set MEM_ARGS=-Xms32m -Xmx200m,可以調整最小內存為32M,最大200M

6、如何設定的weblogic的熱啟動模式(開發模式)與產品發布模式?

可以在管理控制臺中修改對應服務器的啟動模式為開發或產品模式之一。或者修改服務的啟動文件或者commenv文件,增加set PRODUCTION_MODE=true

7、如何啟動時不需輸入用戶名與密碼?

修改服務啟動文件,增加 WLS_USERWLS_PW項。也可以在boot.properties文件中增加加密過的用戶名和密碼.

8、在weblogic管理制臺中對一個應用域(或者說是一個網站,Domain)進行jmsejb或連接池等相關信息進行配置后,實際保存在什么文件中?

保存在此Domainconfig.xml文件中,它是服務器的核心配置文件。

9、說說weblogic中一個Domain的缺省目錄結構?比如要將一個簡單的helloWorld.jsp放入何目錄下,然的在瀏覽器上就可打入 http://主機:端口號//helloword.jsp就可以看到運行結果了? 又比如這其中用到了一個自己寫的javaBean該如何辦?

Domain 目錄服務器目錄applications,將應用目錄放在此目錄下將可以作為應用訪問,如果是Web應用,應用目錄需要滿足Web應用目錄要求,jsp文件可以直接放在應用目錄中,Javabean需要放在應用目錄的WEB-INF目錄的classes目錄中,設置服務器的缺省應用將可以實現在瀏覽器上無需輸入應用名。

12CORBA是什么?用途是什么?

CORBA 標準是公共對象請求代理結構(Common Object Request Broker Architecture),由對象管理組織 (Object Management Group,縮寫為 OMG)標準化。它的組成是接口定義語言(IDL), 語言綁定(binding:也譯為聯編)和允許應用程序間互操作的協議。其目的為:用不同的程序設計語言書寫在不同的進程中運行,為不同的操作系統開發。

13、說說在weblogic中開發消息Bean時的persistentnon-persisten的差別

persistent方式的MDB可以保證消息傳遞的可靠性,也就是如果EJB容器出現問題而JMS服務器依然會將消息在此MDB可用的時候發送過來,而nonpersistent方式的消息將被丟棄。

14WEB SERVICE名詞解釋。JSWDL開發包的介紹。JAXPJAXM的解釋。SOAPUDDI,WSDL解釋。

Web ServiceWeb Service是基于網絡的、分布式的模塊化組件,它執行特定的任務,遵守具體的技術規范,這些規范使得Web Service能與其他兼容的組件進行互操作。

JAXP(Java API for XML Parsing) 定義了在Java中使用DOM, SAX, XSLT的通用的接口。這樣在你的程序中你只要使用這些通用的接口,當你需要改變具體的實現時候也不需要修改代碼。

JAXM(Java API for XML Messaging) 是為SOAP通信提供訪問方法和傳輸機制的API

WSDL是一種 XML 格式,用于將網絡服務描述為一組端點,這些端點對包含面向文檔信息或面向過程信息的消息進行操作。這種格式首先對操作和消息進行抽象描述,然后將其綁定到具體的網絡協議和消息格式上以定義端點。相關的具體端點即組合成為抽象端點(服務)。

SOAP即簡單對象訪問協議(Simple Object Access Protocol),它是用于交換XML編碼信息的輕量級協議。

UDDI 的目的是為電子商務建立標準;UDDI是一套基于Web的、分布式的、為Web Service提供的、信息注冊中心的實現標準規范,同時也包含一組使企業能將自身提供的Web Service注冊,以使別的企業能夠發現的訪問協議的實現標準。

j2ee模式MVC模式、Model1Model2

1j2ee常用的設計模式?說明工廠模式。

Java中的23種設計模式:

Factory工廠模式), Builder建造模式), Factory Method工廠方法模式),

Prototype原始模型模式),Singleton單例模式), Facade門面模式),

Adapter適配器模式), Bridge橋梁模式), Composite合成模式),

Decorator裝飾模式), Flyweight享元模式), Proxy代理模式),

Command命令模式), Interpreter解釋器模式), Visitor訪問者模式),

Iterator迭代子模式), Mediator調停者模式), Memento備忘錄模式),

Observer觀察者模式), State狀態模式), Strategy策略模式),

Template Method模板方法模式), Chain Of Responsibleity責任鏈模式

工廠模式工廠模式是一種經常被使用到的模式根據工廠模式實現的類可以根據提供的數據生成一組類中某一個類的實例通常這一組類有一個公共的抽象父類并且實現了相同的方法但是這些方法針對不同的數據進行了不同的操作。首先需要定義一個基類,該類的子類通過不同的方法實現了基類中的方法。然后需要定義一個工廠類,工廠類可以根據條件生成不同的子類實例。當得到子類的實例后,開發人員可以調用基類中的方法而不必考慮到底返回的是哪一個子類的實例。

2、說說你所熟悉或聽說過的j2ee中的幾種常用模式?及對設計模式的一些看法

Session Facade Pattern:使用SessionBean訪問EntityBean

Message Facade Pattern:實現異步調用

EJB Command Pattern:使用Command JavaBeans取代SessionBean,實現輕量級訪問

Data Transfer Object Factory:通過DTO Factory簡化EntityBean數據提供特性

Generic Attribute Access:通過AttibuteAccess接口簡化EntityBean數據提供特性

Business Interface:通過遠程(本地)接口和Bean類實現相同接口規范業務邏輯一致性

ejb架構的設計好壞將直接影響系統的性能、可擴展性、可維護性、組件可重用性及開發效率。項目越復雜,項目隊伍越龐大則越能體現良好設計的重要性。

3、解釋下面關于J2EE的名詞

(1)JNDI:Java Naming & Directory Interface,JAVA命名目錄服務.主要提供的功能是:提供一個目錄系統,讓其它各地的應用程序在其上面留下自己的索引,從而滿足快速查找和定位分布式應用程序的功能.

(2)JMS:Java Message Service,JAVA消息服務.主要實現各個應用程序之間的通訊.包括點對點和廣播.

(3)JTA:Java Transaction API,JAVA事務服務.提供各種分布式事務服務.應用程序只需調用其提供的接口即可.

(4)JAF: Java Action FrameWork,JAVA安全認證框架.提供一些安全控制方面的框架.讓開發者通過各種部署和自定義實現自己的個性安全控制策略.

(5)RMI:Remote Method Interface,遠程方法調用

 

4、介紹J2EEJ2SEJ2ME的區別。

J2ee:企業級,主要的application server的web及應用服務

J2se:標準版, 沒有application server

J2me:手機、pda的嵌入式開發

 

5、開發中都用到了那些設計模式?用在什么場合?

每個模式都描述了一個在我們的環境中不斷出現的問題,然后描述了該問題的解決方案的核心。通過這種方式,你可以無數次地使用那些已有的解決方案,無需在重復相同的工作。主要用到了MVC的設計模式。用來開發JSP/Servlet或者J2EE的相關應用。簡單工廠模式等。

6J2EE是什么?

J2EE 是Sun公司提出的多層(multi-diered),分布式(distributed),基于組件(component-base)的企業級應用模型 (enterpriese application model).在這樣的一個應用系統中,可按照功能劃分為不同的組件,這些組件又可在不同計算機上,并且處于相應的層次(tier)中。所屬層次包括客戶層(clietn tier)組件,web層和組件,Business層和組件,企業信息系統(EIS)層。

7J2EE是技術還是平臺還是框架?

    J2EE本身是一個標準,一個為企業分布式應用的開發提供的標準平臺。

    J2EE也是一個框架,包括JDBC、JNDI、RMI、JMS、EJB、JTA等技術。

其他

1、當前主流的解析器有那些?

DOM:文檔對象模型(document object model)

SAX

2Dom解析處理的過程是什么?

package ss;

import javax.xml.parsers.DocumentBuilderFactory;

import javax.xml.parsers.DocumentBuilder;

import org.w3c.dom.Document;

import org.w3c.dom.Element;

import org.w3c.dom.Node;

import org.w3c.dom.Attr;

import org.w3c.dom.NodeList;

import javax.xml.transform.TransformerFactory;

import javax.xml.transform.Transformer;

import javax.xml.transform.dom.DOMSource;

import javax.xml.transform.stream.StreamResult;

 

public class XmlParser

{

    public static void main(String[] args)

            throws Exception

    {

        xmlwriter();

    }

 

    public static void xmlparser()

            throws Exception

    {

        DocumentBuilderFactory xdf = DocumentBuilderFactory.newInstance();

        DocumentBuilder db = xdf.newDocumentBuilder();

        Document d = db.parse("C:\\A1\\customer.xml");

        NodeList nl = d.getElementsByTagName("customer");

        for (int i = 0; i < nl.getLength(); i++)

        {

 

            Element e = (Element) nl.item(i);

            Attr a = e.getAttributeNode("customerID");

            System.out.println(a.getNodeValue());

            NodeList nl1 = e.getElementsByTagName("customerName");

            System.out.println(nl1.item(0).getFirstChild().getNodeValue());

        }

    }

    public static void xmlwriter() throws Exception

    {

        DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();

        DocumentBuilder db=dbf.newDocumentBuilder();

        Document d=db.parse("C:\\A1\\customer.xml");

        NodeList nl=d.getElementsByTagName("customerName");

        for(int i=0;i<nl.getLength();i++)

        {

           Element e=(Element) nl.item(i);

           System.out.println(e.getFirstChild().getNodeValue());

           e.getFirstChild().setNodeValue(e.getFirstChild().getNodeValue()+"111111111111111");

        }

        TransformerFactory tff=TransformerFactory.newInstance();

        Transformer tf=tff.newTransformer();

        tf.transform(new DOMSource(d),new StreamResult("c:\\aa.xml"));

    }

}

 

DocumentBuilderFactory

              DocumentBuiler db

              Document d=db.parse(具體文件路徑);

              NodeList nl=d.getElementsByTagName(節點名)

3Sax解析處理的過程是什么?

import org.xml.sax.helpers.DefaultHandler;

import org.xml.sax.SAXException;

import org.xml.sax.Attributes;

import javax.xml.parsers.SAXParser;

import javax.xml.parsers.SAXParserFactory;

public class SaxParser extends DefaultHandler

{

    public void characters(char[] ch, int start, int length)

            throws SAXException

    {

        String temp=new String(ch,start,length);

        System.out.println(temp);

    }

 

    public void endDocument()

            throws SAXException

    {

        System.out.println("正在開始一個文檔");

    }

 

    public void endElement(String namespaceURI, String localName, String qName)

            throws SAXException

    {

        System.out.println("結束元素"+qName);

    }

 

    public void startDocument()

            throws SAXException

    {

        System.out.println("開始文檔");

    }

 

    public void startElement(String namespaceURI, String localName,

                             String qName, Attributes atts)

            throws SAXException

    {

         System.out.println("開始元素"+qName);

    }

    public static void main(String[] args) throws Exception

    {

        SAXParserFactory spf=SAXParserFactory.newInstance();

        SAXParser sp=spf.newSAXParser();

        sp.parse("C:\\A1\\customer.xml",new SaxParser());

    }

}

4DomSax相比它們的優缺點是什么?

DOM可以訪問任何一個節點,要將所有資源全部加載,比較耗內存,可以修改。

              SAX只能順序讀,不可隨意訪問,不可寫,但速度快。

1.         Dom中的核心接口有那些?

Node

       TextNode

Element 

Arr

NodeList

Document

5、如何將Dom對象寫入到文件中?

TransformerFactory

Transformer通過如下方法進行處理

Transformer(DOMSource(Document d),ResultStream(OutputStream o))

6、用jdom解析xml文件時如何解決中文問題?

類文件是utf-8xml文件頭也應是utf-8 <?xml version="1.0" encoding="UTF-8" ?>

7XML文檔定義有幾種形式?它們之間有何本質區別?解析XML文檔有哪幾種方式?

a: 兩種形式 dtd  schema

b: 本質區別:schema本身是xml的,可以被XML解析器解析(這也是從DTD上發展schema的根本目的)

c:DOM,SAX,STAX

 DOM:處理大型文件時其性能下降的非常厲害。這個問題是由DOM的樹結構所造成的,這種結構占用的內存較多,而且DOM必須在解析文件之前把整個文檔裝入內存,適合對XML的隨機訪問

SAX:不現于DOM,SAX是事件驅動型的XML解析方式。它順序讀取XML文件,不需要一次全部裝載整個文件。當遇到像文件開頭,文檔結束,或者標簽開頭與標簽結束時,它會觸發一個事件,用戶通過在其回調事件中寫入處理代碼來處理XML文件,適合對XML的順序訪問

STAX:Streaming API for XML (StAX)

 

8、標準建模語言UML中的各種圖?

靜態圖

用例圖、類圖、對象圖、構件、部署,

動態圖(行為圖)

活動圖,協作圖,狀態、時序

9BSCS的聯系與區別。

C/SClient/Server的縮寫。服務器通常采用高性能的PC、工作站或小型機,并采用大型數據庫系統,如OracleSybaseInformix SQL Server。客戶端需要安裝專用的客戶端軟件。

B/S是Brower/Server的縮寫,客戶機上只要安裝一個瀏覽器(Browser),如Netscape NavigatorInternet Explorer,服務器安裝OracleSybaseInformix SQL Server等數據庫。在這種結構下,用戶界面完全通過WWW瀏覽器實現,一部分事務邏輯在前端實現,但是主要事務邏輯在服務器端實現。瀏覽器通過Web Server 同數據庫進行數據交互。

C/S B/S 區別:

1.硬件環境不同:

  C/S 一般建立在專用的網絡上, 小范圍里的網絡環境, 局域網之間再通過專門服務器提供連接和數據交換服務.

  B/S 建立在廣域網之上的, 不必是專門的網絡硬件環境,例與電話上網, 租用設備. 信息自己管理. 有比C/S更強的適應范圍, 一般只要有操作系統和瀏覽器就行

2.對安全要求不同

  C/S 一般面向相對固定的用戶群, 對信息安全的控制能力很強. 一般高度機密的信息系統采用C/S 結構適宜. 可以通過B/S發布部分可公開信息.

  B/S 建立在廣域網之上, 對安全的控制能力相對弱, 可能面向不可知的用戶。

3.對程序架構不同

  C/S 程序可以更加注重流程, 可以對權限多層次校驗, 對系統運行速度可以較少考慮.

  B/S 對安全以及訪問速度的多重的考慮, 建立在需要更加優化的基礎之上. C/S有更高的要求 B/S結構的程序架構是發展的趨勢, MS.Net系列的BizTalk 2000 Exchange 2000, 全面支持網絡的構件搭建的系統. SUN IBM推的JavaBean 構件技術等,使 B/S更加成熟.

4.軟件重用不同

  C/S 程序可以不可避免的整體性考慮, 構件的重用性不如在B/S要求下的構件的重用性好.

  B/S 對的多重結構,要求構件相對獨立的功能. 能夠相對較好的重用.就入買來的餐桌可以再利用,而不是做在墻上的石頭桌子

5.系統維護不同

  C/S 程序由于整體性, 必須整體考察, 處理出現的問題以及系統升級. 升級難. 可能是再做一個全新的系統

  B/S 構件組成,方面構件個別的更換,實現系統的無縫升級. 系統維護開銷減到最小.用戶從網上自己下載安裝就可以實現升級.

6.處理問題不同

  C/S 程序可以處理用戶面固定, 并且在相同區域, 安全要求高需求, 與操作系統相關. 應該都是相同的系統

  B/S 建立在廣域網上, 面向不同的用戶群, 分散地域, 這是C/S無法作到的. 與操作系統平臺關系最小.

7.用戶接口不同

  C/S 多是建立的Window平臺上,表現方法有限,對程序員普遍要求較高

  B/S 建立在瀏覽器上, 有更加豐富和生動的表現方式與用戶交流. 并且大部分難度減低,減低開發成本.

8.信息流不同

  C/S 程序一般是典型的中央集權的機械式處理, 交互性相對低

  B/S 信息流向可變化, B-B B-C B-G等信息、流向的變化, 更像交易中心。

10Uml的概念是什么?主要的工具是什么

Uml:統一建模語言

工具:Rational Rose

11Uml的概念中的九大圖形是什么?最重的三個圖是什么?各有什么特點?

類圖

       繼承

關聯:(1..n  n..1  n..n)

依賴

實現接口

聚集

組成

類圖的生命周期(開發的所有階段都使用)

              總體設計

              詳細設計

              開發:以類圖進行開發

              測試

Use-case

       關系

                     用例與用例

包含(include):必須調用

                            擴展(extends):可以調用也可以不調用

                     角色與角色的關系

                            泛化

                     用例與角色的關系:

                            用例與角色:通知

                            角色與用例:調用

              元素

                     用例

                     角色

                     系統邊界

Use-case圖的生命周期

              需求

              整體設計

              測試(單元測試、集成測試、系統測試、用戶驗收)

時序

              元素

橫坐標:對象

縱坐標:   時間

作用

                     找類

                     找方法

                     驗證系統的正確

生命周期

                     詳細設計

活動(流程圖)

作用

                     分析業務

構件圖

       作用:說明組件與組件之間的關系,依賴關系

部署

       作用:說明安裝軟件的主機之間的關系,系統運行時的性能的主要影響者。

協作

       對象與對象之間的調用協作。

狀態

       一個對象狀態在不同的動作下的變化。

       對象

              說明對象

13、在類圖中如何找類?

找名詞

                     以下為在網上找的面試題

1 什么是JavaJava2JDKJDK后面的1.31.4.2版本號又是怎么回事?

  答:Java是一種通用的,并發的,強類型的,面向對象的編程語言(摘自Java規范第二版) JDKSun公司分發的免費Java開發工具,正式名稱為J2SDK(Java2 Softw are Develop Kit)

 

2 什么是JRE/J2RE

  答:J2REJava2 Runtime Environment   Java運行環境,有時簡稱JRE

如果你只需要運行Java程序或Applet 下載并安裝它即可。如果你要自行開發Java軟件,請下載JDK。在JDK中附帶有J2RE

  注意由于MicrosoftJava的支持不完全,請不要使用IE自帶的虛擬機來運行Applet,務必安裝一個J2REJDK

 

3 學習Java用什么工具比較好?

 答:作者建議首先使用JDK+文本編輯器,這有助你理解下列幾個基礎概念:pathclasspathpackage并熟悉基本命令:javacjava。并且下載和你的JDK版本一致的API幫助。

  如果你不確定類或函數的用法,請先查閱API而不是發貼求助。

  當你熟悉Java之后,你可以考慮換一個IDE。很多人推薦Jcreator,實際上Jcreator的功能還 是很弱的。

  作者推薦eclipse,下載網址http://www.eclipse.org ;。因eclispe是免費的.

 

4 學習Java有哪些好的參考書?

  答:作者首先推薦Thinking in Java,中文名《Java編程思想》,有中文版。該書第一章介紹了很多面向對象的編程思想,作為新手應當認真閱讀。除此以外,Orelly出版社和Wrox出版社的書也不錯。作者本人不喜歡大陸作者的書。也許你覺得英文太難,但是網上大多數資料都是英文的。另外,你需要經常查閱API,而那也是英文的。

 

5 JavaC++哪個更好?

  答:這個問題是一個很不恰當的問題。你應該問:JavaC++哪個更適用于我的項目? 如果你不需要跨平臺,不需要分布式,要強調程序的運行速度,C++更為適用。反之?你應當考慮Java

 

6 什么是J2SE/J2EE/J2ME  

  答:J2SE就是一般的Java

  J2ME是針對嵌入式設備的,比如Java手機,它有自己的SDK。而J2EE使用J2SESDK

  J2EE規范更多的是對J2EE服務器的要求和開發人員的約束。詳情見后繼《J2EE FAQ》。

7 我寫了第一個Java程序,應該如何編譯/運行?

  答:首先請將程序保存為xxx.java文件,

  然后在dos窗口下使用javac xxx.java命令,你會發現該目錄下多了一個xxx.class文件,再使用java xxx命令,你的java程序就開始運行了。

 

8 我照你說的做了,但是出現什么"javac 不是內部或外部命令,也不是可運行的程序或批處理文件。"

  答:你遇到了path問題。操作系統在一定的范圍(path)內搜索javac.exe,但是沒能找到。

  請編輯你的操作系統環境變量,新增一個JAVA_HOME變量,設為你JDK的安裝目錄,

  再編輯Path變量,加上一項 %JAVA_HOME%bin

  然后關掉并新開一個dos窗口,你就可以使用javacjava命令了。

 

9 環境變量怎么設置?

  答:請向身邊會設的人咨詢。 java初學者必讀-經驗總結 這篇文章中比較詳細的講到 jdk開發中系統環境變量設置 以及相關 服務器配置等開發環境配置。

 

10 javac xxx.java順利通過了,但是java xxx的時候顯示什么"NoClassDefFoundError"

  答:你遇到了classpath問題。java命令在一定的范圍(classpath)內搜索你要用的class文件,但是未能找到。

  首先請確認你沒有錯敲成java xxx.class

  其次,檢查你的CLASSPATH環境變量,如果你設置了該變量又沒有包含.(代表當前目錄)你就會遇到這個問題。請在你的CLASSPATH環境變量中加入一項. 。另

  外參見15

 

11 我在java xxx的時候顯示"Exception in thread "main" java.lang.NoSuchMethodError: main"

  答:首先,在你的程序中每個java文件有且只能有一個public類,

  這個類的類名必須和文件名的大小寫完全一樣。

  其次,在你要運行的類中有且只能有一個public static void main(String[] args)方法,這個方法就是你的主程序。

 

12 package是什么意思?怎么用?

  答:為了唯一標識每個類并分組,java使用了package的概念。

  每個類都有一個全名,例如String的全名是java.lang.String,其中java.lang是包名,String是短名。

  這樣,如果你也定義了String,你可以把它放在mypackage中,

  通過使用全名mypackage.Stringjava.lang.String來區分這兩個類。

  同時,將邏輯上相關的類放在同一個包中,可以使程序結構更為清楚。

 

  你要做的就是在java文件開頭加一行"package mypackage;"

  注意包沒有嵌套或包含關系,A包和A.B包對java命令來說是并列的兩個包

 

13 我沒有聲明任何package會怎么樣?

  答:你的類被認為放在默認包中。這時全名和短名是一致的。

 

14 在一個類中怎么使用其他類?

  答:如果你使用java.lang包中的類,不用做任何事。

  如果你使用其他包中的類,使用import package1.class1; import package2.*;

  這里.*表示引入這個包中的所有類。然后在程序中你可以使用其他類的短名。

  如果短名有沖突,使用全名來區分。

 

15 我用了package的時候顯示"NoClassDefFoundError",但是我把所有package去掉的時候能正常運行。

  答:將你的java文件按包名存放。

  比如你的工作目錄是/work,你的類是package1.class1,那么將它存放為/work/package1/class1.java

  如果沒有聲明包,那么直接放在/work下。

  在/work下執行javac package1/class1.java,再執行java package1.class1,你會發現

  一切正常。

  另外,你可以考慮開始使用IDE

 

16 我想把java編譯成exe文件,該怎么做?

  答:JDK只能將java源文件編譯為class文件。

  class文件是一種跨平臺的字節碼,必須依賴平臺相關的JRE來運行。Java以此來實現跨平臺,有些開發工具可以將java文件編譯為exe文件。作者反對這種做法,因為這樣就取消了跨平臺性。

  如果你確信你的軟件只在Windows平臺上運行,你可以考慮使用C++/C#來編程。

 

17 我在編譯的時候遇到什么"deprecated API",是什么意思?

  答:所謂deprecated是指已經?時,但是為了向前兼容起見仍然保留的方法?這些方法可能會在以后取消支持。你應當改用較新的方法。

  一般在API里面會說明你應當用什么方法來代替之。

 

Java環境變量設置

18 我怎么給java程序加啟動參數,就像dir /p/w那樣?

  答:還記得public static void main(String[] args)嗎?這里的args就是你的啟動參數。

  在運行時你輸入java package1.class1 -arg1 -arg2args中就會有兩個String,一個是arg1,另一個是arg2

 

19 我怎么從鍵盤輸入一個int/double/字符串?

  答:javaI/O操作比C++要復雜一點。如果要從鍵盤輸入,樣例代碼如下:

  BufferedReader cin = new BufferedReader( new InputStreamReader( System.in ) ) ;

  String s = cin.readLine();

  這樣你就獲得了一個字符串,如果你需要數字的話再加上:

  int n = Integer.parseInt( s ); 或者 double d = Double.parseDouble( s );

 

20 我怎么輸出一個int/double/字符串?

  答:在程序開始寫:

  PrintWriter cout = new PrintWriter( System.out ); 需要時寫:cout.print(n); 或者 out.println("hello")等等。

 

21 我發現有些書上直接用System.inSystem.out輸入輸出,比你要簡單得多。

  答:java使用unicode,是雙字節。而System.inSystem.out是單字節的stream

  如果你要輸入輸出雙字節文字比如中文,請使用作者的做法。

 

22 我怎么從文件輸入一個int/double/字符串?

  答:類似于從鍵盤輸入,只不過換成

  BufferedReader fin = new BufferedReader( new FileReader(" myFileName " ) );

  PrintWriter fout = new PrintWriter( new FileWriter(" myFileName " ) );

  另外如果你還沒下載API,請開始下載并閱讀java.io包中的內容。

 

23 我想讀寫文件的指定位置,該怎么辦?

  答:你肯定沒有認真看APIjava.io.RandomAccessFile可以滿足你的需要。

 

24 怎么判斷要讀的文件已經到了盡頭?

  答:你肯定沒有認真看API。在Reaerread方法中明確說明返回-1表示流的結尾。

25 java里面怎么定義宏?

  答:java不支持宏,因為宏代換不能保證類型安全。

  如果你需要定義常量,可以將它定義為某個類的static final成員。參見2630

 

26 java里面沒法用const

  答:你可以用final關鍵字。例如 final int m = 9。被聲明為final的變量不能被再次賦值?final也可以用于聲明方法或類,被聲明為final的方法或類不能被繼承

  注意constjava的保留字以備擴充。

 

27 java里面也不能用goto

  答:甚至在面向過程的語言中你也可以完全不用goto。請檢查你的程序流程是否合理。

  如果你需要從多層循環中迅速跳出,java增強了(和C++相比)breakcontinue的功能,支持label

 

  例如:

  outer :

  while( ... )

  {

  inner :

  for( ... )

  {

  ... break inner; ...

  ... continue outer; ...

  }

  }

  和const一樣,goto也是java的保留字以備擴充。

 

28 java里面能不能重載操作符?

  答:不能。String+號是唯一一個內置的重載操作符。你可以通過定義接口和方法來實現類

  似功能。

 

29 new了一個對象,但是沒法delete掉它。

  答:java有自動內存回收機制,即所謂Garbarge Collector。你再也不用擔心指針錯誤

 

30 我想知道為什么main方法必須被聲明為public static

  答:聲明為public是為了這個方法可以被外部調用,詳情見面向對象篇37

  static是為了將某個成員變量/方法關聯到類(class)而非實例(instance)。

  你不需要創建一個對象就可以直接使用這個類的static成員,

  在A類中調用B類的static成員可以使用B.staticMember的寫法。

  注意一個類的static成員變量是唯一的,被所有該類對象所共享的。

 

31 throwthrows有什么不同?

  答:throws用于聲明一個方法會拋出哪些異常。而throw是在方法體中實際執行拋出異常

  的動作。

  如果你在方法中throw一個異常,卻沒有在方法聲明中聲明之,編譯器會報錯。

  注意ErrorRuntimeException的子類是例外,無需特別聲明。

 

32 什么是異常?

  答:異常最早在Ada語言中引入,用于在程序中動態處理錯誤并恢復。

  你可以在方法中攔截底層異常并處理之,也可以拋給更高層的模塊去處理。

  你也可以拋出自己的異常指示發生了某些不正常情況。常見的攔截處理代碼如下:

  try

  {

  ...... //以下是可能發生異常的代碼

  ...... //異常被拋出,執行流程中斷并轉向攔截代碼。

  ......

  }

 

 

  catch(Exception1 e) //如果Exception1Exception2的子類并要做特別處理,應排在

  前面

  {

  //發生Exception1時被該段攔截

  }

  catch(Exception2 e)

  {

  //發生Exception2時被該段攔截

  }

  finally //這是可選的

  {

  //無論異常是否發生,均執行此段代碼

  }

 

33 finalfinally有什么不同?

  答:final請見26finally用于異常機制,參見32

34 extendsimplements有什么不同?

  答:extends用于(單)繼承一個類(class),而implements用于實現一個接口(interface)。

  interface的引入是為了部分地提供多繼承的功能。

  在interface中只需聲明方法頭,而將方法體留給實現的class來做。

  這些實現的class的實例完全可以當作interface的實例來對待。

  有趣的是在interface之間也可以聲明為extends(單繼承)的關系。

 

35 java怎么實現多繼承?

  答:java不支持顯式的多繼承。

  因為在顯式多繼承的語言例如c++中,會出現子類被迫聲明祖先虛基類構造函數的問題,

 

  而這是違反面向對象的封裝性原則的。

  java提供了interfaceimplements關鍵字來部分地實現多繼承。參見34

 

36 abstract是什么?

  答:被聲明為abstract的方法無需給出方法體,留給子類來實現。

  而如果一個類中有abstract方法,那么這個類也必須聲明為abstract

  被聲明為abstract的類無法實例化,盡管它可以定義構造方法供子類使用。

 

37 public,protected,private有什么不同?

  答:這些關鍵字用于聲明類和成員的可見性。

  public成員可以被任何類訪問,

  protected成員限于自己和子類訪問,

  private成員限于自己訪問。

  Java還提供了第四種的默認可見性,當沒有任何public,protected,private修飾時,成員是包內可見

  類可以用public或默認來修飾。

 

38 OverrideOverload有什么不同?

  答:Override是指父類和子類之間方法的繼承關系,這些方法有著相同的名稱和參數類型。

  Overload是指同一個類中不同方法(可以在子類也可以在父類中定義)間的關系,這些方法有著相同的名稱和不同的參數類型。

 

39 我繼承了一個方法,但現在我想調用在父類中定義的方法。

  答:用super.xxx()可以在子類中調用父類方法。

 

40 我想在子類的構造方法中調用父類的構造方法,該怎么辦?

  答:在子類構造方法的第一行調用super(...)即可。

 

41 我在同一個類中定義了好幾個構造方法并且想在一個構造方法中調用另一個。

  答:在構造方法第一行調用this(...)

 

42 我沒有定義構造方法會怎么樣?

  答:自動獲得一個無參數的構造方法。

 

43 我調用無參數的構造方法失敗了。

  答:如果你至少定義了一個構造方法,就不再有自動提供的無參數的構造方法了。

  你需要顯式定義一個無參數的構造方法。

 

44 我該怎么定義類似于C++中的析構方法(destructor)?

  答:提供一個void finalize()方法。在Garbarge Collector回收該對象時會調用該方法。

  注意實際上你很難判斷一個對象會在什么時候被回收。作者從未感到需要提供該方法。

 

45 我想將一個父類對象轉換成一個子類對象該怎么做?

  答:強制類型轉換。如

  public void meth(A a)

  {

  B b = (B)a;

  }

  如果a實際上并不是B的實例,會拋出ClassCastException。所以請確保a確實是B的實例 .

 

46 其實我不確定a是不是B的實例,能不能分情況處理?

  答:可以使用instanceof操作符。例如

  if( a instanceof B )

  {

  B b = (B)a;

  }

  else

  {

  ...

  }

 

47 我在方法里修改了一個對象的值,但是退出方法后我發現這個對象的值沒變!

  答:很可能你把傳入參數重賦了一個新對象,例如下列代碼就會造成這種錯誤:

  public void fun1(A a) //a是局部參數,指向了一個外在對象。

  {

  a = new A(); //a指向了一個新對象,和外在對象脫鉤了。如果你要讓a作為傳

  出變

  量,不要寫這一句。

  a.setAttr(attr);//修改了新對象的值,外在對象沒有被修改。

  }

  基本類型也會出現這種情況。例如:

  public void fun2(int a)

  {

  a = 10;//只作用于本方法,外面的變量不會變化。

  }

48 java能動態分配數組嗎?

  答:可以。例如int n = 3; Language[] myLanguages = new Language[n];

 

49 我怎么知道數組的長度?

  答:用length屬性。如上例中的 myLanguages.length 就為 3

 

50 我還想讓數組的長度能自動改變,能夠增加/刪除元素。

  答:用順序表--java.util.List接口。

  你可以選擇用ArrayList或是LinkedList,前者是數組實現,后者是鏈表實現。

  例如: List list = new ArrayList(); 或是 List list = new LinkedList();

 

51 什么是鏈表?為什么要有兩種實現?

  答:請補習數據結構。

 

52 我想用隊列/棧。

  答:用java.util.LinkedList

 

53 我希望不要有重復的元素。

  答:用集合--java.util.Set接口。例如:Set set = new HashSet()

 

54 我想遍歷集合/Map

  答:用java.util.Iterator。參見API

 

55 我還要能夠排序。

  答:用java.util.TreeSet。例如:Set set = new TreeSet()。放進去的元素會自動排序。

  你需要為元素實現Comparable接口,還可能需要提供equals()方法,compareTo()方法,hashCode()方法。

 

56 但是我想給數組排序。

  答:java.util.Arrays類包含了sort等實用方法。

 

57 我想按不同方法排序。

  答:為每種方法定義一個實現了接口Comparator的類并和Arrays綜合運用。

 

58 Map有什么用?

  答:存儲key-value的關鍵字-值對,你可以通過關鍵字來快速存取相應的值。

 

59 set方法沒問題,但是get方法返回的是Object

  答:強制類型轉換成你需要的類型。參見45

 

60 我要獲得一個隨機數。

  答:使用java.util.Random類。

 

61 我比較兩個String總是false,但是它們明明都是"abc"

  答:比較String一定要使用equalsequalsIgnoreCase方法,不要使用 ==

  ==比較的是兩個引用(變量)是否指向了同一個對象,而不是比較其內容。

我的一個客戶不知道該選用Struts還是JSF。就像你預料的那樣,我通常會問:這2中框架之間有什么區別?當然,除了我的這個客戶外很多人都面臨這樣的選擇。

  

  總的來說,我建議在新項目中優先考慮JSF。雖然常常有一些商業上的因素迫使我們為現有的項目選擇了Struts,而且那些解決方案還有待考驗,但是,讓我們面對一個事實:JSFStruts好多了。

  

  下面是我選擇JSF而不選Struts的十大理由:

  

  1.Components(組件)

  2.Render Kits

  3.Renderers

  4.Value Binding Expressions(值綁定表達式)

  5.Event Model(事件模型)

  6.Extensibility(可擴展性)

  7.Managed Beans(Dependency Injection 依賴注入)

  8.POJO Action Methods

  9.JSF is the standard Java-based web app framework (JSFjava web應用程序的標準框架)

  10.There's only one Struts(只有一個Struts)

  

  10.There's only one Struts(只有一個Struts)

     Struts 是一個開源產品,然而JSF是一個標準。這個細節常常被新的JSF學習者忽略,其實這是顯而易見的,因為我們有多個JSF的實現。雖然JSF還很不成熟,但是我們已經有了2個優秀的JSF實現可以選擇:Sun的參考實現和ApacheMyFaces。另一方面,我們只有一個Struts

 

  9.JSF is the standard(JSF是標準)

      J2EE 5.0要提供一個JSF的實現,這表明JSF不久將會無處不在。這可能與你無關,但是和工具供應商密切相關。現在大概有50java web應用程序框架,工具供應商不會情愿去支持一個特別的框架,但是他們會毫不猶豫的去支持一個標準。而且不止供應商,開源項目也會迅速的聚集在JSF的四周,爭先恐后的去實現相同的功能。比如說,直到我們去實現本質上和ShaleTapestry差不多的視圖的時候,我才知道Facalets。(從長遠來看,我相信這種冗余是件好事,會給我們帶來好處)

 

  8.POJO Action Methods

      Struts的行為是和 StrutsAPI綁定在一起的,但是JSF的行為方法可以在POJPO中實現。這意味著你不用在表單和模型對象之間實現一個多余的行為層。順便說一下,在JSF里面沒有行為對象,行為在模型對象中實現。但是也請注意一點:如果你愿意你也可以生成與JSF獨立的行為對象。在Struts里面,你有 Form BeanAction BeanForm Bean包含數據而Action Bean包含邏輯。OO狂會想去合并前2者,在Struts你辦不到。但是在JSF中,你可以分開數據和邏輯,也可以合并到一個對象中,一切由你決定。

 

  7.Managed Beans(Dependency Injection 依賴注入)

      Spring一樣,JSF也使用了依賴注入(DJ)(或控制反轉(IoC))去實例化和初始化BeanStruts的確為你生成了Form BeanAction Bean,但是JSF可以為你生成各種各樣的Managed Bean

 

  6.Extensibility(可擴展性)

      這個很重要。JSF6個對象實現了這個框架的大部分功能,而且你可以很容易的用你自己的實現代替原有實現。比如你想加一個自定義參數在JSF表達式語言里面,或是添加一個自己的視圖控制器以便于區分組件和HTML。事實上Shale實現了上面的功能。如果你還沒有滿足,JSF提供了幾個地方你可以輕松的控制JSF的生命周期。Shale給你的會更多。

 

  5.Event Model(事件模型)

      JSF的事件模型使你可以對值改變,動作,JSF生命周期階段變換等作出反應。在JSF1.1中,那些事件都是在服務器端處理的,這肯定是一個缺陷,好在JSF2.0計劃支持客戶端事件,拭目以待吧。

 

  4.Value Binding Expressions(值綁定表達式)

      Struts 中,你負責把數據從Form傳遞到模型對象。你實現的Actionexecute方法是把Form作為一個參數。然后你再手動的把數據從Form Bean里面取出放到模型對象里面。你要為應用里面的每個Form做這些事情,然而在JSF里面,你只需像這樣:#{model.property} 就夠了,其他的交給JSF來處理。

 

  3.Renderers

      你有看過Struts的標簽的源代碼嗎?它直接生成HTMLJSF組件標簽什么都不生成,它和服務器上的一對component-renderer對應。Component維護組件狀態,rendered負責獲得視圖。重點是renderers是可插拔的,即你可以根據自己需求實現然后替代掉默認實現。比如說我在NFJS上面的Felix談話中舉例說明了怎么去實現一個自定義的label renderer。你只需要配置你的rendererJSF就會自動在你的應用程序里面使用他。

 

  2.Render Kits

      在幾年前我曾經有份Struts咨詢工作,我們必須同時支持瀏覽器和無線設備,非常痛苦。但是用JSF來完成那個任務非常容易,因為你可以生成你自己的render kit-為一種特定顯示技術的renderers的集合-然后配置到JSF里面。

 

  1.Components(組件)

      組件是StrutsJSF之間最大的區別。就像Swing一樣,JSF提供豐富的底層構件去開發組件然后添加到標準的組件集。那些底層構件讓你很容易的生成自己的組件并且和別人共享。現在我們到處都能看到自定義組件跳出來,比如說OracleADFMyFaces,兩者都提供了豐富的組件集,就像 javascript日歷,tree等等。當然,組件只是一部分。典型的是,組件都和一個獨立的renderer對應,這給我們帶來了真正的好處(看第3 條)。但是和JSF中的很多東西一樣,你不一定要墨守成規。只要你愿意,你可以實現render自己的組件,雖然這樣你會失去給組件加入別的 renderer的能力。

 

java版本的escapeunescape函數

  | |    [2006/02/27 15:33 | 分類: Java,J2EE | by NetFetch ]

Ad0.cn整理

 

java.net.URLDecoder / java.net.URLEncoder

對應:javascript encodeURI/decodeURI encodeURIComponent/decodeURIComponent

 

java版本的escapeunescape函數

對應:javascript escape/unescape

 

http://blog.ad0.cn

 

 

 

class EscapeUnescape{

  public static String escape (String src) {

    int i;

    char j;

    StringBuffer tmp = new StringBuffer();

    tmp.ensureCapacity(src.length()*6);

    for (i=0;i      j = src.charAt(i);

      if(Character.isDigit(j) || Character.isLowerCase(j) || Character.isUpperCase(j))

        tmp.append(j);

      else

        if(j<256){

          tmp.append(\"%\");

          if(j<16)

            tmp.append(\"0\");

          tmp.append(Integer.toString(j,16));

        } 

        else{

          tmp.append(\"%u\");

          tmp.append(Integer.toString(j,16));

        }

    }

    return tmp.toString();

  }

 

  public static String unescape (String src) {

    StringBuffer tmp = new StringBuffer();

    tmp.ensureCapacity(src.length());

    int lastPos=0,pos=0;

    char ch;

    while (lastPos      pos = src.indexOf(\"%\",lastPos);

      if(pos == lastPos)  {

        if(src.charAt(pos+1)=='u') {

          ch = (char)Integer.parseInt(src.substring(pos+2,pos+6),16);

          tmp.append(ch);

          lastPos = pos+6;

        }

        else{

          ch = (char)Integer.parseInt(src.substring(pos+1,pos+3),16);

          tmp.append(ch);

          lastPos = pos+3;

        }

      }

      else{

        if(pos == -1){

          tmp.append(src.substring(lastPos));

          lastPos=src.length();

        }

        else{

          tmp.append(src.substring(lastPos,pos));

          lastPos=pos;

        }

      }

    }

    return tmp.toString();

  }

 

  public static void main(String[] args) {

    String tmp=\"~!@#$%^&*()_+|=-,./?><;'][{}\"\";

    System.out.println(\"testing escape : \"+tmp);

    tmp =escape(tmp);

    System.out.println(tmp);

    System.out.println(\"testing unescape :\"+tmp);

    System.out.println(unescape(tmp));

  }

}

 

Struts+Spring+Hibernate練習(完整)

  | |    [2006/03/04 17:18 | 分類: Java,J2EE | by NetFetch ]

Struts+Spring+Hibernate練習(完整)

更多 Struts+Spring+Hibernate 相關的文章:

選擇JSF不選Struts的十大理由

Struts+Spring+Hibernate練習(完整)

struts+spring+hibernate之間的關系與差別()

史上最簡單的struts+spring+hibernate配置實例(修訂版)

 

Struts+Spring+Hibernate練習 工具:

    Eclipse3.1MyEclipse4.03Tomcat5.5.9Properties Editor插件、MySql4.1.13

新建工程:名稱為 login

創建Struts框架

 

創建 index.jsp,增加一鏈接指向 login.jsp

按下Ctrl + N,創建 login.jspLoginAction,使用MyEclipse的向導就可以了,記得選對正確的版本

 

ActionForm配置頁中選擇類型為動態Form,并繼承于DynaValidatorForm,新增兩個屬性:usernamepassword,在創建jsp文件打上鉤,將路徑改為/login.jsp,然后下一步,改LoginActionInput source改為/login.jsp,點擊完成

 

按下Ctrl + N 創建一個forwards,記得選對正確的版本

name 輸入 indexGo

路徑選擇 /index.jsp

 

配置validator

先添加Struts插件,使用向導

Plugin class : org.apache.struts.validator.ValidatorPlugIn

Property : pathnames

Value : /WEB-INF/validator-rules.xml,/WEB-INF/validation.xml

這里需要兩個xml文件

現在創建“validation.xml 文件

 

在這里說明一點,我使用MyEclipse創建的Struts框架中缺少了validator-rules.xml文件,需要動拷貝到WEB-INF目錄中

此文件可以到http://struts.apache.org/下載

 

文件內容如下:

 

編輯資源文件“ApplicationResources.properties

增加以下內容

prompt.username=User Name

prompt.password=User Password

errors.required={0} is required.

再創建中文件資源文件“ApplicationResources_zh_CN.properties

增加以下內容

prompt.username=用戶名稱

prompt.password=登錄密碼

errors.required={0} 必需填寫!

修改struts-config.xml文件

在以下位置增加綠色字體部份

 

          attribute="loginForm"

      input="/login.jsp"

      name="loginForm"

      path="/login"

      scope="request"

      validate="true"

      type="com.test.struts.action.LoginAction" />

這里說明提交的數據必需經過驗證,而驗證則是通過validator框架進行的。

 

修改LoginAction.java文件的execute方法,內容如下

public ActionForward execute(

  ActionMapping mapping,

  ActionForm form,

  HttpServletRequest request,

  HttpServletResponse response) {

  DynaValidatorForm loginForm = (DynaValidatorForm) form;

  String username=loginForm.getString("username");

  String password=loginForm.getString("password");

  if(username.equals("test")||password.equals("test")){

   return mapping.findForward("indexGo");

  }else{

   return mapping.getInputForward();

  }

}

現在再修改一下login.jsp

增加以下綠色字體部份:

其中charset=UTF-8 是使用UTF-8的字符編碼,這也是為了支持國際化而使用的。

 

好了,現在可以啟動Tomcat進行測試了

http://localhost/login/ 這里說明一下,我的Tomcat已經裝端口號改為80了,所以就不必使用http://localhost:8080/login/這樣的方法了。

 

如果不輸入任何數據而直接提交表單的話就可以看到效果了。

 

好了,如果沒有什么問題的話就繼續往下看吧,如果有問題的話就得往上看了^_^

 

現在創建Spring框架了,在這里我將Spring所有的包全部加載進去,因為我還不知道具體用到哪些類,全部加進去方便點

 

單選框選第二個,這樣的話所有的類庫和標簽等都將拷貝到項目中去,這樣方便以后的布署

下一步后是創建配置文件,將文件放到“WebRoot/WEB-INF”目錄下,文件名稱為“applicationContext.xml

 

 

配置struts-config.xml文件,添加(spring)的插件

 

修改LoginAction配置

 

原:

      attribute="loginForm"

      input="/login.jsp"

      name="loginForm"

      path="/login"

      scope="request"

      validate="true"

      type="com.test.struts.action.LoginAction" />

改為:

      attribute="loginForm"

      input="/login.jsp"

      name="loginForm"

      path="/login"

      scope="request"

      validate="true"

      type="org.springframework.web.struts.DelegatingActionProxy" />

綠色字體部份為修改內容

這里將使用spring的代理器來對Action進行控制

 

當提交到/login.do是將控制權交給了spring,然后由spring來決定是否轉回到strutsAction

現在來配置spring

綠色字體是關于轉交控制權的配置內容

 

屬性singleton="false",指明了Action 的實例獲取方式為每次重新創建。解決了Struts中令人詬病的線程安全問題(Struts中,由一個Action實例處理所有的請求,這就導致了類公用資源在并發請求中的線程同步問題。)(摘自spring開發指南)

 

這時如果你要進行測試也是可以的,不過為了省點時間就不進行測試了。

 

建立數據庫在 這里我使用的是mysql4.1.13

 

Create TABLE `user` (

  `ID` int(11) NOT NULL auto_increment,

  `USERNAME` varchar(50) NOT NULL default '',

  `PASSWORD` varchar(50) NOT NULL default '',

  PRIMARY KEY  (`ID`)

) ENGINE=MyISAM DEFAULT CHARSET=latin1;

 

添加記錄 insert into user (USERNAME,PASSWORD) values ('test','test')

 

創建Hibernate框架

在配置界面中配置數據庫的連接部份,重要的是點擊鏈接將jdbc拷貝到lib目錄中

使用MyEclipse的數據Database Explorer工具創建User.hmb.xmlAbstractUser.javaUser.java映射文件

創建完成后可以將自動生成的hibernate.cfg.xml刪除

 

創建UserDAO.javaUserDAOImp.java

UserDAO.java

 

public interface UserDAO {

 

   public abstract boolean isValidUser(String username, String password);

 

}

 

 

UserDAOImp.java

import java.util.List;

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import com.test.Hibernate.SessionFactory;

public class UserDAOImp extends HibernateDaoSupport implements UserDAO {

    private SessionFactory sessionFactory;

    private static String hql = "from User u where u.username=? ";

    public boolean isValidUser(String username, String password) {

       List userList = this.getHibernateTemplate().find(hql, username);

       if (userList.size() > 0) {

           return true;

       }

 

       return false;

    }

 

}

 

 

修改LoginAction.java文件,使用userDao的方法來進行用戶驗證

package com.test.struts.action;

 

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

 

import org.apache.struts.action.Action;

import org.apache.struts.action.ActionForm;

import org.apache.struts.action.ActionForward;

import org.apache.struts.action.ActionMapping;

import org.apache.struts.validator.DynaValidatorForm;

 

import com.test.UserDAO;

 

public class LoginAction extends Action {

private UserDAO userDAO;

public UserDAO getUserDAO() {

  return userDAO;

}

 

public void setUserDAO(UserDAO userDAO) {

  this.userDAO = userDAO;

}

 

public ActionForward execute(ActionMapping mapping, ActionForm form,

   HttpServletRequest request, HttpServletResponse response) {

  DynaValidatorForm loginForm = (DynaValidatorForm) form;

  // TODO Auto-generated method stub

  String username = (String) loginForm.get("username");

  String password = (String) loginForm.get("password");

  loginForm.set("password", null);

  if (userDAO.isValidUser(username,password)) {

   return mapping.findForward("indexGo");

  } else {

   return mapping.getInputForward();

  }

}

}

綠色字體為修改部份

 

現在剩下最后的spring配置了

 

   com.mysql.jdbc.Driver 

 

   jdbc:mysql://localhost/test

   

   root

   

   root

 

    com/test/Hibernate/User.hbm.xml

   

    org.hibernate.dialect.MySQLDialect

    true

   

    PROPAGATION_REQUIRED

    PROPAGATION_REQUIRED,readOnly

    PROPAGATION_REQUIRED,readOnly

 

 

現在可以進行測試了!

 

在編寫代碼有配置內容時一定要注意 hibernate hibernate3 ,這兩個包的名字就只差一個字,千萬不要有錯,否則找錯誤可是很難的。

 

 問題描述:

 

  為管理崗位業務培訓信息,建立3個表:

  S (S#,SN,SD,SA) S#,SN,SD,SA 分別代表學號、學員姓名、所屬單位、學員年齡

  C (C#,CN ) C#,CN 分別代表課程編號、課程名稱

  SC ( S#,C#,G ) S#,C#,G 分別代表學號、所選修的課程編號、學習成績

  1. 使用標準SQL嵌套語句查詢選修課程名稱為’稅收基礎’的學員學號和姓名

 

  --實現代碼:

 

  Select SN,SD FROM S Where [S#] IN( Select [S#] FROM C,SC Where C.[C#]=SC.[C#] AND CN=N'稅收基礎') 

 

  2. 使用標準SQL嵌套語句查詢選修課程編號為’C2的學員姓名和所屬單位

 

  --實現代碼:

 

  Select S.SN,S.SD FROM S,SC Where S.[S#]=SC.[S#] AND SC.[C#]='C2'

 

  3. 使用標準SQL嵌套語句查詢不選修課程編號為’C5的學員姓名和所屬單位

 

  --實現代碼:

 

  Select SN,SD FROM S Where [S#] NOT IN( Select [S#] FROM SC

 Where [C#]='C5')

 

  4. 使用標準SQL嵌套語句查詢選修全部課程的學員姓名和所屬單位

http://www.ad0.cn/netfetch/

  --實現代碼:

 

  Select SN,SD FROM S Where [S#] IN( Select [S#] FROM SC RIGHT JOIN

 C ON SC.[C#]=C.[C#] GROUP BY [S#] HAVING COUNT(*)=COUNT([S#]))

 

  5. 查詢選修了課程的學員人數

 

  --實現代碼:

 

  Select 學員人數=COUNT(DISTINCT [S#]) FROM SC

 

  6. 查詢選修課程超過5門的學員學號和所屬單位

 

  --實現代碼:

  Select SN,SD FROM S Where [S#] IN( Select [S#] FROM SC GROUP BY [S#] HAVING COUNT(DISTINCT [C#])>5)

      題目2

 

  問題描述:

  已知關系模式:

  S (SNO,SNAME) 學生關系。SNO 為學號,SNAME 為姓名

  C (CNO,CNAME,CTEACHER) 課程關系。CNO 為課程號,CNAME 為課程名,CTEACHER 為任課教師

  SC(SNO,CNO,SCGRADE) 選課關系。SCGRADE 為成績

  

1. 找出沒有選修過“李明”老師講授課程的所有學生姓名

 

  --實現代碼:

 

  Select SNAME FROM S Where NOT EXISTS( Select * FROM SC,C Where SC.CNO=C.CNO  AND CNAME='李明' AND SC.SNO=S.SNO)

 

  2. 列出有二門以上(含兩門)不及格課程的學生姓名及其平均成績

 

  --實現代碼:

 

  Select S.SNO,S.SNAME,AVG_SCGRADE=AVG(SC.SCGRADE)  FROM S,SC,(

 Select SNO FROM SC Where SCGRADE<60 GROUP BY SNO HAVING COUNT(DISTINCT CNO)>=2 )A Where S.SNO=A.SNO AND SC.SNO=A.SNO GROUP BY S.SNO,S.SNAME

 

  3. 列出既學過“1”號課程,又學過“2”號課程的所有學生姓名

 

  --實現代碼:

 

  Select S.SNO,S.SNAME FROM S,( Select SC.SNO FROM SC,C Where SC.CNO=C.CNO AND C.CNAME IN('1','2') GROUP BY SNO HAVING COUNT(DISTINCT CNO)=2 )SC Where S.SNO=SC.SNO

 

  4. 列出“1”號課成績比“2”號同學該門課成績高的所有學生的學號

 

  --實現代碼:

  Select S.SNO,S.SNAME FROM S,( Select SC1.SNO FROM SC SC1,C C1,SC SC2,C C2 Where SC1.CNO=C1.CNO AND C1.NAME='1' AND SC2.CNO=C2.CNO AND C2.NAME='2' AND SC1.SCGRADE>SC2.SCGRADE )SC Where S.SNO=SC.SNO

 

  5. 列出“1”號課成績比“2”號課成績高的所有學生的學號及其“1”號課和“2”號課的成績

 

  --實現代碼:

 

  Select S.SNO,S.SNAME,SC.[1號課成績],SC.[2號課成績] FROM S,(

 Select SC1.SNO,[1號課成績]=SC1.SCGRADE,[2號課成績]=SC2.SCGRADE FROM SC SC1,C C1,SC SC2,C C2 Where SC1.CNO=C1.CNO AND C1.NAME='1' AND SC2.CNO=C2.CNO AND C2.NAME='2' AND SC1.SCGRADE>SC2.SCGRADE

 )SC Where S.SNO=SC.SNO

 

 本文由用戶 yanguz123 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!