ssh常見知識點
1.簡述Struct2基本流程
引入問題:
struts核心過濾器攔截的是*.action請求
WebRoot
|-- login.jsp
.. 用到struts標籤
直接訪問:login.jsp, 會不會有問題?
會有問題; 如果用struts的功能,必須經過核心過濾器!
過濾器: init()/doFilter()/destroy()
在tomcat啟動時候例項化,且呼叫init()方法
訪問時候呼叫doFilter方法
----------------
Struts流程:
一、 Tomcat伺服器啟動
1. 伺服器啟動,載入自身config/web.xml, 以及webapps下所有專案的web.xml
2. 建立過濾器物件
建立struts核心過濾器例項
3. 初始化
執行過濾器init()方法
---> 載入預設Properties配置檔案
---> 載入xml
struts-default.xml, 【所有需要建立的bean、預設的包(結果型別、所有攔截器、預設的攔截器棧)】
struts-plugin.xml, 【外掛配置】
struts.xml 【自定義配置】
二、 使用者訪問
使用者每次訪問,執行doFilter()方法:
1. 每次訪問struts,都會建立ActionContext物件 【 prepare.createActionContext(request, response);】
1.1 然後,建立ValuStack值棧物件
ValueStack 結構
|-- root 根元素資料
|-- context 非根元素(map)
1.2 給ValustStack封裝資料, 所有的map資料都放入值棧
--> 把代表request/session/application的map、以及HttpServletRequest等物件都放入值棧中
1.3 把值棧的map資料,拷貝一份給ActionContext!
所以,我們可以通過ActionContext獲取struts執行的資料!
2. ActionMapping
struts把請求的引數(路徑等資訊), 封裝為一個ActionMapping物件!
判斷:
---> 如果請求靜態資源(jsp), 就放行
---> 如果請求的是action,才執行Action(的過程)
3. 如果訪問的是struts的action, 執行:execute.executeAction(request, response, mapping);
(Action建立、攔截器的呼叫)
4. ConfigurationManager 配置管理器類,管理各配置檔案
5. 根據配置管理器物件, 建立Action的代理 , 通過Action的代理,建立Action例項!
6. 再依次預設的18個攔截器
2.說一下struct2的Interceptor有什麼用?
struts的每一個功能,都是通過一個個攔截器實現!
(其餘自由擴充套件....)
攔截器怎麼實現? 與過濾器區別?
總共? 預設? 不夠?
3. 為什麼要用Hibernate? 簡述工作原理!
hibernate簡化繁瑣的jdbc操作!大大提升開發效率!
hibernate實現了物件關係對映,即ORM,
通過hibernate把物件直接通過對映,儲存到資料庫!
從資料庫取出來的就是封裝好的物件!
# 建立配置管理物件,Configuration
# 載入主配置檔案:hibernate.cfg.xml
同時載入所有的對映資訊!
# 載入完主配置檔案後,就可以建立SessionFactroy
# 建立操作資料庫的Session物件
# 操作資料庫
# 最後提交事務、關閉session!
4. Hibernate是如何延遲載入? 並簡述Hibernate快取機制?
lazy
true
false
extra
通過設定lazy屬性,實現延遲載入!
load/集合屬性/物件關聯的屬性,預設都是延遲載入!
基於session的快取,以及基於sessionFactroy快取!
區別:
session快取,一級快取,不能共享快取資料!
sessionFactroy快取,二級快取,基於應用程式的快取,快取資料可以給不同的session共享!
...
5. 為什麼要用spring?
6. 簡述spring工作原理?
可以簡述Spring六大模組!
Spring的核心IOC與AOP!
IOC, 提供了可以把物件建立交給外部容器! 解耦!
AOP, 面向切面程式設計,典型應用: spring宣告式事務管理就用到了aop程式設計!
IOC容器建立物件原理:
反射技術!
Spring建立bean:
1. 通過載入容器配置檔案applicationContext.xml,建立IOC容器物件
2. 容器中的bean會被建立
lazy-init=true (只對單例有效)
在第一次從容器中獲取物件時候,建立bean
lazy-init=預設
在建立容器物件時候,會建立所有的單例的bean
3. 多例的bean,在每次從容器獲取物件的時候才建立!
Aop程式設計原理:
jdk動態代理、cglib子類代理!
Aop執行過程:
1. 先配置切入點表示式,指定攔截哪些方法
即給哪些類生產代理物件!
2. 當物件符合切入點表示式規則,
如果物件有實現介面,用jdk動態代理! (從ioc從其中獲取物件時候,必須用介面接收!)
如果物件沒有實現介面,用cglib子類代理! (目標物件不能為final)
7. Spring如何管理事務?
宣告式事務管理,管理事務!
管理事務過程:
1. 配置事務管理器類
jdbc: DataSourceTransactionManager
hibernate: HibernateTransactionManager
2. 配置事務通知
<tx:advice>
3. 切面配置
配置切入點表示式,應用通知!
<aop:config>
...
8. 簡述SSH整合
簡述:
SSH, 指Spring與Struts整合;
Spring與Hibernate整合;
Spring建立Struts的Action
Spring建立hibernate的SessionFactory
SSH,事務管理,交給spring宣告式事務管理!
dao操作,
1. 注入sessionFactory到dao 【hibernate】
2. 注入hibernateTemplate到dao 【spring api】
3. dao繼承HibernateDaoSupport工具類 【spring api】