Servlet运行原理(Tomcat为例)
Servlet
一、首先servlet是一個(gè)java應(yīng)用程序,運(yùn)行在服務(wù)器端,用來(lái)處理客戶端請(qǐng)求(http請(qǐng)求)并作出響應(yīng)的程序。
二、http定義了與服務(wù)器交互的幾種方式最基本常用的有:GET、POST、PUT、DELETE。使用頻率最高的就是GET、還有POST
1.GET:從指定資源請(qǐng)求數(shù)據(jù),該請(qǐng)求方式是通過(guò)Url直接請(qǐng)求數(shù)據(jù)的,數(shù)據(jù)信息可以直接在URL中看到,因?yàn)榇朔N請(qǐng)求參數(shù)暴露在URL中,所以安全性較低。GET請(qǐng)求的特點(diǎn):
- GET請(qǐng)求能夠被緩存
- GET請(qǐng)求會(huì)保存在瀏覽器的瀏覽記錄中
- 以GET請(qǐng)求的URL能夠保存為瀏覽器書簽
- GET請(qǐng)求有長(zhǎng)度限制
- GET請(qǐng)求主要用以獲取數(shù)據(jù)
2.POST:向指定的資源提交要被處理的數(shù)據(jù),該種請(qǐng)求的方式的參數(shù)放在請(qǐng)求體中,使用該方式時(shí)查詢字符串(名稱/值對(duì))是在 POST 請(qǐng)求的 HTTP 消息主體中發(fā)送的。
- POST 請(qǐng)求不會(huì)被緩存
- POST 請(qǐng)求不會(huì)保留在瀏覽器歷史記錄中
- POST 不能被收藏為書簽
- POST 請(qǐng)求對(duì)數(shù)據(jù)長(zhǎng)度沒(méi)有要求
二者的對(duì)比:
| 后退按鈕/刷新 | 無(wú)害 | 數(shù)據(jù)會(huì)被重新提交(瀏覽器應(yīng)該告知用戶數(shù)據(jù)會(huì)被重新提交)。 |
| 書簽 | 可收藏為書簽 | 不可收藏為書簽 |
| 緩存 | 能被緩存 | 不能緩存 |
| 編碼類型 | application/x-www-form-urlencoded | application/x-www-form-urlencoded 或 multipart/form-data。為二進(jìn)制數(shù)據(jù)使用多重編碼。 |
| 歷史 | 參數(shù)保留在瀏覽器歷史中。 | 參數(shù)不會(huì)保存在瀏覽器歷史中。 |
| 對(duì)數(shù)據(jù)長(zhǎng)度的限制 | 是的。當(dāng)發(fā)送數(shù)據(jù)時(shí),GET 方法向 URL 添加數(shù)據(jù);URL 的長(zhǎng)度是受限制的(URL 的最大長(zhǎng)度是 2048 個(gè)字符)。 | 無(wú)限制。 |
| 對(duì)數(shù)據(jù)類型的限制 | 只允許 ASCII 字符。 | 沒(méi)有限制。也允許二進(jìn)制數(shù)據(jù)。 |
| 安全性 | 與 POST 相比,GET 的安全性較差,因?yàn)樗l(fā)送的數(shù)據(jù)是 URL 的一部分。 在發(fā)送密碼或其他敏感信息時(shí)絕不要使用 GET ! | POST 比 GET 更安全,因?yàn)閰?shù)不會(huì)被保存在瀏覽器歷史或 web 服務(wù)器日志中。 |
| 可見性 | 數(shù)據(jù)在 URL 中對(duì)所有人都是可見的。 | 數(shù)據(jù)不會(huì)顯示在 URL 中。 |
三、servlet是一個(gè)多線程其建立在java的多線程機(jī)制之上的,它的生命周期由Web容器負(fù)責(zé)的。會(huì)根據(jù)Web.xml來(lái)實(shí)例化這個(gè)類。
1.生命周期階段:Servlet 加載—>實(shí)例化—>服務(wù)—>銷毀。
init():
在Servlet的生命周期中,僅執(zhí)行一次init()方法。它是在服務(wù)器裝入Servlet時(shí)執(zhí)行的,負(fù)責(zé)初始化Servlet對(duì)象。可以配置服務(wù)器,以在啟動(dòng)服務(wù)器或客戶機(jī)首次訪問(wèn)Servlet時(shí)裝入Servlet。無(wú)論有多少客戶機(jī)訪問(wèn)Servlet,都不會(huì)重復(fù)執(zhí)行init()。
service():
它是Servlet的核心,負(fù)責(zé)響應(yīng)客戶的請(qǐng)求。每當(dāng)一個(gè)客戶請(qǐng)求一個(gè)HttpServlet對(duì)象,該對(duì)象的Service()方法就要調(diào)用,而且傳遞給這個(gè)方法一個(gè)“請(qǐng)求”(ServletRequest)對(duì)象和一個(gè)“響應(yīng)”(ServletResponse)對(duì)象作為參數(shù)。在HttpServlet中已存在Service()方法。默認(rèn)的服務(wù)功能是調(diào)用與HTTP請(qǐng)求的方法相應(yīng)的do功能。
destroy():
僅執(zhí)行一次,在服務(wù)器端停止且卸載Servlet時(shí)執(zhí)行該方法。當(dāng)Servlet對(duì)象退出生命周期時(shí),負(fù)責(zé)釋放占用的資源。一個(gè)Servlet在運(yùn)行service()方法時(shí)可能會(huì)產(chǎn)生其他的線程,因此需要確認(rèn)在調(diào)用destroy()方法時(shí),這些線程已經(jīng)終止或完成。
2.Servlet的工作過(guò)程
步驟:
四、servlet默認(rèn)監(jiān)控80端口,用戶從瀏覽器法宗一個(gè)請(qǐng)求一般包括 :http://hostname:port/contextpath/servletpath。hostname和具體的port用來(lái)與服務(wù)器建立TCP連接,后面的URL才決定選擇在服務(wù)器中的哪個(gè)子容器服務(wù)用戶的請(qǐng)求。
關(guān)于SpingMVC中的請(qǐng)求
一、SpringMVC的流程:
1、? 用戶發(fā)送請(qǐng)求至前端控制器DispatcherServlet。
2、? DispatcherServlet收到請(qǐng)求調(diào)用HandlerMapping處理器映射器。
3、? 處理器映射器找到具體的處理器(可以根據(jù)xml配置、注解進(jìn)行查找),生成處理器對(duì)象及處理器攔截器(如果有則生成)一并返回給DispatcherServlet。
4、? DispatcherServlet調(diào)用HandlerAdapter處理器適配器。
5、? HandlerAdapter經(jīng)過(guò)適配調(diào)用具體的處理器(Controller,也叫后端控制器)。
6、? Controller執(zhí)行完成返回ModelAndView。
7、? HandlerAdapter將controller執(zhí)行結(jié)果ModelAndView返回給DispatcherServlet。
8、? DispatcherServlet將ModelAndView傳給ViewReslover視圖解析器。
9、? ViewReslover解析后返回具體View。
10、DispatcherServlet根據(jù)View進(jìn)行渲染視圖(即將模型數(shù)據(jù)填充至視圖中)。
11、 DispatcherServlet響應(yīng)用戶。?
二、組件的相關(guān)說(shuō)明
DispatcherServlet:作為前端控制器,整個(gè)流程控制的中心,控制其它組件執(zhí)行,統(tǒng)一調(diào)度,降低組件之間的耦合性,提高每個(gè)組件的擴(kuò)展性。
HandlerMapping:通過(guò)擴(kuò)展處理器映射器實(shí)現(xiàn)不同的映射方式,例如:配置文件方式,實(shí)現(xiàn)接口方式,注解方式等。?
HandlAdapter:通過(guò)擴(kuò)展處理器適配器,支持更多類型的處理器。
ViewResolver:通過(guò)擴(kuò)展視圖解析器,支持更多類型的視圖解析,例如:jsp、freemarker、pdf、excel等。
三、SpringMVC工作流程圖?
?
總結(jié)
以上是生活随笔為你收集整理的Servlet运行原理(Tomcat为例)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 电脑前面耳机插孔没声音,后面有声音
- 下一篇: 基于Astar算法实现飞行轨迹的三维规划