1、寫(xiě)出你熟悉的開(kāi)源框架以及各自的作用(項(xiàng)目中為什么使用SSH)
答:框架:hibernate,spring,struts1/struts2.
Hibernate主要用于數(shù)據(jù)持久化;封裝了JDBC操作;還提供了一個(gè)易用的、高效率的對(duì)象關(guān)系映射框架;
Spring的控制反轉(zhuǎn)能起到解耦合的作用;
Struts主要用于請(qǐng)求處理的流程控制;struts是基于MVC模式的,很好的將應(yīng)用程序進(jìn)行了分層,使開(kāi)發(fā)者更關(guān)注于業(yè)務(wù)邏輯的實(shí)現(xiàn);struts有著豐富的taglib,如能靈活運(yùn)用,則能大大提高開(kāi)發(fā)效率。
Struts(表示層)+Spring(業(yè)務(wù)層)+Hibernate(持久層)
2、簡(jiǎn)述STRUTS架構(gòu)(說(shuō)下Struts的工作流程、struts的工作原理)
簡(jiǎn)述:
Struts是采用JavaServlet/JavaServerPages技術(shù),開(kāi)發(fā)Web應(yīng)用程序的開(kāi)放源碼的framework。采用Struts能開(kāi)發(fā)出基于MVC(Model-View-Controller)設(shè)計(jì)模式的應(yīng)用構(gòu)架。Struts有如下的主要功能:一.包含一個(gè)controllerservlet,能將用戶(hù)的請(qǐng)求發(fā)送到相應(yīng)的Action對(duì)象。二.JSP自由tag庫(kù),并且在controllerservlet中提供關(guān)聯(lián)支持,幫助開(kāi)發(fā)員創(chuàng)建交互式表單應(yīng)用。三.提供了一系列實(shí)用對(duì)象:XML處理、通過(guò)JavareflectionAPIs自動(dòng)處理JavaBeans屬性、國(guó)際化的提示和消息。
流程:
在web應(yīng)用啟動(dòng)時(shí)就會(huì)加載初始化ActionServlet,ActionServlet從struts-config.xml文件中讀取配置信息,把它們存放到各種配置對(duì)象當(dāng)ActionServlet接收到一個(gè)客戶(hù)請(qǐng)求時(shí),將執(zhí)行如下流程.
(1)檢索和用戶(hù)請(qǐng)求匹配的ActionMapping實(shí)例,如果不存在,就返回請(qǐng)求路徑無(wú)效信息;
(2)如果ActionForm實(shí)例不存在,就創(chuàng)建一個(gè)ActionForm對(duì)象,把客戶(hù)提交的表單數(shù)據(jù)保存到ActionForm對(duì)象中;
(3)根據(jù)配置信息決定是否需要表單驗(yàn)證.如果需要驗(yàn)證,就調(diào)用ActionForm的validate()方法;
(4)如果ActionForm的validate()方法返回null或返回一個(gè)不包含ActionMessage的ActuibErrors對(duì)象,就表示表單驗(yàn)證成功;
(5)ActionServlet根據(jù)ActionMapping所包含的映射信息決定將請(qǐng)求轉(zhuǎn)發(fā)給哪個(gè)Action,如果相應(yīng)的Action實(shí)例不存在,就先創(chuàng)建這個(gè)實(shí)例,然后調(diào)用Action的execute()方法;
(6)Action的execute()方法返回一個(gè)ActionForward對(duì)象,ActionServlet在把客戶(hù)請(qǐng)求轉(zhuǎn)發(fā)給ActionForward對(duì)象指向的JSP組件;
(7)ActionForward對(duì)象指向JSP組件生成動(dòng)態(tài)網(wǎng)頁(yè),返回給客戶(hù);
3、緩存:
session緩存:被稱(chēng)為Hibernate的第一級(jí)緩存.它存放被單前工作單元加載的對(duì)象.
sessionFactory緩存:
被稱(chēng)為Hibernate的第二級(jí)緩存.一個(gè)實(shí)例對(duì)應(yīng)一個(gè)數(shù)據(jù)存儲(chǔ)源.它是線程安全的,是重量級(jí)的.
它需要一個(gè)很大的緩存,用來(lái)存放預(yù)定義的SQL語(yǔ)句以及映射元數(shù)據(jù)等.
4、對(duì)象的3個(gè)狀態(tài)
瞬時(shí):一個(gè)實(shí)體通過(guò)new操作符創(chuàng)建后,沒(méi)有和Hibernate的Session建立關(guān)系,
也沒(méi)有手動(dòng)賦值過(guò)該實(shí)體的持久化標(biāo)識(shí)(持久化標(biāo)識(shí)可以認(rèn)為映射表的主鍵)。
此時(shí)該實(shí)體中的任何屬性的更新都不會(huì)反映到數(shù)據(jù)庫(kù)表中。
持久化:當(dāng)一個(gè)實(shí)體和Hibernate的Session創(chuàng)建了關(guān)系,
并獲取了持久化標(biāo)識(shí),而且在Hibernate的Session生命周期內(nèi)存在。
此時(shí)針對(duì)該實(shí)體任何屬性的更改都會(huì)直接影響到數(shù)據(jù)庫(kù)表中一條記錄對(duì)應(yīng)字段的更新,
也即與對(duì)應(yīng)數(shù)據(jù)庫(kù)表保持同步。
脫管:當(dāng)一個(gè)實(shí)體和Hibernate的Session創(chuàng)建了關(guān)系,并獲取了持久化標(biāo)識(shí),
而此時(shí)Hibernate的Session的生命周期結(jié)束,實(shí)體的持久化標(biāo)識(shí)沒(méi)有被改動(dòng)過(guò)。
針對(duì)該實(shí)體的任何屬性的修改都不會(huì)及時(shí)反映到數(shù)據(jù)庫(kù)表中。
5、Spring里面applicationContext.xml文件能不能改成其他文件名?
ContextLoaderListener是一個(gè)ServletContextListener,它在你的web應(yīng)用啟動(dòng)的時(shí)候初始化。缺省情況下,它會(huì)在WEB-INF/applicationContext.xml文件找Spring的配置。你可以通過(guò)定義一個(gè)元素名字為”contextConfigLocation”來(lái)改變Spring配置文件的位置。示例如下:
org.springframework.web.context.ContextLoaderListenercontextConfigLocation/WEB-INF/xyz.xml