javaweb三大框架知識點總結
一、Struts2的總結
1、Struts 2的工作流程,從請求說起
(1)客戶端瀏覽器發出HTTP請求。
(2)根據web.xml配置,該請求被FilterDispatcher接收。
(3)根據struts.xml配置,找到需要呼叫的Action類和方法,經過一系列的攔截器(Interceptor)執行後,程式執行到action中的指定的方法, 並且從前臺接收的引數通過IoC方式,將值注入給Aciton。
(4)Action呼叫業務邏輯元件處理業務邏輯,這一步包含表單驗證。
(5)Action執行完畢,根據struts.xml中的配置result找到對應的返回結果result,並跳轉到相應頁面。
(6)返回HTTP響應到客戶端瀏覽器。
2、攔截器Interceptor和過濾器Filter的區別
(1)攔截器是基於java反射機制的,而過濾器則可以對幾乎所有請求起作用
(2)過濾器依賴於servlet容器,而攔截器不依賴servlet容器。
(3)攔截器只能對執行到Action中的請求起作用,而過濾器可以對任意請求起作用,比如直接跳轉到jsp的請求
(4)攔截器可以訪問action中上下文值棧裡面的物件,過濾器不能。
(5)在action的生命週期中,攔截器可以多次呼叫,而filter只能在servlet容器初始化的時候呼叫。
3、在請求中將資料傳送到action的方法有幾種
(1)url中用問號加上引數名等於引數值(url?name=value)
(2)form表單提交
(3)ajax中傳遞引數
4、action中如何接收請求request中傳遞的引數
(1)使用request.getParameter("parametername")
(2)在action中定義一個引數,然後分別給它新增setter方法
5、action中的物件資料如何傳遞到jsp
(1)request.setAttribute("name",value);
(2)將物件賦值給action中的某一個有getter方法的屬性
(3)request.getSession().setAttribute("name
6、jsp中如何接收action設定的引數資料
(1)request.getAttribute("parametername")
(2)EL表示式直接獲取
(3)request.getSession().getAttribute("parametername")
7、談一下對struts的認識和理解(優點和好處)
(1)struts框架簡化了基於MVC的web應用程式的開發。
(2)struts可以清晰地區分控制,事務邏輯和外觀,從而簡化了開發應用程式的過程。struts提供的類使得開發工作更加簡單,這些類包括:
- 控制程式流程的類
- 實現和執行程式事務邏輯的類 :
ActionForm 顯示模組資料
ActionMapping 幫助控制器將請求對映到操作
ActionForward 用來指示操作轉移的物件
ActionError 用來儲存和回收錯誤Struts標記庫
(3)struts2框架是為了減少在運用MVC設計模型來開發Web應用的時間,而且它確實是達到了這個效果
MVC包含三個基礎部分:Model、View和Controller,這三個部分以最小的耦合協同工作,以增加程式的可擴充套件性和可維護性。各個部分的實現技術可以總結如下:
1)Model:JavaBean、EJB的EntityBean
2)View:JSP、Struts的TagLib
3)Controller:Struts的ActionServlet、Action
概括起來MVC的優點主要有一下方面:
1)多個檢視可以對應一個模型。按MVC設計模式,一個模型對應多個檢視,可以減少程式碼的複製及程式碼的維護量,一旦模型發生改變,也易於維護
2)模型返回的資料與顯示邏輯分離。模型資料可以應用任何的顯示技術,例如,使用JSP頁面、Velocity模板或者直接產生Excel文件等
3)應用被分隔為三層,降低了各層之間的耦合,提供了應用的可擴充套件性
4)控制層的概念也很有效,由於它把不同的模型和不同的檢視組合在一起,完成不同的請求。因此,控制層可以說是包含了使用者請求許可權的概念
5)MVC更符合軟體工程化管理的精神。不同的層各司其職,每一層的元件具有相同的特徵,有利於通過工程化和工具化產生管理程式程式碼
10、JSP的內建物件及方法
request表示HttpServletRequest物件。它包含了有關瀏覽器請求的資訊,並且提供了幾個用於獲取cookie,header,和session資料的有用的方法。
response表示HttpServletResponse物件,並提供了幾個用於設定送回瀏覽器的響應的方法(如cookies,頭資訊等)
out物件是javax.jsp.JspWriter的一個例項,並提供了幾個方法使你能用於向瀏覽器回送輸出結果。
pageContext表示一個javax.servlet.jsp.PageContext物件。它是用於方便存取各種範圍的名字空間、servlet相關的物件的API,並且包裝了通用的servlet相關功能的方法。
session表示一個請求的javax.servlet.http.HttpSession物件。Session可以存貯使用者的狀態資訊
applicaton表示一個javax.servle.ServletContext物件。這有助於查詢有關servlet引擎和servlet環境的資訊
config表示一個javax.servlet.ServletConfig物件。該物件用於存取servlet例項的初始化引數。
page表示從該頁面產生的一個servlet例項
exception 物件的作用是顯示異常資訊,只有在包含 isErrorPage="true" 的頁面中才可以被使用,在一般的JSP頁面中使用該物件將無法編譯JSP檔案,該物件中幾乎定義所有的異常資訊。
二、hibernate的總結
1.常見的ORM框架有哪些
hibernate mybatis jpa
2.hibernate從載入配置到到關閉session的整個過程中設計的核心類有哪些
//載入預設的hibernate配置檔案,預設名為hibernate.cfg.xml
final StandardServiceRegistry registry=
new StandardServiceRegistryBuilder().configure().build();
//使用MetadataSources(registry)建立sessionFactory
SessionFactory sessionFactory=
new MetadataSources(registry).buildMetadata().buildSessionFactory();
//建立session
Session session = sessionFactory.openSession();
//開啟事務
Transaction transaction = session.beginTransaction();
transaction.commit();
//關閉session
session.close();
//關閉SessionFactory
sessionFactory.close();
3.請解釋hibernate方言的概念
針對不同的資料庫,hibernate可以使用統一的hql,在hibernate和具體的資料庫互動的時候,就通過與具體資料庫種類和版本匹配的方言將hql解析稱sql去執行。(擴充套件性很強)
4.常用的主鍵生成策略
自增長:identity
sequence
native:支援自增長increment就採用自增長
uuid:hibernate生成的32的字串
assigned:自己指定或設定
foreign:使用外來鍵欄位作為主鍵
5.hibernate的實體物件有哪幾種存在狀態和特點
臨時狀態(瞬態):物件由new操作符建立,且尚未與Hibernate Session關聯的物件被認為處於瞬態(session快取中沒有該物件)。瞬態物件不會被持久化到資料庫中(也不存在於資料庫中),也不會被賦予持久化標識(OID)。如果程式中失去了瞬態物件的引用,瞬態物件將被垃圾回收機制銷燬。使用Hibernate Session可以將其變為持久化狀態。
持久化狀態:持久化例項在資料庫中有對應的記錄,並擁有一個持久化標識(identifier,有OID,持久化物件的ID不能被修改)。持久化的例項可以是剛剛儲存的,也可以是剛被載入的。無論哪一種,持久化物件都必須與特定的Hibernate Session關聯。並且每條記錄在同一個session物件中有且僅有一個快取物件,Hibernate會檢測到處於持久化狀態物件的改動,在當前操作完成時將物件資料寫回資料庫。開發者不需要手動執行UPDATE。
遊離(脫管)狀態:某個例項曾經處於持久化狀態,但隨著與之關聯的Session被關閉,該物件就變成脫管狀態。脫管狀態的引用依然有效,物件可繼續被修改。如果重新讓脫管物件與某個Session關聯,這個脫管物件會重新轉換為持久化狀態,而脫管期間的改動也不會丟失,也可被寫入資料庫。
6.請描述下session的load()和get()的區別。
get()每次執行都會執行sql語句,不會延遲。load()方法只是會在我們對拿到的實體物件進行操作的時候才去執行查詢,拿到相應的實體資訊。load方法返回的是一個代理物件。無論是get還是load首先都會查一級快取(session)中有沒有相應的對應值,如果沒有,再去資料庫進行查詢。另外,使用get方法時,如果指定的id在資料庫在不存在則返加null,使用load方法時,如果指定id不存在則會報異常。
7.hibernate中實體類、類例項以及類中的屬性和資料庫表的對應關係。
持久化(實體)類對應關係型資料庫表,類例項對應表中記錄,類屬性對應表字段。
8.hibernate中實體物件之間的對應關係有哪三種,請簡單描述這三種關係的使用方法和場景。
一對一、一對多、多對多。
9.session物件的evict()和clear()的區別、refresh()和flush()的區別。
flush() flush只會操作持久化狀態的物件,或者說只會操作一級快取中的物件。flush只是執行了sql語句,但沒有執行commit方法。對於臨時物件和遊離物件不做任何操作。
refresh() 和flush類似,只不過是方向相反。flush是把session快取中的物件往資料庫中更新,而refresh是把資料庫中的物件往session快取中更新。
evict() 該方法是從一級快取中把持久化物件移除。
clear() 清理session中的所有快取。
三、Spring的總結
1、簡單介紹對spring IOC的理解和依賴注入實現方式
在平時的java應用開發中,我們要實現某一個功能或者說是完成某個業務邏輯時至少需要兩個或以上的物件來協作完成,在沒有使用Spring的時候,每個物件在需要使用他的合作物件時,自己均要使用像new object() 這樣的語法來將合作物件創建出來,這個合作物件是由自己主動創建出來的,建立合作物件的主動權在自己手上,自己需要哪個合作物件,就主動去建立,建立合作物件的主動權和建立時機是由自己把控的,而這樣就會使得物件間的耦合度高了,A物件需要使用合作物件B來共同完成一件事,A要使用B,那麼A就對B產生了依賴,也就是A和B之間存在一種耦合關係,並且是緊密耦合在一起,而使用了Spring之後就不一樣了,建立合作物件B的工作是由Spring來做的,Spring建立好B物件,然後儲存到一個容器裡面,當A物件需要使用B物件時,Spring就從存放物件的那個容器裡面取出A要使用的那個B物件,然後交給A物件使用,至於Spring是如何建立那個物件,以及什麼時候建立好物件的,A物件不需要關心這些細節問題(你是什麼時候生的,怎麼生出來的我可不關心,能幫我幹活就行),A得到Spring給我們的物件之後,兩個人一起協作完成要完成的工作即可。
其主要總用是解耦和提高效能(單例模式)
在Java中注入有以下三種實現方式:
構造器注入
Setter方法注入
介面注入
2、Spring Bean的作用域之間有什麼區別?
singleton:這種bean範圍是預設的,這種範圍確保不管接受到多少個請求,每個容器中只有一個bean的例項,單例的模式由bean
factory自身來維護。
prototype:原形範圍與單例範圍相反,為每一個bean請求提供一個例項。
下面是基於spring mvc的可不做回答
request:在請求bean範圍內會每一個來自客戶端的網路請求建立一個例項,在請求完成以後,bean會失效並被垃圾回收器回收。
Session:與請求範圍類似,確保每個session中有一個bean的例項,在session過期後,bean會隨之失效。
global-session:global-session和Portlet應用相關。當你的應用部署在Portlet容器中工作時,它包含很多portlet。如果你想要宣告讓所有的portlet共用全域性的儲存變數的話,那麼這全域性變數需要儲存在global-session中。
全域性作用域與Servlet中的session作用域效果相同。
3、Spring有幾種配置方式?
將Spring配置到應用開發中有以下三種方式:
基於XML的配置
基於註解的配置
基於Java的配置(其實就是註解,用語實現無配置檔案的spring開發)
簡談對aop的理解
AOP(Aspect-Oriented Programming)其實是OOP(Object-Oriented Programming)
思想的補充和完善。我們知道,OOP引進"抽象"、"封裝"、"繼承"、"多型"等概念,對萬事萬物進行抽象和封裝,來建立一種物件的層次結構,它強調了一種完整事物的自上而下的關係。但是具體細粒度到每個事物內部的情況,OOP就顯得無能為力了。比如日誌功能。日誌程式碼往往水平地散佈在所有物件層次當中,卻與它所散佈到的物件的核心功能毫無關係。對於其他很多類似功能,如事務管理、許可權控制等也是如此。這導致了大量程式碼的重複,而不利於各個模組的重用。
而AOP技術則恰恰相反,它利用一種稱為"橫切"的技術,能夠剖解開封裝的物件內部,並將那些影響了多個類並且與具體業務無關的公共行為 封裝成一個獨立的模組(稱
為切面)。更重要的是,它又能以巧奪天功的妙手將這些剖開的切面復原,不留痕跡的融入核心業務邏輯中。這樣,對於日後橫切功能的編輯和重用都能夠帶來極大
的方便。
AOP技術的具體實現,無非也就是通過動態代理技術或者是在程式編譯期間進行靜態的"織入"方式。下面是這方面技術的幾個基本術語:
1、join point(連線點):是程式執行中的一個精確執行點,例如類中的一個方法。它是一個抽象的概念,在實現AOP時,並不需要去定義一個join point。
2、point cut(切入點):本質上是一個捕獲連線點的結構。在AOP中,可以定義一個point cut,來捕獲相關方法的呼叫。
3、advice(通知):是point cut的執行程式碼,是執行“方面”的具體邏輯。
4、aspect(方面):point cut和advice結合起來就是aspect,它類似於OOP中定義的一個類,但它代表的更多是物件間橫向的關係。
5、introduce(引入):為物件引入附加的方法或屬性,從而達到修改物件結構的目的。有的
4、Spring和struts整合需要的配置要點以及整合使用的意義
(1)首先web.xml中用filter的方式引入struts,以listener的方式引入spring
(2)相應整合包的引入
(3)struts.xml中新增<constant name="struts.objectFactory" value="spring" />
(4)action類可以配製成Bean同時使用spring依賴注入
整合使用的意義是由spring來管理struts的action類的例項化,和依賴注入,要注意的是action的scope是單例模式
5、Spring和hibernate整合的配置要點以及整合使用的意義
(1) 引入spring中的orm依賴
(2) 在spring中配置datasource
(3) 在spring中配置sessionfactory並將datasource注入
(4) 配置spring管理hibernate事務管理類並注入sessionfactory
(5) 配置aop,設定在service(業務邏輯層)
(6) 講aop切面和事務管理advice繫結
(7) 可以從spring容器中獲取hibernatesupport類來使用hibernate操作資料庫
好處
(1)由IOC容器來管理Hibernate的SessionFactory
(2)使用spring的aop來管理hiberante的事務宣告和提交,簡化開發過程。