Struts2
1、mvc的框架
Struts2是一個mvc框架,模型層用用於封裝和傳遞數據、完成數據訪問和
業務邏輯,由JavaBean實現,視圖層用於顯示頁面和用戶交互用jsp來實現,控制層控制應用程序的流程用action來實現,。
2、aop的框架
Action執行前後都會執行配置好的攔截器,攔截器中可以對請求與返回的數據進行處理。
3、可插拔的框架
Struts2提供了靈活的插件機制來與其他框架進行整,只要提供所需的jar包,以及struts-plugin 配置文件即可。
攔截器也是一種可插拔的設計,用到什麼攔截器,配置一下。
4、struts2 流程
容器啓動的時候加載那4個配置文件 ,如果其中有相同信息則後者覆蓋前者,最後將這些配置信息封裝到ConfigurationManager中
初始化核心分發器:Dispatcher 將struts框架工作所需的對象創建,以及其他的一些初始化工作。
當提交請求經過struts2 過濾器的doFilter(ServletRequest req, ServletResponse res, FilterChain chain)方法
1 首先獲得http協議的request,respon
HttpServletRequest request=(HttpServletRequest)req;
2 設置編碼集
prepare.setEncodingAndLocal(request,response)
3 創建ActionContext
prepare.createActionContext(request,response)
創建值棧,
初始化值棧,
把當前的actionContext放入到threadlocal中
4、把整個Dispatcher放入到threadlocal中
prepare.assignDispatcherToThread();
5 對請求url進行解析,並判斷你的url是否是需要經過struts的核心
如果不需要執行chain.doFilter放行; 如果需要,
6 請求進行包裝,解析出對應的action,
接着得到ActionMapper的實例,通過他的getActionMapping 方法來決定是否要調用某個 Action,如果返回的ActionMapping爲空 則繼續判斷是否是要使用到struts的靜態資 源, 即路徑中有/struts/ 如果有調用靜態資源處理器進行處理,如果沒有直接放行;
如果返回的ActionMapping不爲空則執行executeAction(request, response, mapping);
7 創建Action代理類,同時創建ActionInvocation,在ActionInvocation的初始化方法中
1、創建action createAction(contextMap);
2、 把當前訪問的action放入到棧頂和map棧中
stack.push(action);
contextMap.put("action", action);
3、獲取當前請求的攔截器的迭代器的形式
List<InterceptorMapping> interceptorList=new ArrayList<InterceptorMapping>(proxy.getConfig().getInterceptors());
interceptors = interceptorList.iterator();
8 執行所有的攔截器
執行action
執行結果集
再次執行攔截器
9清空actionContext中的數據
Spring
Spring是一個IOC和AOP容器框架;可以大大的簡化企業開發
IOC 控制反轉:將對象的創建和銷燬交給外Spring進行管理使程序員有更多的時間處理業務邏輯;
IOC實現原理
解析配置文件,解析出class ,id 反射調用器構造函數創建,
然後用id爲key,保存在一個map中;(如果有依賴注入:即解析字段,解析出對應的類型;通過反射方式創建出來;然後反射該字段的set方法;)
Aop
面向切面編程其實就是對公共代碼的抽取,實現分離關注separate aware.
比如說我們在實際開發中經常要解決的問題:權限,日誌,事務,異常等等經常性的代碼,我們將他們進行抽取,分開管理,在需要的地方將切面織
AOP的原理是爲目標類創建代理,創建代理的方式是:
1 當你的目標類實現了接口就用jdk的這個proxy
2 當你的目標類沒有實現接口就要用CGLIB方式動態產生,他產生的類是目標類子類;
struts2中的攔截器就是這麼個東東;將所有的功能寫成對應的攔截器;
在需要的時候注入就可以了:配置文件中通過interceptor-ref:進行引用即可;他就會給你在action執行前後進行攔截;
Spring 聲明式事務處理是將所有整個應用中的事務管理做成一個切面aspect,統一事務的管理,在需要的地方只要配置對應的事務切入點和事務通知即可
Hibernate
hibernate是一個orm框架, 他是對JDBC的封裝。
1 他是利用hql採用面向對象來操作數據庫的。自動生成對應的sql 從而降低了編程時對sql語句的要求,可移植性比較好,。
只需要利用session 調用hibernate封裝好的方法操作持久化對象,實現與數據庫的交互。
2 還有一個特點就是延遲加載的策略,控制系統發出sql語句的時機,在某些時候 大大的提高了系統的性能。
例如: 加載菜單樹時, 只需要加載出父節點,等到點擊父節點是纔去加載子節點,可以提高系統性能。當然延時加載也會有負面的影響,就是有的時候取哪些還未加載出來的數據時,session關閉了。 這是會拋no session 異常。 此時可以通過 配置opensessionview這個過濾器來解決這個問題
3 然後就是他的緩存機制,將查詢出來的持久化對象放到緩存中,再次使用這些數據的時候 直接從緩存中取,減少了與數據庫的交互次數,大大提高了系統的效率。
----
表關係複雜,或數據處理量大,一般不用hibernate,二用半自動的Ibatis,或直接jdbc.
系統數據處理量巨大,性能要求極爲苛刻,這往往意味着我們必須通過經過高
度優化的SQL語句(或存儲過程)才能達到系統性能設計指標。
是相對Hibernate等提供了全面的數據庫封裝機制的“全自動化”
ORM 實現而言,“全自動”ORM 實現了POJO 和數據庫表之間的映射,以及SQL 的自動生成和執行
Mybatis
Mybatis首先也是一個對jdbc的封裝 但更側重於 面向sql編程, 核心配置文件中需要要配置結果集, 需要寫一些sql語句, 這樣也就使的 對程序員在sql語句上有更高的要求。 但是又一點好處,就是 可以進行sql語句的優化來提高性能。 這是hibernate做不到的。 一般大項目用MyBatis 或直接jdbc
----POJO--簡單的Java對象
SQL開發的工作量大和數據庫移植性較差,爲系統設計提供了更大的自由空間
ibatis 的着力點,則在於POJO 與SQL之間的映射關係。也就是說,ibatis
並不會爲程序員在運行期自動生成SQL 執行。具體的SQL 需要程序員編寫,然後通過映
射配置文件,將SQL所需的參數,以及返回的結果字段映射到指定POJO。
SpringMVC
Spring的MVC框架主要由DispatcherServlet、處理器映射、處理器、視圖解析器、視圖組成
整個處理過程從一個HTTP請求開始:
1、 DispatcherServlet接收到請求後,根據對應配置文件中配置的處理器映射,找到對應的處理器(Handler)
2、 調用相應處理器中的處理方法,處理該請求,處理器處理結束後會將一個ModelAndView類型的數據傳給DispatcherServlet,這其中包含了處理結果的視圖和視圖中要使用的數據
3、 DispatcherServlet根據得到的ModelAndView中的視圖對象,找到一個合適的ViewResolver(視圖解析器),根據視圖解析器的配置,DispatcherServlet將視圖要顯示的數據傳給對應的視圖,最後給瀏覽器構造一個HTTP響應
DispatcherServlet是整個Spring MVC的核心,它負責接收HTTP請求組織協調Spring MVC的各個組成部分
其主要工作有以下三項:
1、 截獲符合特定格式的URL請求
2、 初始化DispatcherServlet上下文對應的WebApplicationContext,並將其與業務層、持久化層的WebApplicationContext建立關聯
3、 初始化Spring MVC的各個組成組件,並裝配到DispatcherServlet中
JBPM常用接口有哪些?
ProcessEngine工作流的流程引擎對象
1、RepositoryService 流程資源服務的接口。
作用: 提供對流程定義的部署、查詢、刪除等操作。
2、ExecutionService 流程執行服務的接口。
作用: 提供啓動流程實例、“執行”推進,設置流程實例變量等操作。
3、ManagementService 流程管理控制服務接口。
作用: 提供異步工作相關的執行和查詢操作。
4、TaskService 人工任務服務接口。
作用: 提供對任務(Task)的創建、提交、查詢、保存、刪除等操作。
5、HistoryService 流程歷史服務的接口。
作用: 提供對任務的管理操作,提供對流程歷史庫中歷史流程實例、歷史活動實例等記錄的查詢操作。還提供諸如某個流程定義中所有活動的平均持續時間、某個流程定義中某轉移的結果次數等數據分析服務。
6、IdentityService 身份認證服務的接口。
作用: 提供對流程用戶、用戶組以及組成員關係的相關服務。
現在列舉出幾個 向公司提出的問題?
1、 公司主要做哪些方面的項目? 主要是針對業務。 (如果他事先給你介紹了就取消這個問題)
2、 公司主要用的是哪些技術? 有沒有自己寫的框架之類的?
3、 公司有沒有相關的培訓項目啊? 自己有沒有機會參與?
4、 公司定期會不會一些重大的活動呢?
5、 公司的五險一金 是怎麼交的? 有沒有什麼補助之類的?