原文連接:http://www.cnblogs.com/SXTkaifa/p/5968631.htmlhtml
javaweb三大框架知識點總結java
1、Struts2的總結web
一、Struts 2的工做流程,從請求提及ajax
(1)客戶端瀏覽器發出HTTP請求。spring
(2)根據web.xml配置,該請求被FilterDispatcher接收。sql
(3)根據struts.xml配置,找到須要調用的Action類和方法,通過一系列的攔截器(Interceptor)執行後,程序執行到action中的指定的方法, 而且從前臺接收的參數經過IoC方式,將值注入給Aciton。數據庫
(4)Action調用業務邏輯組件處理業務邏輯,這一步包含表單驗證。設計模式
(5)Action執行完畢,根據struts.xml中的配置result找到對應的返回結果result,並跳轉到相應頁面。瀏覽器
(6)返回HTTP響應到客戶端瀏覽器。緩存
二、攔截器Interceptor和過濾器Filter的區別
(1)攔截器是基於Java反射機制的,而過濾器則能夠對幾乎全部請求起做用
(2)過濾器依賴於servlet容器,而攔截器不依賴servlet容器。
(3)攔截器只能對執行到Action中的請求起做用,而過濾器能夠對任意請求起做用,好比直接跳轉到jsp的請求
(4)攔截器能夠訪問action中上下文值棧裏面的對象,過濾器不能。
(5)在action的生命週期中,攔截器能夠屢次調用,而filter只能在servlet容器初始化的時候調用。
三、在請求中將數據發送到action的方法有幾種
(1)url中用問號加上參數名等於參數值(url?name=value)
(2)form表單提交
(3)ajax中傳遞參數
四、action中如何接收請求request中傳遞的參數
(1)使用request.getParameter("parametername")
(2)在action中定義一個參數,而後分別給它添加setter方法
五、action中的對象數據如何傳遞到jsp
(1)request.setAttribute("name",value);
(2)將對象賦值給action中的某一個有getter方法的屬性
(3)request.getSession().setAttribute("name",value);
六、jsp中如何接收action設置的參數數據
(1)request.getAttribute("parametername")
(2)EL表達式直接獲取
(3)request.getSession().getAttribute("parametername")
七、談一下對struts的認識和理解(優勢和好處)
(1)struts框架簡化了基於MVC的web應用程序的開發。
(2)struts能夠清晰地區分控制,事務邏輯和外觀,從而簡化了開發應用程序的過程。struts提供的類使得開發工做更加簡單,這些類包括:
控制程序流程的類 ActionServlet 控制struts的程序流程
實現和執行程序事務邏輯的類 : ActionClass 包含事務邏輯
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更符合軟件工程化管理的精神。不一樣的層各司其職,每一層的組件具備相同的特徵,有利於經過工程化和工具化產生管理程序代碼
十、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文件,該對象中幾乎定義全部的異常信息。
2、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中實體對象之間的對應關係有哪三種,請簡單描述這三種關係的使用方法和場景。
一對1、一對多、多對多。
9.session對象的evict()和clear()的區別、refresh()和flush()的區別。
flush() flush只會操做持久化狀態的對象,或者說只會操做一級緩存中的對象。flush只是執行了sql語句,但沒有執行commit方法。對於臨時對象和遊離對象不作任何操做。
refresh() 和flush相似,只不過是方向相反。flush是把session緩存中的對象往數據庫中更新,而refresh是把數據庫中的對象往session緩存中更新。
evict() 該方法是從一級緩存中把持久化對象移除。
clear() 清理session中的全部緩存。
3、spring的總結
一、簡單介紹對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方法注入
接口注入
二、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做用域效果相同。
三、Spring有幾種配置方式?
將Spring配置到應用開發中有如下三種方式:
基於XML的配置
基於註解的配置
基於Java的配置(其實就是註解,用語實現無配置文件的spring開發)
簡談對aop的理解
AOP(Aspect-Oriented Programming)實際上是OOP(Object-Oriented Programming)
思想的補充和完善。咱們知道,OOP引進"抽象"、"封裝"、"繼承"、"多態"等概念,對萬事萬物進行抽象和封裝,來創建一種對象的層次結構,它強調了一種完整事物的自上而下的關係。可是具體細粒度到每一個事物內部的狀況,OOP就顯得無能爲力了。好比日誌功能。日誌代碼每每水平地散佈在全部對象層次當中,卻與它所散佈到的對象的核心功能毫無關係。對於其餘不少相似功能,如事務管理、權限控制等也是如此。這致使了大量代碼的重複,而不利於各個模塊的重用。
而AOP技術則偏偏相反,它利用一種稱爲"橫切"的技術,可以剖解開封裝的對象內部,並將那些影響了多個類而且與具體業務無關的公共行爲 封裝成一個獨立的模塊(稱
爲切面)。更重要的是,它又能以巧奪天功的妙手將這些剖開的切面復原,不留痕跡的融入核心業務邏輯中。這樣,對於往後橫切功能的編輯和重用都可以帶來極大
的方便。
AOP技術的具體實現,無非也就是經過動態代理技術或者是在程序編譯期間進行靜態的"織入"方式。下面是這方面技術的幾個基本術語:
一、join point(鏈接點):是程序執行中的一個精確執行點,例如類中的一個方法。它是一個抽象的概念,在實現AOP時,並不須要去定義一個join point。
二、point cut(切入點):本質上是一個捕獲鏈接點的結構。在AOP中,能夠定義一個point cut,來捕獲相關方法的調用。
三、advice(通知):是point cut的執行代碼,是執行「方面」的具體邏輯。
四、aspect(方面):point cut和advice結合起來就是aspect,它相似於OOP中定義的一個類,但它表明的更可能是對象間橫向的關係。
五、introduce(引入):爲對象引入附加的方法或屬性,從而達到修改對象結構的目的。有的
四、Spring和struts集成須要的配置要點以及集成使用的意義
(1)首先web.xml中用filter的方式引入struts,以listener的方式引入spring
(2)相應集成包的引入
(3)struts.xml中添加
(4)action類能夠配製成Bean同時使用spring依賴注入
集成使用的意義是由spring來管理struts的action類的實例化,和依賴注入,要注意的是action的scope是單例模式
五、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的事務聲明和提交,簡化開發過程。