日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Servlet运行原理(Tomcat为例)

發(fā)布時(shí)間:2023/12/14 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Servlet运行原理(Tomcat为例) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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ì)比:

?GETPOST
后退按鈕/刷新無(wú)害數(shù)據(jù)會(huì)被重新提交(瀏覽器應(yīng)該告知用戶數(shù)據(jù)會(huì)被重新提交)。
書簽可收藏為書簽不可收藏為書簽
緩存能被緩存不能緩存
編碼類型application/x-www-form-urlencodedapplication/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ò)程

步驟:

  • Web Client 向Servlet容器(Tomcat)發(fā)出Http請(qǐng)求
  • Servlet容器接收Web Client的請(qǐng)求
  • Servlet容器創(chuàng)建一個(gè)HttpRequest對(duì)象,將Web Client請(qǐng)求的信息封裝到這個(gè)對(duì)象中。
  • Servlet容器創(chuàng)建一個(gè)HttpResponse對(duì)象
  • Servlet容器調(diào)用HttpServlet對(duì)象的doservice方法,把HttpRequest對(duì)象與HttpResponse對(duì)象作為參數(shù)傳給HttpServlet 對(duì)象。
  • HttpServlet調(diào)用HttpRequest對(duì)象的有關(guān)方法,獲取Http請(qǐng)求信息。
  • HttpServlet調(diào)用HttpResponse對(duì)象的有關(guān)方法,生成響應(yīng)數(shù)據(jù)。
  • Servlet容器把HttpServlet的響應(yīng)結(jié)果傳給Web Client。
  • 四、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? HandlerAdaptercontroller執(zhí)行結(jié)果ModelAndView返回給DispatcherServlet

    8? DispatcherServletModelAndView傳給ViewReslover視圖解析器。

    9? ViewReslover解析后返回具體View

    10DispatcherServlet根據(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ò)展視圖解析器,支持更多類型的視圖解析,例如:jspfreemarkerpdfexcel等。

    三、SpringMVC工作流程圖?

    ?

    總結(jié)

    以上是生活随笔為你收集整理的Servlet运行原理(Tomcat为例)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。