知識彙總

SSH框架java

你對struts2的理解:
Struts2是struts1和webwork的技術基礎之上進行合併的,成熟的MVC框架,全新的struts2的體系結構和struts1的體系結構的差異很大,是一個全新的框架,struts2以webwork爲核心採用攔截器機制來處理用戶的請求,這樣的設計使的業務邏輯控制器可以與servletAPI徹底脫離徹底脫離開,因此使用struts2能夠理解是webwork的更新產品。Struts2框架自己能夠分爲3個部分:核心控制器FilterDispatcher業務控制器Action和用戶實現的企業業務邏輯組件
Struts2的工做原理:mysql

客戶端瀏覽器發出一個指向Servlet容器(tomcat)的請求根據web.xm的配置,請求會通過多個過濾器ActionContextClearUp(清楚頁面屬性)SiteMesh(裝飾過濾器,頁面佈局,裝飾)
最後被FilterDispatcher接收過濾器FilterDispatcher是struts2框架的心臟,在處理用戶的請求時,他和請求相互配合訪問struts2的底層框架結構,在web容器啓動時,struts2框架會自動的加載配置文件裏相關的參數,並轉換成相應的類,如:ConfigurationManager,ActionMapper和ObjectFactory,ConfigurationManager存有配置文件的一些基本信息,ActionMapper存有action的配置信息,再請求過程當中全部的對象(Action,Results,Interceptors等)都是經過ObjectFactory來建立的,過濾器會詢問ActionMapper類來查詢請求中須要用到的Action。
若是找到須要調用的Action,過濾器會把請求的處理交給ActionProxy,ActionProxy爲action的代理對象。ActionProxy經過詢問ConfigurationManager詢問框架的配置文件,找到須要調用的Action類並建立ActionInvocation實例
一旦Action執行完畢actionInvocation的實例對象會從struts.xml中找到對應的返回結果result並跳轉到相應的頁面返回HTTP響應到客戶端瀏覽器

Struts2中的數據校驗:
繼承ActionSupport類並重寫validate()在該方法中將校驗信息經過addActionError()和addFieldError()添加到fieldError中Struts在執行excute方法以前會自動的執行validate()方法
繼承ActionSupport類對於action中的其餘方法的校驗則須要添加validate***()方法若是你又一個add的方法那麼這個正對該方法的校驗的方法命名是validateAdd();
使用校驗框架,如配置***Action-validation.xml其中-validation.xml是固定不變的,而後在前面加上須要校驗的action的名字struts2就能夠識別了,而且校驗文件必須與他所對應的Action類處於同一目錄下。使用該框架必須知足兩個條件(1,使用validation攔截器(2它所校驗的Action類必須繼承ActionSupport類而且驗證失敗出現message時他會轉向INPUT頁面來顯示message消息
程序員

Struts2的攔截器實現:
能夠實現Interceptor接口也能夠繼承AbstractInterceptor類還有方法過濾攔截器繼承MethodFilterInterceptor類該類是AbstractInterceptor的子類(方法過濾攔截器主要的做用就是攔截Action中的某些方法的)
方法攔截器的兩個重要的參數:
<1.excludeMethods:該參數指定攔截器拒接攔截的方法列表,若是有多個方法中間用逗號隔開。
<2.includeMethods:該參數指定攔截器須要攔截的方法列表若是有多個方法中間用逗號隔開。
注意:若是都爲action的某一個方法指定了攔截器那麼攔截器仍是會攔截該方法的。
有默認的有自定義的兩種,當爲包中的某個action顯示的指定了攔截器則默認的攔截器不會起做用。

Struts2的屬性驅動和模型驅動:web

屬性驅動:指的是在action中jsp頁面的每個form中的表單元素的name值都對應在action中有一個屬性與之對應
模型驅動:指的是每個Action須要一個POJO對象,用來封裝表單屬性
Hibernate是什麼:
Hibernate是一個開元的ORM對象關係映射框架,它對JDBC進行了很是輕量級的封裝,使的java程序員能夠爲所欲爲的使用面向對象的編程思惟來操做數據庫。主要的做用就是完成數據持久化的。
Hibernate的核心接口一共有5個:
Session,sessionFctory,Transaction,Query和Configuration開發中都要用到不只能夠對持久化對象進行存取還能夠進行事務的控制
1.Session:負責執行持久化對象的CURD操做
2.sessionFactory:負責初始化hibernate他充當數據存儲元的代理,並負責建立session對象
3.Transaction:負責事務的相關操做
4.Configuration:負責配置並啓動hibernate在hibernate啓動的時候,他的實力首先定位映射文檔的位置讀取配置而後建立sessionFactory對象
5.Query和Criteria:負責執行各類數據庫查詢可使用HQL語言也可使用SQL語言sql

Hibernate的工做原理:
經過Configuration().configure();讀取並解析hibernate.cfg.xml配置文件
由hibernate.cg.xml中的<mapping resource=」com/xx/User.hbm.xml」/>讀取並解析映射文件
經過config.buildSessionFactory();//建立sessionFactory
sessionFactory.openSession();//打開session
session.beginTransaction();//開啓事務
persistent.operate持久化CURD操做
session.getTransaction().commit();//提交事務
關閉session
關閉sessionFactory

爲何要用Hibernate:
對JDBC訪問數據庫的代碼作了輕量級的封裝,大大簡化了數據訪問層繁瑣的重複性代碼
Hibernate是一個基於JDBC的主流持久化框架,是一個優秀的ORM實現,它很大程度上簡化了DAO層的編碼工做
hibernate使用java反射機制,而不是字節碼加強程序來實現透明性
hibernate性能很是好,由於他是輕量級框架,映射的靈活性很出色,支持各類關係數據庫,從一對一到多對多的各類複雜關係
數據庫

Hibernate是如何實現延遲加載的:
hibernate2延遲加載實現a>實體b>集合
hibernate3提供了屬性的延遲加載功能,hibernate在查詢數據的時候,數據並無存在內存中當程序真正的對數據進行操做時,對象才存在內存中,就實現了延遲加載的功能,他節省了服務器的內存開銷,從而提升了服務器的性能
Hibernate中怎樣實現類之間的關係:apache

類與類之間的關係主要體如今表與表之間的關係進行操做,他們都是對對象進行操做,咱們在程序中將全部的表與類映射在一塊兒,他們經過配置文件中的many-to-one,one-to-many,many-to-many編程

Hebernate的緩存機制:
條件:
數據不會被第三方修改,數據大小在可接受的範圍,數據更新頻率低,同一數據被系統平凡使用
Hibernate的緩存有兩種:
一級緩存Session級別的緩存,也叫事務級的緩存,只緩存實體,生命週期和session同樣不能對其進行管理
二級緩存SessionFactory級別的緩存也叫進程級緩存使用第三方插件來實現的也只是緩存實體生命週期和sessionFactory一致,能夠進行管理
首先配置第三方插件咱們用的是EHcache在hibernate.cfg.xml中加入
<property name=」hibernate.cache.user_second_level_cache」>true</property>
配置二級緩存的配置文件,
在映射文件中顯示調用<cache usage=」read-only」>
二級緩存之查詢緩存:對普通屬性進行緩存。若是關聯的表發生了修改,那麼查詢緩存的生命週期也就結束了在程序中必須手動啓用查詢緩存:query.setCacheable(true);///瀏覽器

Hibernate的查詢方式:
SQL,Criteria,HQL:1.屬性查詢2.參數查詢命名參數查詢3.關聯查詢4.分頁查詢5.統計函數緩存

Hibernate查詢數據的方式:
導航圖查詢
OID查詢
投影查詢
本地sql
HQL

Load和get的區別:
區別一:load支持延遲加載get不支持延遲加載
區別二:使用get查詢數據的時候若是數據庫中沒有此對象就會返回null若是是使用load查詢數據的時候無論數據庫裏面有沒有對應的對象返回的都是一個代理對象若是該數據不存在與數據庫中當使用該對象的非id屬性的時候就會拋出ObjectNotFoundException的異常
)

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

Hibernate中的鈍化:
就是將類序列化後存入磁盤並釋放內存空間。

Mybatis和ibatis的區別:
主要的區別是mybatis簡化了編碼的過程不須要寫dao的實現類直接寫一個dao接口在寫一個xml配置文件,而後在service裏面調用dao就好了可是ibatis須要去寫dao的實現類,因此說mybatis是ibatis的升級版本。

Mybatis和ibatis比較的優勢有哪些:
mybatis實現了接口綁定使用更加方便對象關係映射的改進,效率更高Mybatis採用功能強大的基於OGNL的表達式來消除其餘元素

Spring是什麼:
Spring實際上就是一個容器,咱們不須要使用new關鍵字建立對象,而是將其在Spring的配置文件中將其配置成bean,並設置其相關屬性,讓Spring容器來生成類的實例對象,並進行管理,對象與對象之間的依賴關係也能夠在Spring中體現出來,Spring的核心就是IOC和AOP其中IOC就是控制反轉或者叫依賴注入,就是說若是一個程序的運行須要其餘的對象的支持,那麼咱們就在程序運行的時候動態的爲該程序提供他所須要的對象,好比說業務層須要DAO層,用set方式注入。
AOP就是面向切面編程,是面向對象編程oop的延續,設計強調的是調用者和被調用者之間的解耦,來下降程序之間的依賴性和耦合性使其達到易維護易管理易理解易複用的目的。例如咱們的方法除了包含業務邏輯代碼外還須要加例如:日誌,事務等相關操做的代碼或者代碼的引用。這樣咱們的方法就不是作一件事情而是作了業務邏輯,日誌,事務三件事情因而咱們想辦法將日誌,事務定義成切面,這樣能夠在代碼須要日誌和事務的時候切入程序。來達到一個方法只作一件事情的目的。或者說在不修改源代碼的狀況下給程序動態統一添加功能的一種技術。

SpringMVC的工做原理:SpringMVC將全部的請求都交給DispatcherServlet,他會委託其餘應用系統的其餘功能模塊對請求進行處理DispatcherServlet查詢一個或者多個HandlerMapping會找處處理請求的Controller。DispatcherServlet把請求交給目標ControllerController進行業務邏輯處理後會返回一個ModelAndViewDispatcherServlet查詢一個或者多個ViewResolert視圖解析器,找到ViewResolert對象指定的視圖對象。試圖對象負責渲染後返回給客戶端。配置Spring數據源的幾種方式(1)DBCP數據源,須要的jar包有commons-dbcp.jar,DBCP依賴Jakarta commons-pool對象池機制的數據庫鏈接池因此須要comments-pool.jar.<bean id="dataSource" class="org.apache.comments.dbcp.BasicDataSource" destroy-method="close"><property name="driverClassName" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/school"/><property name="username" value="admin"/><property name="password" value="admin"/></bean>其中destroy-method屬性是必須的由於它要確保Spring容器關閉時,數據源可以正常關閉。(2)C3P0數據源是一個開源的JDBC數據源實現項目它在lib目錄中與Hibernate一塊兒發佈,實現了JDBC2和JDBC3的擴展說明的Connection和Statement池c3p0-0.9.0.4jar<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"><property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/><property name="url" value="jdbc:oracle:thin:@localhost:1521:school"/><property name="username" value="scott"/><property name="password" value="tigger"/></bean>其中C3P0比DBCP擁有更加豐富的屬性,有了這些屬性能夠更加有效的對數據源進行管理和控制(3)Proxool,單獨使用比較麻煩和Spring配合使用造成一個DataSource對象來操做數據庫簡單靈活,可靠性高。<bean id="dataSource" class="org.logicalcobwebs.proxoolDataSource"><property name="driverClass" value="oracle.jdbc.driver.OracleDriver"/><property name="ul" value="jdbc:oracle:thin:@localhost:1521:school"/><property name="username" value="scott"/><property name="password" value="tigger"/></bean>三者的比較,DBCP沒法解決服務器重啓數據源自動重接的問題,C3P0也是Hibernate推薦的能夠解決服務器重啓數據源自動重連的問題,proxool性能上是一個比較好的鏈接池它能夠解決服務器重啓數據源重連的問題可是須要手動配置。

相關文章
相關標籤/搜索