struts的工作流程?spring的工作流程

今天給各位分享struts的工作流程的知識,其中也會對spring的工作流程進行解釋,如果能碰巧解決你現在面臨的問題,別忘了關注本站,現在開始吧!mvc操作流程Spri...
今天給各位分享struts的工作流程的知識,其中也會對spring的工作流程進行解釋,如果能碰巧解決你現在面臨的問題,別忘了關注本站,現在開始吧!
mvc操作流程
SpringMVC工作流程描述:
1.用戶向服務器發送請求,請求被Spring前端控制ServeltDispatcherServlet捕獲;
2.DispatcherServlet對請求URL進行解析,得到請求資源標識符(URI)。然后根據該URI,調用HandlerMapping獲得該Handler配置的所有相關的對象(包括Handler對象以及Handler對象對應的攔截器),最后以HandlerExecutionChain對象的形式返回;
3.DispatcherServlet根據獲得的Handler,選擇一個合適的HandlerAdapter;
4.提取Request中的模型數據,填充Handler入參,開始執行Handler(Controller)。
在填充Handler的入參過程中,根據你的配置,Spring將幫你做一些額外的工作:
HttpMessageConveter:將請求消息(如Json、xml等數據)轉換成一個對象,將對象轉換為指定的響應信息。
數據轉換:對請求消息進行數據轉換。如String轉換成Integer、Double等。
數據根式化:對請求消息進行數據格式化。如將字符串轉換成格式化數字或格式化日期等。
數據驗證:驗證數據的有效性(長度、格式等),驗證結果存儲到BindingResult或Error中。
5.Handler執行完成后,向DispatcherServlet返回一個ModelAndView對象;
6.根據返回的ModelAndView,選擇一個適合的ViewResolver(必須是已經注冊到Spring容器中的ViewResolver)返回給DispatcherServlet;
7.ViewResolver結合Model和View,來渲染視圖;
8.將渲染結果返回給客戶端。
springmvc 多步流程
工作流程(12步)
1.DispatcherServlet(前端控制器)接收用戶的請求;
2.DispatcherServlet調用HandlerMapping(處理器映射器),找到合適的Handler;
3.HandlerMapping(處理器映射器)返回HandlerExecutionChain(合適的Handler的位置)給DispatcherServlet;
4.發送請求到HandlerAdapter(處理器適配器)(打一個比方:家用電的電壓為220V,我們的電腦或手機所需要的電壓各不相同,所以就需要有電源適配器來起到橋梁作用,這里的處理器適配器也是同樣的作用);
5.HandlerAdapter(處理器適配器)將請求交給Handler(處理器)去執行;
6.Handler(處理器)執行請求,并將處理后的結果封裝成為一個ModelAndView對象,返回給HandlerAdapter(處理器適配器);
7.HandlerAdapter(處理器適配器)將ModelAndView對象返回給DispatcherServlet;
8.DispatcherServlet調用InternalResourceViewResolver(視圖解析器)請求視圖解析;
9.InternalResourceViewResolver(視圖解析器)解析視圖后返回給DispatcherServlet;
10.DispatcherServlet請求渲染視圖;
11.View(視圖)將渲染好的視圖返回給DispatcherServlet;
12.DispatcherServlet響應用戶的請求。
spring加載流程
初始化環境—>加載配置文件—>實例化Bean—>調用Bean顯示信息
spring filter請求流程
Filter的原理
JavaServletAPI中提供了Filter接口,編寫Filter的實現類,從而實現自定義過濾器。Filter的請求流程為:
1.客戶端發起請求
2.服務容器判斷當前請求資源是否有過濾器,有則執行過濾器
3.過濾器過濾通過后請求到Servlet服務器
4.返回結果通過過濾器返回給請求方
spring開發流程
1.新建工程,構建package包結構
2.導入spring的核心包和依賴關系包(或根據提示進行導入)
導入log4j和junit測試環境
3.編寫spring上下文配置文件
配置spring上下文環境時需要注意xsd的引用,spring包含了很多功能模塊,不同的功能模塊需要使用不同的xsd;
4.把需要有springbean工廠實例化的類交給spring進行管理(在spring配置文件中,配置一個bean關聯類)
5.編寫測試程序或在業務程序中進行spring實例化對象,spring實例化對象時,可以使用spring的核心IOC/DI
JAVA架構之線程池是怎樣工作的
謝謝邀請!下面介紹一下線程池是怎樣工作的?
ThreadPoolExecutor的類關系如下:
Executor是一個接口,它是Executor框架的基礎,它將任務的提交與任務的執行分離開來。
ExecutorService接口繼承了Executor,在其上做了一些shutdown()、submit()的擴展,可以說是真正的線程池接口;
AbstractExecutorService抽象類實現了ExecutorService接口中的大部分方法;
threadPoolExecutor是線程池的核心實現類,用來執行被提交的任務。
ScheduledExecutorService接口繼承了ExecutorService接口,提供了帶"周期執行"功能ExecutorService;
ScheduledThreadPoolExecutor是一個實現類,可以在給定的延遲后運行命令,或者定期執行命令。ScheduledThreadPoolExecutor比Timer更靈活,功能更強大。
定義線程池
線程池的創建各個參數含義及流程如下:
1、corePoolSize
①線程池中的核心線程數,當提交一個任務時,線程池創建一個新線程執行任務,直到當前線程數等于corePoolSize;
②如果當前線程數為corePoolSize,繼續提交的任務被保存到阻塞隊列中,等待被執行;
③如果執行了線程池的prestartAllCoreThreads()方法,線程池會提前創建并啟動所有核心線程。
2、maximumPoolSize
線程池中允許的最大線程數。如果當前阻塞隊列滿了,且繼續提交任務,
則創建新的線程執行任務,前提是當前線程數小于maximumPoolSize
3、keepAliveTime
線程空閑的存活時間,即當線程沒有任務執行時,繼續存活的時間。
默認情況下,該參數只在線程數大于corePoolSize時才有用。
4、TimeUnit
keepAliveTime的時間單位。
5、WorkQueue
用于保存等待執行的任務的阻塞隊列,一般來說,我們應該盡量使用有界隊列,因為使用無界隊列作為工作隊列會對線程池做如下影響。
①當線程池中的線程數達到corePoolSize后,新任務將在無界隊列中等待,因此線程池中的線程數不會超過corePoolSize。
②由于1,使用無界隊列時maximumPoolSize將是一個無效參數。
③由于1和2,使用無界隊列時keepAliveTime將是一個無效參數。
④更重要的,使用無界queue可能會耗盡系統資源,有界隊列則有助于防止資源耗盡,同時即使使用有界隊列,也要盡量控制隊列的大小在一個合適的范圍。
所以我們一般會使用,ArrayBlockingQueue、LinkedBlockingQueue、SynchronousQueue、PriorityBlockingQueue。
6、threadfactory
創建線程的工廠,通過自定義的線程工廠可以給每個新建的線程設置一個具有識別度的線程名,
當然還可以更加自由的對線程做更多的設置,比如設置所有的線程為守護線程。
Executors靜態工廠里默認的threadfactory,線程的命令規則時"pool-數字-thread-數字"
7、RejectedExecutionHandler拒絕策略
線程池的飽和策略,當阻塞隊列滿了,且沒有空閑的工作線程,如果繼續提交任務,必須采取一種策略處理該任務,線程池提供了4種策略:
①AbortPolicy:直接拋出異常,默認策略
②CallerRunsPolicy:用調用者所在的線程來執行任務
③DiscardOldestPolicy:丟棄阻塞隊列中靠最前的任務,并執行當前任務
④Discardpolicy:直接丟棄任務
當然也可以根據應用場景實現RejectedExecutionHandler接口,自定義飽和策略,如記錄日志或持久化存儲不能處理的任務。
線程池的工作機制
①如果當前運行的線程少于corePoolSize,則創建新線程來執行任務
②如果運行的線程等于或多于corePoolSize,則將任務加入BlockingQueue
③如果無法將任務加入BlockingQueue(隊列已滿),則創建新的線程來處理任務。
④如果創建新線程將使當前運行的線程超出maximumPoolSize,任務將被拒絕,
并調用RejectedExecutionHandler.rejectedExecution()方法。
好了,關于struts的工作流程和spring的工作流程的問題到這里結束啦,希望可以解決您的問題哈!
本文鏈接:http://xinin56.com/ruanjian/286.html