人妻系列无码专区av在线,国内精品久久久久久婷婷,久草视频在线播放,精品国产线拍大陆久久尤物

當(dāng)前位置:首頁(yè) > 軟件開(kāi)發(fā) > 正文

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

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

今天給各位分享struts的工作流程的知識(shí),其中也會(huì)對(duì)spring的工作流程進(jìn)行解釋,如果能碰巧解決你現(xiàn)在面臨的問(wèn)題,別忘了關(guān)注本站,現(xiàn)在開(kāi)始吧!mvc操作流程Spri...

今天給各位分享struts的工作流程的知識(shí),其中也會(huì)對(duì)spring的工作流程進(jìn)行解釋,如果能碰巧解決你現(xiàn)在面臨的問(wèn)題,別忘了關(guān)注本站,現(xiàn)在開(kāi)始吧!

mvc操作流程

SpringMVC工作流程描述:

1.用戶向服務(wù)器發(fā)送請(qǐng)求,請(qǐng)求被Spring前端控制ServeltDispatcherServlet捕獲;

2.DispatcherServlet對(duì)請(qǐng)求URL進(jìn)行解析,得到請(qǐng)求資源標(biāo)識(shí)符(URI)。然后根據(jù)該URI,調(diào)用HandlerMapping獲得該Handler配置的所有相關(guān)的對(duì)象(包括Handler對(duì)象以及Handler對(duì)象對(duì)應(yīng)的攔截器),最后以HandlerExecutionChain對(duì)象的形式返回;

3.DispatcherServlet根據(jù)獲得的Handler,選擇一個(gè)合適的HandlerAdapter;

4.提取Request中的模型數(shù)據(jù),填充Handler入?yún)?,開(kāi)始執(zhí)行Handler(Controller)。

在填充Handler的入?yún)⑦^(guò)程中,根據(jù)你的配置,Spring將幫你做一些額外的工作:

HttpMessageConveter:將請(qǐng)求消息(如Json、xml等數(shù)據(jù))轉(zhuǎn)換成一個(gè)對(duì)象,將對(duì)象轉(zhuǎn)換為指定的響應(yīng)信息。

數(shù)據(jù)轉(zhuǎn)換:對(duì)請(qǐng)求消息進(jìn)行數(shù)據(jù)轉(zhuǎn)換。如String轉(zhuǎn)換成Integer、Double等。

數(shù)據(jù)根式化:對(duì)請(qǐng)求消息進(jìn)行數(shù)據(jù)格式化。如將字符串轉(zhuǎn)換成格式化數(shù)字或格式化日期等。

數(shù)據(jù)驗(yàn)證:驗(yàn)證數(shù)據(jù)的有效性(長(zhǎng)度、格式等),驗(yàn)證結(jié)果存儲(chǔ)到BindingResult或Error中。

5.Handler執(zhí)行完成后,向DispatcherServlet返回一個(gè)ModelAndView對(duì)象;

6.根據(jù)返回的ModelAndView,選擇一個(gè)適合的ViewResolver(必須是已經(jīng)注冊(cè)到Spring容器中的ViewResolver)返回給DispatcherServlet;

7.ViewResolver結(jié)合Model和View,來(lái)渲染視圖;

8.將渲染結(jié)果返回給客戶端。

springmvc 多步流程

工作流程(12步)

1.DispatcherServlet(前端控制器)接收用戶的請(qǐng)求;

2.DispatcherServlet調(diào)用HandlerMapping(處理器映射器),找到合適的Handler;

3.HandlerMapping(處理器映射器)返回HandlerExecutionChain(合適的Handler的位置)給DispatcherServlet;

4.發(fā)送請(qǐng)求到HandlerAdapter(處理器適配器)(打一個(gè)比方:家用電的電壓為220V,我們的電腦或手機(jī)所需要的電壓各不相同,所以就需要有電源適配器來(lái)起到橋梁作用,這里的處理器適配器也是同樣的作用);

5.HandlerAdapter(處理器適配器)將請(qǐng)求交給Handler(處理器)去執(zhí)行;

6.Handler(處理器)執(zhí)行請(qǐng)求,并將處理后的結(jié)果封裝成為一個(gè)ModelAndView對(duì)象,返回給HandlerAdapter(處理器適配器);

7.HandlerAdapter(處理器適配器)將ModelAndView對(duì)象返回給DispatcherServlet;

8.DispatcherServlet調(diào)用InternalResourceViewResolver(視圖解析器)請(qǐng)求視圖解析;

9.InternalResourceViewResolver(視圖解析器)解析視圖后返回給DispatcherServlet;

10.DispatcherServlet請(qǐng)求渲染視圖;

11.View(視圖)將渲染好的視圖返回給DispatcherServlet;

12.DispatcherServlet響應(yīng)用戶的請(qǐng)求。

spring加載流程

初始化環(huán)境—>加載配置文件—>實(shí)例化Bean—>調(diào)用Bean顯示信息

spring filter請(qǐng)求流程

Filter的原理

JavaServletAPI中提供了Filter接口,編寫Filter的實(shí)現(xiàn)類,從而實(shí)現(xiàn)自定義過(guò)濾器。Filter的請(qǐng)求流程為:

1.客戶端發(fā)起請(qǐng)求

2.服務(wù)容器判斷當(dāng)前請(qǐng)求資源是否有過(guò)濾器,有則執(zhí)行過(guò)濾器

3.過(guò)濾器過(guò)濾通過(guò)后請(qǐng)求到Servlet服務(wù)器

4.返回結(jié)果通過(guò)過(guò)濾器返回給請(qǐng)求方

spring開(kāi)發(fā)流程

1.新建工程,構(gòu)建package包結(jié)構(gòu)

2.導(dǎo)入spring的核心包和依賴關(guān)系包(或根據(jù)提示進(jìn)行導(dǎo)入)

導(dǎo)入log4j和junit測(cè)試環(huán)境

3.編寫spring上下文配置文件

配置spring上下文環(huán)境時(shí)需要注意xsd的引用,spring包含了很多功能模塊,不同的功能模塊需要使用不同的xsd;

4.把需要有springbean工廠實(shí)例化的類交給spring進(jìn)行管理(在spring配置文件中,配置一個(gè)bean關(guān)聯(lián)類)

5.編寫測(cè)試程序或在業(yè)務(wù)程序中進(jìn)行spring實(shí)例化對(duì)象,spring實(shí)例化對(duì)象時(shí),可以使用spring的核心IOC/DI

JAVA架構(gòu)之線程池是怎樣工作的

謝謝邀請(qǐng)!下面介紹一下線程池是怎樣工作的?

ThreadPoolExecutor的類關(guān)系如下:

Executor是一個(gè)接口,它是Executor框架的基礎(chǔ),它將任務(wù)的提交與任務(wù)的執(zhí)行分離開(kāi)來(lái)。

ExecutorService接口繼承了Executor,在其上做了一些shutdown()、submit()的擴(kuò)展,可以說(shuō)是真正的線程池接口;

AbstractExecutorService抽象類實(shí)現(xiàn)了ExecutorService接口中的大部分方法;

threadPoolExecutor是線程池的核心實(shí)現(xiàn)類,用來(lái)執(zhí)行被提交的任務(wù)。

ScheduledExecutorService接口繼承了ExecutorService接口,提供了帶"周期執(zhí)行"功能ExecutorService;

ScheduledThreadPoolExecutor是一個(gè)實(shí)現(xiàn)類,可以在給定的延遲后運(yùn)行命令,或者定期執(zhí)行命令。ScheduledThreadPoolExecutor比Timer更靈活,功能更強(qiáng)大。

定義線程池

線程池的創(chuàng)建各個(gè)參數(shù)含義及流程如下:

1、corePoolSize

①線程池中的核心線程數(shù),當(dāng)提交一個(gè)任務(wù)時(shí),線程池創(chuàng)建一個(gè)新線程執(zhí)行任務(wù),直到當(dāng)前線程數(shù)等于corePoolSize;

②如果當(dāng)前線程數(shù)為corePoolSize,繼續(xù)提交的任務(wù)被保存到阻塞隊(duì)列中,等待被執(zhí)行;

③如果執(zhí)行了線程池的prestartAllCoreThreads()方法,線程池會(huì)提前創(chuàng)建并啟動(dòng)所有核心線程。

2、maximumPoolSize

線程池中允許的最大線程數(shù)。如果當(dāng)前阻塞隊(duì)列滿了,且繼續(xù)提交任務(wù),

則創(chuàng)建新的線程執(zhí)行任務(wù),前提是當(dāng)前線程數(shù)小于maximumPoolSize

3、keepAliveTime

線程空閑的存活時(shí)間,即當(dāng)線程沒(méi)有任務(wù)執(zhí)行時(shí),繼續(xù)存活的時(shí)間。

默認(rèn)情況下,該參數(shù)只在線程數(shù)大于corePoolSize時(shí)才有用。

4、TimeUnit

keepAliveTime的時(shí)間單位。

5、WorkQueue

用于保存等待執(zhí)行的任務(wù)的阻塞隊(duì)列,一般來(lái)說(shuō),我們應(yīng)該盡量使用有界隊(duì)列,因?yàn)槭褂脽o(wú)界隊(duì)列作為工作隊(duì)列會(huì)對(duì)線程池做如下影響。

①當(dāng)線程池中的線程數(shù)達(dá)到corePoolSize后,新任務(wù)將在無(wú)界隊(duì)列中等待,因此線程池中的線程數(shù)不會(huì)超過(guò)corePoolSize。

②由于1,使用無(wú)界隊(duì)列時(shí)maximumPoolSize將是一個(gè)無(wú)效參數(shù)。

③由于1和2,使用無(wú)界隊(duì)列時(shí)keepAliveTime將是一個(gè)無(wú)效參數(shù)。

④更重要的,使用無(wú)界queue可能會(huì)耗盡系統(tǒng)資源,有界隊(duì)列則有助于防止資源耗盡,同時(shí)即使使用有界隊(duì)列,也要盡量控制隊(duì)列的大小在一個(gè)合適的范圍。

所以我們一般會(huì)使用,ArrayBlockingQueue、LinkedBlockingQueue、SynchronousQueue、PriorityBlockingQueue。

6、threadfactory

創(chuàng)建線程的工廠,通過(guò)自定義的線程工廠可以給每個(gè)新建的線程設(shè)置一個(gè)具有識(shí)別度的線程名,

當(dāng)然還可以更加自由的對(duì)線程做更多的設(shè)置,比如設(shè)置所有的線程為守護(hù)線程。

Executors靜態(tài)工廠里默認(rèn)的threadfactory,線程的命令規(guī)則時(shí)"pool-數(shù)字-thread-數(shù)字"

7、RejectedExecutionHandler拒絕策略

線程池的飽和策略,當(dāng)阻塞隊(duì)列滿了,且沒(méi)有空閑的工作線程,如果繼續(xù)提交任務(wù),必須采取一種策略處理該任務(wù),線程池提供了4種策略:

①AbortPolicy:直接拋出異常,默認(rèn)策略

②CallerRunsPolicy:用調(diào)用者所在的線程來(lái)執(zhí)行任務(wù)

③DiscardOldestPolicy:丟棄阻塞隊(duì)列中靠最前的任務(wù),并執(zhí)行當(dāng)前任務(wù)

④Discardpolicy:直接丟棄任務(wù)

當(dāng)然也可以根據(jù)應(yīng)用場(chǎng)景實(shí)現(xiàn)RejectedExecutionHandler接口,自定義飽和策略,如記錄日志或持久化存儲(chǔ)不能處理的任務(wù)。

線程池的工作機(jī)制

①如果當(dāng)前運(yùn)行的線程少于corePoolSize,則創(chuàng)建新線程來(lái)執(zhí)行任務(wù)

②如果運(yùn)行的線程等于或多于corePoolSize,則將任務(wù)加入BlockingQueue

③如果無(wú)法將任務(wù)加入BlockingQueue(隊(duì)列已滿),則創(chuàng)建新的線程來(lái)處理任務(wù)。

④如果創(chuàng)建新線程將使當(dāng)前運(yùn)行的線程超出maximumPoolSize,任務(wù)將被拒絕,

并調(diào)用RejectedExecutionHandler.rejectedExecution()方法。

好了,關(guān)于struts的工作流程和spring的工作流程的問(wèn)題到這里結(jié)束啦,希望可以解決您的問(wèn)題哈!