1. 程式人生 > >ssh常見知識點

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】