熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> JSP教程 >> 正文

Java及數據庫面試題 包含SSH,數據庫和Java基礎

2022-06-13   來源: JSP教程 

. 寫出從數據庫表Custom中查詢NoNameNumNum並將Name以姓名顯示計算出的和以總和顯示的SQLSELECT No Name AS 姓名 Num Num(Num+Num) AS 總和
FROM Custom
何為事務處理談談你對它的理解事務處理是指一個單元的工作這些工作要麼全做要麼全部不做作為一個邏輯單元必須具備四個屬性自動性一致性獨立性和持久性自動性是指事務必須是一個自動的單元工作要麼執行全部數據的修改要麼全部數據的修改都不執行一致性是指當事務完成時必須使所有數據都具有一致的狀態在關系型數據庫中所有的規則必須應用到事務的修改上以便維護所有數據的完整性所有的內部數據結構在事務結束之後必須保證正確獨立性是指並行事務的修改必須與其他並行事務的修改相互獨立一個事務看到的數據要麼是另外一個事務修改這些事務之前的狀態要麼是第二個事務已經修改完成的數據但是這個事務不能看到正在修改的數據
常用的數據結構有哪些?請枚舉一些(不少於個)鏈表堆棧二叉樹隊列集合
什麼是OOP?什麼是類?請對比類和對象實例之間的關系OOP是Object_oriented Programming(面向對象編程)的縮寫這主要是為了區別於以前的面向過程的程序設計!指的是用對象的觀點來組織與構建系統它綜合了功能抽象和數據抽象這樣可以減少數據之間的耦合性和代碼的出錯幾率使用面向對象編程技術可以使得軟件開發者按照現實世界裡人們思考問題的模式編寫代碼可以讓軟件開發者更好地利用代碼直接表達現實中存在的對象將問題空間直接映射到解空間!類即class 在面向對象的程序設計中專門用來表示用戶定義的抽象數據類型(user_defined abstract type)它將具有相同狀態操作和訪問機制的多個對象進行了抽象類具有繼承數據隱藏和多態三種主要特性利用類的這三種特性可以更好地表示現實世界中事物類是同一類對象實例的共性的抽象對象是類的實例化對象通常作為計算機模擬思維表示真實世界的抽象一個對象就像一個軟件模塊可以為用戶提供一系列的服務&#;可以改變對象的狀態測試傳遞消息等類定義了對象的實現細節或數據結構類是靜態的對象是動態的對象可以看作是運行中的類類負責產生對象可以將類當成生產對象的工廠(Object factory)
有一組數字(請編程排序(升降序皆可)語言不限算法不限但須注明是何種算法//下面使用簡單的冒泡法進行排序!
#include &#;iostreamh&#; template class CBubble{
private: type *pArray; int size;public:CBubble(type a[]int sizeArray);void sort();void display();};
template CBubble::CBubble(type a[]int sizeArray)
{ pArray=a; size=sizeArray/sizeof(type);}
templatevoid CBubble::sort(){ type temp; for(int i=;ipArray[j+1])//升序{temp=pArray[j+1];pArray[j+1]=pArray[j];pArray[j]=temp;}}
templatevoid CBubble::display(){for(int i=0;i void main(void){int a[]={3,10,6,8,98,22};CBubble intData(a,sizeof(a));cout<<"The original data are :"< }
SQL/index.html //書

connection connconn.setAuto(false)//表示手動提交conn.commit// 提交conn.rollback();//事務回滾
-內聯接use pubsselect a.au_fname, a.au_lname, p.pub_name from authors a inner join publishers p on a.city = p.city order by p.pub_name asc, a.au_lname asc, a.au_fname asc
--左外聯接use pubs select a.au_fname, a.au_lname, p.pub_name from authors a left join publishers p
on a.city = p.city order by p.pub_name asc, a.au_lname asc, a.au_fname asc
-使用子查詢USE pubs GO SELECT distinct pub_name FROM publishers WHERE pub_id IN (SELECT pub_idFROM titlesWHERE type = 'business') GO
--如果平均價格少於 $30,WHILE 循環就將價格加倍,然後選擇最高價。tW.WIngwiT.cOM
--如果最高價少於或等於 $50,WHILE 循環重新啟動並再次將價格加倍。
--該循環不斷地將價格加倍直到最高價格超過 $50 USE pubs GO
WHILE (SELECT AVG(price) FROM titles) < $30
BEGIN
UPDATE titles
SET price = price * 2
SELECT MAX(price) FROM titles
IF (SELECT MAX(price) FROM titles) > $50
BREAK
ELSE
CONTINUE
END
—如果平均價格少於 $30,WHILE 循環就將價格加倍,然後選擇最高價。
–如果最高價少於或等於 $50,WHILE 循環重新啟動並再次將價格加倍。
–該循環不斷地將價格加倍直到最高價格超過 $50
USE pubs
GO
WHILE (SELECT AVG(price) FROM titles) < $30
BEGIN
UPDATE titles
SET price = price * 2
SELECT MAX(price) FROM titles
IF (SELECT MAX(price) FROM titles) > $50
BREAK
ELSE
CONTINUE
END
CREATE PROCEDURE au_info
@lastname varchar(40),
@firstname varchar(20)
AS
SELECT au_lname, au_fname, title, pub_name
FROM authors a INNER JOIN titleauthor ta
ON a.au_id = ta.au_id INNER JOIN titles t
ON t.title_id = ta.title_id INNER JOIN publishers p
ON t.pub_id = p.pub_id
WHERE au_fname = @firstname
AND au_lname = @lastname
GO
EXECUTE au_info ‘Dull’, ‘Ann’–或者
EXECUTE au_info @lastname = ‘Dull’, @firstname = ‘Ann’–創建存儲過程CREATE PROCEDURE titles_sum @TITLE varchar(40),@SUM money OUTPUT
AS
SELECT @SUM = SUM(price)
FROM titles
WHERE title LIKE @TITLE
GO
DECLARE @TOTALCOST money
EXECUTE titles_sum ‘The%’, @TOTALCOST OUTPUT
select @TOTALCOST
go
CREATE PROCEDURE Oakland_authors
AS
SELECT au_fname, au_lname, address, city, zip
FROM authors
WHERE city = ‘Oakland’
and state = ‘CA’
ORDER BY au_lname, au_fname
GO
–sp_helptext Oakland_authors
ALTER PROCEDURE Oakland_authors
AS
SELECT au_fname, au_lname, address, city, zip
FROM authors
WHERE state = ‘CA’
ORDER BY au_lname, au_fname
GO
–sp_helptext Oakland_authors
–提交事務後,所有書籍支付的版稅增加 10%。
begin transaction MyTransaction
update roysched
set royalty = royalty * 1.10
commit transaction MyTransaction
–rollback transaction MyTransaction
select royalty from roysched
–select @@trancount
–1.創建試驗實驗表
create table temptrigger
( id_temp varchar(2) not null primary key,
temp_name varchar(10) null,
temp_age int null)go
insert temptrigger values(’01′,’張三’,’10′)
insert temptrigger values(’02′,’李四’,’11′)
insert temptrigger values(’03′,’王五’,’12′)
insert temptrigger values(’04′,’趙六’,’11′)
select * from temptrigger go
–2.創建insert , update觸發器
create trigger temptrigger_modify
on temptrigger
for insert,update
as
begin
if (select temp_age from inserted) > 15
begin
rollback transaction
print ‘年齡不能超過15歲!’
end
end
–insert temptrigger values(’04′,’大朋’,’17′)
–insert temptrigger values(’05′,’大朋’,’17′)
–insert temptrigger values(’05′,’大朋’,’14′)
–update temptrigger set temp_age=’18′ where id_temp = ’01′
–update temptrigger set temp_age=’9′ where id_temp = ’01′
-3.創建delete 觸發器–drop trigger temptrigger_delete
create trigger temptrigger_delete
on temptrigger
for delete
as
begin
print @@rowcount
if @@rowcount > 1
begin
rollback transaction
print ‘一次刪除記錄不能多於1條’
end
end
–delete from temptrigger
–delete from temptrigger where id_temp=’01′
–創建聚集索引create clustered index clindx_titleid on roysched(title_id)–sp_help roysched
–創建非聚集索引create nonclustered index unclindx_titleid on roysched(title_id)–sp_help roysched
–查看索引統計dbcc show_statistics(roysched,titleidind)
–更新索引統計update statistics authors
–重建索引dbcc dbreindex(‘roysched’,unclindx_titleid)
–刪除索引drop index roysched.unclindx_titleid-sp_help roysched
1–創建ssn(社會保險號)的基於varchar的自定義數據類型。
–用於存儲11位社會保險號(999-99-999)的列。該列不能
–為null。use pubs exec sp_addtype ssn , ‘varchar(11)’ , ‘NOT NULL’
–查看創建的數據類型–sp_help ssn
–使用創建的數據類型create table mytable( myid varchar(2) primary key, myssn ssn)
4-刪除創建的數據類型–drop table mytable–exec sp_droptype ssn
?批是包含一個或多個 Transact-SQL 語句的組,從應用程序一次性地發送到 Microsoft SQL Server 執行。批作為一個整體執行,以GO命令結束。批處理是客戶端作為一個單元發出的一個或多個 SQL 語句的集合。每個批處理編譯為一個執行計劃。
觸發器?觸發器是在對表進行插入、更新或刪除操作時自動執行的存儲過程?觸發器通常用於強制業務規則?觸發器可以確保數據的完整性和一致性
事務是用戶定義的一個操作序列,這些操作要麼全做要麼全不做,是一個不可分割的工作單位(構成單一邏輯工作單元的操作集合)如果某一事務成功,則在該事務中進行的所有數據更改均會提交,成為數據庫中的永久組成部分。
如果事務遇到錯誤且必須取消或回滾,則所有數據更改均被清除
?鎖 是在多用戶環境中對數據訪問的限制封鎖就是事務 T 在對某個數據對象(如表、記錄等)操作之前,先向系統發出請求,對其加鎖。加鎖後事務 T 就對該數據對象有了一定的控制,在事務T釋放它的鎖之前,其它的事務不能更新此數據對象。(鎖蘊含的基本概念是用戶需要對表的排它訪問)?從程序員的角度看:分為樂觀鎖和悲觀鎖。樂觀鎖:完全依靠數據庫來管理鎖的工作。悲觀鎖:程序員自己管理數據或對象上的鎖處理。
子查詢:一個 SELECT 語句嵌套在另一個 SELECT 語句中。
?索引?是一個數據庫對象,它是某個表中一列或若干列值的集合和相應的指向表中物理標識這些值的數據頁的邏輯指針清單,然後根據指定的排序次序排列這些指針 ?優點提高查詢執行的速度。 強制實施數據的唯一性。 提高表之間聯接的速度。 缺點 存儲索引要占用磁盤空間。數據修改需要更長的時間,因為索引也要更新。
?視圖?是一種虛擬表,通常是作為來自一個或多個表 的行或列的子集創建的。?視圖本質上講,就是保存在數據庫中的select查詢?視圖並不是數據庫中存儲的數據值的集合。?對最終用戶的好處– 結果更容易理解– 獲得數據更容易
?對開發人員的好處– 限制數據檢索更容易– 維護應用程序更方便
存儲過程?使用一個名稱存儲的預編譯T-SQL語句和流程控制語句的集合?由數據庫開發人員或數據庫管理員編寫
?用來執行管理任務或應用復雜的業務規則 優點?執行速度更快?首次運行時,進行優化和編譯得到執行計劃並將該計劃存儲在系統表中,以後直接運行。?實現多個程序共享應用程序邏輯?組件式編程?能夠屏蔽數據庫的結構,實現更高的安全性
?減少網絡流通量
數據庫設計和建模必要性?好的數據庫結構有利於:-節省數據的存儲空間-能夠保證數據的完整性-方便進行數據庫應用系統的開發?設計不好的數據庫結構將導致-數據冗余、存儲空間浪費-內存空間浪費
不管數據庫的大小和復雜程度如何,可以用下列基本步驟來設計數據庫:–收集信息–標識對象–設計數據模型–標識每個對象 存儲的信息類型–標識對象之間的關系
?數據模型是一種標識實體類型及其實體間聯系的模型。典型的數據模型由網狀模型、層次模型和關系模型。什麼是規范化從關系數據庫的表中,除去冗余數據的過程稱為規范化。?精簡數據庫的結構?從表中刪除冗余的列?標識所有依賴於其它數據的數據
三級范式第一范式的定義: 如果一個表中沒有重復組(即行與列的交叉點上只有一個值,而不是一組值),則這個表屬於第一范式(常記成1NF)。簡而言之:”每一字段只存儲一個值”。例如:職工號,姓名,電話號碼組成一個表(一個人可能有一個辦公室電話 和一個家裡電話號碼) 第二范式的定義:如果一個表屬於1NF,任何屬性只依賴於關鍵字,則這個表屬於第二范式(常記成2NF )。簡而言之:必須先符合1NF的條件,且每一行都能被唯一的識別。 將1NF轉換成2NF的方法是添加主鍵。學號,課程名,成績第三范式的定義:如果一個表屬於2NF,且不包含傳遞依賴性,則這個表是第三范式(常記成3NF)。滿足3NF的表中不包含傳遞依賴。簡而言之:沒有一個非關鍵屬性依賴於另一個非關鍵屬性。學號,課程號,成績,學分學號,姓名,所在系,系名稱,系地址
什麼是類與對象?
所謂對象就是真實世界中的實體,對象與實體是一一對應的,也就是說現實世界中每一個實體都是一個對象,它是一種具體的概念。
類是具備某些共同特征的實體的集合,它是一種抽象的概念,用程序設計的語言來說,類是一種抽象的數據類型,它是對所具有相同特征實體的抽象。
屬性與方法?
不同對象具有相同特點,就可能抽象為一定的類,那麼這些特點基本上可以分為兩類,一類是描述對象靜態狀態的,就是對象的屬性,在程序設計中,可以稱之為變量;另一類是描述對象的動作,就是對象的方法,在程序設計中我們稱之為函數。屬性和方法是一個對象所具備的兩大基本要素,也是我們後面編程工作的核心。
什麼是封裝?
只要有足夠的方法,就沒必要直接去操作對象屬性,只要調用這些方法就可以實現要完成的任務,這種現象稱為封裝,它通過對象方法對其屬性的操作把對象屬性封裝在一個對象內部,對象與外界打交道全部通過其自身的方法來實現,有效的把對象屬性隱藏在對象內部。
編寫 java文件的注意事項?
在記事本中編寫java文件,在保存時一定要把文件名和擴展名用雙引號括起來,否則將默認保存為文本文件,如果要保存的java 文件名為Program1.java,則在保存時在文件名文本框中一定要輸入”Program1.java”。
如何編譯java程序?
單擊開始|運行命令,在命令行上輸入cmd,按回車鍵(在 window98中輸入command,按回車鍵),即可打開一個命令窗口,將目錄轉換到編寫java源程序所在的目錄,輸入javac filename.java
如何執行java程序?
同樣在命令窗口中輸入java filename,
基本數據類型?
Java的數據類型可以劃分為4大類:整數,浮點數,字符型,布爾型。其中整數可以劃分為:byte,short,int,long.浮點數可以劃分為float,double.

常見struts面試題(2009-02-17 09:10:33)
標簽:雜談
分類:飯碗

1. Struts的工作原理
在Struts中,用戶的請求一般以*.do作為請求服務名,所有的*.do請求均被指向ActionSevlet, ActionSevlet根據Struts-config.xml中的配置信息,將用戶請求封裝成一個指定名稱的FormBean,並將此 FormBean傳至指定名稱的ActionBean,由ActionBean完成相應的業務操作,如文件操作,數據庫操作等。每一個*.do均有對應的 FormBean名稱和ActionBean名稱,這些在Struts-config.xml中配置。

2. Struts優點與缺點
Struts是開源軟件,使開發者能更深入的了解其內部實現機制。
Struts 優點:業界”標准”(很多成功案例),學習資源豐富。
Struts的優點主要集中體現在兩個方面:Taglib和頁面導航。
a、利用Struts提供的taglib可以大大節約開發時間。
b、維護擴展比較方便。通過一個配置文件,即可把握整個系統各部分之間的聯系,這對於後期的維護有著莫大的好處。
c、表現與邏輯分離
d、表單驗證解決了請求數據的驗證問題,增強了系統健壯性。
e、便於團隊開發

Struts缺點:a、大量的使用標簽,對於初學者難度較大。
b、ActionForms使用不便、無法進行單元測試(StrutsTestCase只能用於集成)

3. Struts提供了幾個標簽庫?都是什麼標簽庫?
Struts提供了五個標簽庫,即:HTML、Bean、Logic、Template和Nested。

HTML 標簽 用來創建能夠和Struts 框架和其他相應的HTML 標簽交互的HTML輸入表單
Bean 標簽 在訪問JavaBeans 及其屬性,以及定義一個新的bean 時使用
Logic 標簽 管理條件產生的輸出和對象集產生的循環
Template 標簽 隨著Tiles框架包的出現,此標記已開始減少使用
Nested 標簽 增強對其他的Struts 標簽的嵌套使用的能力

< Html:form>, < html:submit>, < Html:button>, ,
, , , , , … 參考: struts Logic標簽說明
, , ,

4. Tiles框架是什麼?
Tiles框架為創建Web頁面提供了一種模板機制,它能將網頁的布局和內容分離。

5.談談HashMap和Hashtable的區別。
答: HashMap是輕量級的(線程不安全的,效率高的)集合,Hashtable是重量級的
(線程安全的,效率低的)集合。
都屬於Map接口的類,實現了將惟一鍵映射到特定的值上。
HashMap 類沒有分類或者排序。它允許一個 null 鍵和多個 null 值。
Hashtable 類似於 HashMap,但是不允許 null 鍵和 null 值。它也比 HashMap 慢,
因為它是同步的。

6.什麼是中間件?
中間件就是程序中可織入的,可重用的,與業務邏輯無關的各種組件。
中間件(middleware)是基礎軟件的一大類,屬於可復用軟件的范疇。顧名思義,中
間件處於操作系統軟件與用戶的應用軟件的中間。中間件在操作系統、網絡和數據庫之上,
應用軟件的下層,總的作用是為處於自己上層的應用軟件提供運行與開發的環境,幫助
用戶靈活、高效地開發和集成復雜的應用軟件。
  在眾多關於中間件的定義中,比較普遍被接受的是IDC表述的:中間件是一種獨立
的系統軟件或服務程序,分布式應用軟件借助這種軟件在不同的技術之間共享資源,中
間件位於客戶機服務器的操作系統之上,管理計算資源和網絡通信。
分類:數據訪問中間件,遠程調用中間件,消息中間件,交易中間件,對象中間件。
舉例:
1,RMI(Remote Method Invocations, 遠程調用)
第 3 頁 共 33 頁
2,Load Balancing(負載均衡,將訪問負荷分散到各個服務器中)
3,Transparent Fail-over(透明的故障切換)
4,Clustering(集群,用多個小的服務器代替大型機)
5,Back-end-Integration(後端集成,用現有的、新開發的系統如何去集成遺留的系統)
6,Transaction事務(全局/局部)全局事務(分布式事務)局部事務(在同一數據庫
聯接內的事務)
7,Dynamic Redeployment(動態重新部署,在不停止原系統的情況下,部署新的系統)
8,System Management(系統管理)
9,Threading(多線程處理)
10,Message-oriented Middleware面向消息的中間件(異步的調用編程)
11,Component Life Cycle(組件的生命周期管理)
12,Resource pooling(資源池)
13,Security(安全)
14,Caching(緩存)

7.你對MVC的理解,MVC有什麼優缺點?結合Struts,說明在一個Web應用如何去使用?
答:
MVC設計模式(應用觀察者模式的框架模式)
M: Model(Business process layer),模型,操作數據的業務處理層,並獨立於表現層
(Independent of presentation)。
V: View(Presentation layer),視圖,通過客戶端數據類型顯示數據,並回顯模型層的執
行結果。
C: Controller(Control layer),控制器,也就是視圖層和模型層橋梁,控制數據的流向,
接受視圖層發出的事件,並重繪視圖
MVC框架的一種實現模型
模型二(Servlet-centric):
JSP+Servlet+JavaBean,以控制為核心,JSP只負責顯示和收集數據,Sevlet,連接視圖
和模型,將視圖層數據,發送給模型層,JavaBean,分為業務類和數據實體,業務類處
理業務數據,數據實體,承載數據,基本上大多數的項目都是使用這種MVC的實現模式。
StrutsMVC框架(Web application frameworks)
Struts是使用MVC的實現模式二來實現的,也就是以控制器為核心。
Struts提供了一些組件使用MVC開發應用程序:
Model:Struts 沒有提供model 類。這個商業邏輯必須由Web 應用程序的開發者以
JavaBean或EJB的形式提供
第 1 頁 共 33 頁
View:Struts提供了action form創建form bean, 用於在controller和view間傳輸數
據。此外,Struts提供了自定義JSP標簽庫,輔助開發者用JSP創建交互式的以表單為基
礎的應用程序,應用程序資源文件保留了一些文本常量和錯誤消息,可轉變為其它語言,
可用於JSP中。
Controller:Struts提供了一個核心的控制器ActionServlet,通過這個核心的控制器來
調用其他用戶注冊了的自定義的控制器Action,自定義Action需要符合Struts的自定
義Action規范,還需要在struts-config.xml的特定配置文件中進行配置,接收JSP輸入
字段形成Action form,然後調用一個Action控制器。Action控制器中提供了model的邏
輯接口。

8.類的核心特性有哪些?
類具有封裝性、繼承性和多態性。
封裝性:
類的封裝性為類的成員提供公有、缺省、保護和私有等多級訪問權限,目的是隱藏類
中的私有變量和類中方法的實現細節。
繼承性:
類的繼承性提供從已存在的類創建新類的機制,繼承(inheritance)使一個新類自
動擁有被繼承類(父類)的全部成員。
多態性:
類的多態性提供類中方法執行的多樣性,多態性有兩種表現形式:重載和覆蓋。

9.、請說出幾個常用的異常類
答:NullpointException(空指針異常)
ClassNotFoundException(類找不到異常)
ClassCastException(類型轉換異常)
IllegalArgumentException(非法參數異常)
ArithmeticException(算術異常)
NumberFormatException(數據格式異常)
IndexOutOfBoundsException(數組下標越界異常)
IllegalStateException(非法語句異常)

Hibernate工作原理及為什麼要用?
原理:
1.讀取並解析配置文件
2.讀取並解析映射信息,創建SessionFactory
3.打開Sesssion
4.創建事務Transation
5.持久化操作
6.提交事務
7.關閉Session
8.關閉SesstionFactory

為什麼要用:
1. 對JDBC訪問數據庫的代碼做了封裝,大大簡化了數據訪問層繁瑣的重復性代碼。

2. Hibernate是一個基於JDBC的主流持久化框架,是一個優秀的ORM實現。他很大程度的簡化DAO層的編碼工作

3. hibernate使用Java反射機制,而不是字節碼增強程序來實現透明性。

4. hibernate的性能非常好,因為它是個輕量級框架。映射的靈活性很出色。它支持各種關系數據庫,從一對一到多對多的各種復雜關系。

2. Hibernate是如何延遲加載?
1. Hibernate2延遲加載實現:a)實體對象 b)集合(Collection)
2. Hibernate3 提供了屬性的延遲加載功能
當Hibernate在查詢數據的時候,數據並沒有存在與內存中,當程序真正對數據的操作時,對象才存在與內存中,就實現了延遲加載,他節省了服務器的內存開銷,從而提高了服務器的性能。

3.Hibernate中怎樣實現類之間的關系?(如:一對多、多對多的關系)

類與類之間的關系主要體現在表與表之間的關系進行操作,它們都市對對象進行操作,我們程序中把所有的表與類都映射在一起,它們通過配置文件中的many-to-one、one-to-many、many-to-many、

4. 說下Hibernate的緩存機制
1. 內部緩存存在Hibernate中又叫一級緩存,屬於應用事物級緩存
2. 二級緩存:
a) 應用及緩存
b) 分布式緩存
條件:數據不會被第三方修改、數據大小在可接受范圍、數據更新頻率低、同一數據被系統頻繁使用、非 關鍵數據
c) 第三方緩存的實現

5. Hibernate的查詢方式
Sql、Criteria,object comptosition
Hql:
1、 屬性查詢
2、 參數查詢、命名參數查詢
3、 關聯查詢
4、 分頁查詢
5、 統計函數

6. 如何優化Hibernate?
1.使用雙向一對多關聯,不使用單向一對多
2.靈活使用單向一對多關聯
3.不用一對一,用多對一取代
4.配置對象緩存,不使用集合緩存
5.一對多集合使用Bag,多對多集合使用Set
6. 繼承類使用顯式多態
7. 表字段要少,表關聯不要怕多,有二級緩存撐腰

7. Struts工作機制?為什麼要使用Struts?
工作機制:
Struts的工作流程:
在web應用啟動時就會加載初始化ActionServlet,ActionServlet從
struts-config.xml文件中讀取配置信息,把它們存放到各種配置對象
當ActionServlet接收到一個客戶請求時,將執行如下流程.
-(1)檢索和用戶請求匹配的ActionMapping實例,如果不存在,就返回請求路徑無效信息;
-(2)如果ActionForm實例不存在,就創建一個ActionForm對象,把客戶提交的表單數據保存到ActionForm對象中;
-(3)根據配置信息決定是否需要表單驗證.如果需要驗證,就調用ActionForm的validate()方法;
-(4)如果ActionForm的validate()方法返回null或返回一個不包含ActionMessage的ActuibErrors對象, 就表示表單驗證成功;
-(5)ActionServlet根據ActionMapping所包含的映射信息決定將請求轉發給哪個Action,如果相應的 Action實例不存在,就先創建這個實例,然後調用Action的execute()方法;
-(6)Action的execute()方法返回一個ActionForward對象,ActionServlet在把客戶請求轉發給 ActionForward對象指向的JSP組件;
-(7)ActionForward對象指向JSP組件生成動態網頁,返回給客戶;

為什麼要用:
JSP、Servlet、JavaBean技術的出現給我們構建強大的企業應用系統提供了可能。但用這些技術構建的系統非常的繁亂,所以在此之上,我們需要一個規則、一個把這些技術組織起來的規則,這就是框架,Struts便應運而生。

基於Struts開發的應用由3類組件構成:控制器組件、模型組件、視圖組件

8. Struts的validate框架是如何驗證的?
在struts配置文件中配置具體的錯誤提示,再在FormBean中的validate()方法具體調用。

9. 說下Struts的設計模式
MVC模式: web應用程序啟動時就會加載並初始化ActionServler。用戶提交表單時,一個配置好的ActionForm對象被創建,並被填入表單相應的數據,ActionServler根據Struts-config.xml文件配置好的設置決定是否需要表單驗證,如果需要就調用ActionForm的 Validate()驗證後選擇將請求發送到哪個Action,如果Action不存在,ActionServlet會先創建這個對象,然後調用 Action的execute()方法。Execute()從ActionForm對象中獲取數據,完成業務邏輯,返回一個ActionForward對象,ActionServlet再把客戶請求轉發給ActionForward對象指定的jsp組件,ActionForward對象指定的jsp生成動態的網頁,返回給客戶。

10. spring工作機制及為什麼要用?
1.spring mvc所有的請求都提交給DispatcherServlet,它會委托應用系統的其他模塊負責對請求進行真正的處理工作。
2.DispatcherServlet查詢一個或多個HandlerMapping,找到處理請求的Controller.
3.DispatcherServlet請求提交到目標Controller
4.Controller進行業務邏輯處理後,會返回一個ModelAndView
5.Dispathcher查詢一個或多個ViewResolver視圖解析器,找到ModelAndView對象指定的視圖對象
6.視圖對象負責渲染返回給客戶端。

為什麼用:
{AOP 讓開發人員可以創建非行為性的關注點,稱為橫切關注點,並將它們插入到應用程序代碼中。使用 AOP 後,公共服務 (比如日志、持久性、事務等)就可以分解成方面並應用到域對象上,同時不會增加域對象的對象模型的復雜性。
IOC 允許創建一個可以構造對象的應用環境,然後向這些對象傳遞它們的協作對象。正如單詞 倒置 所表明的,IOC 就像反 過來的 JNDI。沒有使用一堆抽象工廠、服務定位器、單元素(singleton)和直接構造(straight construction),每一個對象都是用其協作對象構造的。因此是由容器管理協作對象(collaborator)。
Spring即使一個AOP框架,也是一IOC容器。 Spring 最好的地方是它有助於您替換對象。有了 Spring,只要用 JavaBean 屬性和配置文件加入依賴性(協作對象)。然後可以很容易地在需要時替換具有類似接口的協作對象。}

Spring 框架是一個分層架構,由 7 個定義良好的模塊組成。Spring 模塊構建在核心容器之上,核心容器定義了創建、配置和管理 bean 的方式,如圖 1 所示。

組成 Spring 框架的每個模塊(或組件)都可以單獨存在,或者與其他一個或多個模塊聯合實現。每個模塊的功能如下:

☆ 核心容器:核心容器提供 Spring 框架的基本功能。核心容器的主要組件是 BeanFactory,它是工廠模式的實現。BeanFactory 使用控制反轉 (IOC)模式將應用程序的配置和依賴性規范與實際的應用程序代碼分開。

☆ Spring 上下文:Spring 上下文是一個配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企業服務,例如 JNDI、EJB、電子郵件、國際化、校驗和調度功能。

☆ Spring AOP:通過配置管理特性,Spring AOP 模塊直接將面向方面的編程功能集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何對象支持 AOP。Spring AOP 模塊為基於 Spring 的應用程序中的對象提供了事務管理服務。通過使用 Spring AOP,不用依賴 EJB 組件,就可以將聲明性事務管理集成到應用程序中。

☆ Spring DAO:JDBC DAO 抽象層提供了有意義的異常層次結構,可用該結構來管理異常處理和不同數據庫供應商拋出的錯誤消息。異常層次結構簡化了錯誤處理,並且極大地降低了需要編寫的異常代碼數量(例如打開和關閉連接)。Spring DAO 的面向 JDBC 的異常遵從通用的 DAO 異常層次結構。

☆ Spring ORM:Spring 框架插入了若干個 ORM 框架,從而提供了 ORM 的對象關系工具,其中包括 JDO、Hibernate 和 iBatis SQL Map。所有這些都遵從 Spring 的通用事務和 DAO 異常層次結構。

☆ Spring Web 模塊:Web 上下文模塊建立在應用程序上下文模塊之上,為基於 Web 的應用程序提供了上下文。所以,Spring 框架支持與 Jakarta Struts 的集成。Web 模塊還簡化了處理多部分請求以及將請求參數綁定到域對象的工作。

☆ Spring MVC 框架:MVC 框架是一個全功能的構建 Web 應用程序的 MVC 實現。通過策略接口,MVC 框架變成為高度可配置的,MVC 容納了大量視圖技術,其中包括 JSP、Velocity、Tiles、iText 和 POI。

Spring 框架的功能可以用在任何 J2EE 服務器中,大多數功能也適用於不受管理的環境。Spring 的核心要點是:支持不綁定到特定 J2EE 服務的可重用業務和數據訪問對象。毫無疑問,這樣的對象可以在不同 J2EE 環境 (Web 或 EJB)、獨立應用程序、測試環境之間重用。

IOC 和 AOP

控制反轉模式(也稱作依賴性介入)的基本概念是:不創建對象,但是描述創建它們的方式。在代碼中不直接與對象和服務連接,但在配置文件中描述哪一個組件需要哪一項服務。容器(在 Spring 框架中是 IOC 容器) 負責將這些聯系在一起。

在典型的 IOC 場景中,容器創建了所有對象,並設置必要的屬性將它們連接在一起,決定什麼時間調用方法。下表列出了 IOC 的一個實現模式。

Spring 框架的 IOC 容器采用類型 2 和類型3 實現。

面向方面的編程

面向方面的編程,即 AOP,是一種編程技術,它允許程序員對橫切關注點或橫切典型的職責分界線的行為(例如日志和事務管理)進行模塊化。AOP 的核心構造是方面,它將那些影響多個類的行為封裝到可重用的模塊中。

AOP 和 IOC 是補充性的技術,它們都運用模塊化方式解決企業應用程序開發中的復雜問題。在典型的面向對象開發方式中,可能要將日志記錄語句放在所有方法和 Java 類中才能實現日志功能。在 AOP 方式中,可以反過來將日志服務模塊化,並以聲明的方式將它們應用到需要日志的組件上。當然,優勢就是 Java 類不需要知道日志服務的存在,也不需要考慮相關的代碼。所以,用 Spring AOP 編寫的應用程序代碼是松散耦合的。

AOP 的功能完全集成到了 Spring 事務管理、日志和其他各種特性的上下文中。

IOC 容器

Spring 設計的核心是 org.springframework.beans 包,它的設計目標是與 JavaBean 組件一起使用。這個包通常不是由用戶直接使用,而是由服務器將其用作其他多數功能的底層中介。下一個最高級抽象是 BeanFactory 接口,它是工廠設計模式的實現,允許通過名稱創建和檢索對象。BeanFactory 也可以管理對象之間的關系。

BeanFactory 支持兩個對象模型。

□ 單態 模型提供了具有特定名稱的對象的共享實例,可以在查詢時對其進行檢索。Singleton 是默認的也是最常用的對象模型。對於無狀態服務對象很理想。

□ 原型 模型確保每次檢索都會創建單獨的對象。在每個用戶都需要自己的對象時,原型模型最適合。

bean 工廠的概念是 Spring 作為 IOC 容器的基礎。IOC 將處理事情的責任從應用程序代碼轉移到框架。正如我將在下一個示例中演示的那樣,Spring 框架使用 JavaBean 屬性和配置數據來指出必須設置的依賴關系。

BeanFactory 接口

因為 org.springframework.beans.factory.BeanFactory 是一個簡單接口,所以可以針對各種底層存儲方法實現。最常用的 BeanFactory 定義是 XmlBeanFactory,它根據 XML 文件中的定義裝入 bean,如清單 1 所示。

清單 1. XmlBeanFactory

BeanFactory factory = new XMLBeanFactory(new FileInputSteam(“mybean.xml”));

在 XML 文件中定義的 Bean 是被消極加載的,這意味在需要 bean 之前,bean 本身不會被初始化。要從 BeanFactory 檢索 bean,只需調用 getBean() 方法,傳入將要檢索的 bean 的名稱即可,如清單 2 所示。

清單 2. getBean()

MyBean mybean = (MyBean) factory.getBean(“mybean”);

每個 bean 的定義都可以是 POJO (用類名和 JavaBean 初始化屬性定義) 或 FactoryBean。FactoryBean 接口為使用 Spring 框架構建的應用程序添加了一個間接的級別。

IOC 示例

理解控制反轉最簡單的方式就是看它的實際應用。在對由三部分組成的 Spring 系列 的第 1 部分進行總結時,我使用了一個示例,演示了如何通過 Spring IOC 容器注入應用程序的依賴關系(而不是將它們構建進來)。

我用開啟在線信用帳戶的用例作為起點。對於該實現,開啟信用帳戶要求用戶與以下服務進行交互:

☆ 信用級別評定服務,查詢用戶的信用歷史信息。

☆ 遠程信息鏈接服務,插入客戶信息,將客戶信息與信用卡和銀行信息連接起來,以進行自動借記(如果需要的話)。

☆ 電子郵件服務,向用戶發送有關信用卡狀態的電子郵件。

三個接口

對於這個示例,我假設服務已經存在,理想的情況是用松散耦合的方式把它們集成在一起。以下清單顯示了三個服務的應用程序接口。

清單 3. CreditRatingInterface

public interface CreditRatingInterface {
public boolean getUserCreditHistoryInformation(ICustomer iCustomer);
}

清單 3 所示的信用級別評定接口提供了信用歷史信息。它需要一個包含客戶信息的 Customer 對象。該接口的實現是由 CreditRating 類提供的。

清單 4. CreditLinkingInterface

public interface CreditLinkingInterface {

public String getUrl();
public void setUrl(String url);
public void linkCreditBankAccount() throws Exception ;

}

信用鏈接接口將信用歷史信息與銀行信息(如果需要的話)連接在一起,並插入用戶的信用卡信息。信用鏈接接口是一個遠程服務,它的查詢是通過 getUrl() 方法進行的。URL 由 Spring 框架的 bean 配置機制設置,我稍後會討論它。該接口的實現是由 CreditLinking 類提供的。

清單 5. EmailInterface

public interface EmailInterface {

public void sendEmail(ICustomer iCustomer);
public String getFromEmail();
public void setFromEmail(String fromEmail) ;
public String getPassword();
public void setPassword(String password) ;
public String getSmtpHost() ;
public void setSmtpHost(String smtpHost);
public String getUserId() ;
public void setUserId(String userId);


From:http://tw.wingwit.com/Article/program/Java/JSP/201405/30756.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.