第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

Servlet中doGet與doPost的區(qū)別.?

Servlet中doGet與doPost的區(qū)別.?

青春有我 2019-02-06 11:07:08
Servlet中doGet與doPost的區(qū)別.
查看完整描述

2 回答

?
梵蒂岡之花

TA貢獻(xiàn)1900條經(jīng)驗(yàn) 獲得超5個(gè)贊

首先你要明確servlet的生命周期和HTTP協(xié)議.
Serlvet接口只定義了一個(gè)服務(wù)方法就是service,而HttpServlet類實(shí)現(xiàn)了該方法并且要求調(diào)用下列的方法之一:
doGet:處理GET請(qǐng)求
doPost:處理POST請(qǐng)求
當(dāng)發(fā)出客戶端請(qǐng)求的時(shí)候,調(diào)用service 方法并傳遞一個(gè)請(qǐng)求和響應(yīng)對(duì)象。Servlet首先判斷該請(qǐng)求是GET 操作還是POST 操作。然后它調(diào)用下面的一個(gè)方法:doGet 或 doPost。如果請(qǐng)求是GET就調(diào)用doGet方法,如果請(qǐng)求是POST就調(diào)用doPost方法。doGet和doPost都接受請(qǐng)求(HttpServletRequest)和響應(yīng)(HttpServletResponse)。get和post這是http協(xié)議的兩種方法,另外還有head, delete等
這兩種方法有本質(zhì)的區(qū)別,get只有一個(gè)流,參數(shù)附加在url后,大小個(gè)數(shù)有嚴(yán)格限制且只能是字符串。post的參數(shù)是通過另外的流傳遞的,不通過url,所以可以很大,也可以傳遞二進(jìn)制數(shù)據(jù),如文件的上傳。
在servlet開發(fā)中,以doGet()和doPost()分別處理get和post方法。
另外還有一個(gè)doService(), 它是一個(gè)調(diào)度方法,當(dāng)一個(gè)請(qǐng)求發(fā)生時(shí),首先執(zhí)行doService(),不管是get還是post。在HttpServlet這個(gè)基類中實(shí)現(xiàn)了一個(gè)角度,首先判斷是請(qǐng)求時(shí)get還是post,如果是get就調(diào)用doGet(), 如果是post就調(diào)用doPost()。你也可以直接過載doService()方法,這樣你可以不管是get還是post。都會(huì)執(zhí)行這個(gè)方法。

service()是在javax.servlet.Servlet接口中定義的, 在 javax.servlet.GenericServlet 中實(shí)現(xiàn)了這個(gè)接口, 而 doGet/doPost 則是在 javax.servlet.http.HttpServlet 中實(shí)現(xiàn)的, javax.servlet.http.HttpServlet 是 javax.servlet.GenericServlet 的子類. 所有可以這樣理解, 其實(shí)所有的請(qǐng)求均首先由 service() 進(jìn)行處理, 而在 javax.servlet.http.HttpServlet 的 service() 方法中, 主要做的事情就是判斷請(qǐng)求類型是 Get 還是 Post, 然后調(diào)用對(duì)應(yīng)的 doGet/doPost 執(zhí)行.

doGet:處理GET請(qǐng)求 doPost:處理POST請(qǐng)求 doPut:處理PUT請(qǐng)求 doDelete:處理DELETE請(qǐng)求 doHead:處理HEAD請(qǐng)求 doOptions:處理OPTIONS請(qǐng)求 doTrace:處理TRACE請(qǐng)求 通常情況下,在開發(fā)基于HTTP的servlet時(shí),開發(fā)者只需要關(guān)心doGet和doPost方法,其它的方法需要開發(fā)者非常的熟悉HTTP編程,因此這些方法被認(rèn)為是高級(jí)方法。 而通常情況下,我們實(shí)現(xiàn)的servlet都是從HttpServlet擴(kuò)展而來。 doPut和doDelete方法允許開發(fā)者支持HTTP/1.1的對(duì)應(yīng)特性; doHead是一個(gè)已經(jīng)實(shí)現(xiàn)的方法,它將執(zhí)行doGet但是僅僅向客戶端返回doGet應(yīng)該向客戶端返回的頭部的內(nèi)容; doOptions方法自動(dòng)的返回servlet所直接支持的HTTP方法信息; doTrace方法返回TRACE請(qǐng)求中的所有頭部信息。 對(duì)于那些僅僅支持HTTP/1.0的容器而言,只有doGet, doHead 和 doPost方法被使用,因?yàn)镠TTP/1service()是在javax.servlet.Servlet接口中定義的, 在 javax.servlet.GenericServlet 中實(shí)現(xiàn)了這個(gè)接口, 而 doGet/doPost 則是在 javax.servlet.http.HttpServlet 中實(shí)現(xiàn)的, javax.servlet.http.HttpServlet 是 javax.servlet.GenericServlet 的子類. 所有可以這樣理解, 其實(shí)所有的請(qǐng)求均首先由 service() 進(jìn)行處理, 而在 javax.servlet.http.HttpServlet 的 service() 方法中, 主要做的事情就是判斷請(qǐng)求類型是 Get 還是 Post, 然后調(diào)用對(duì)應(yīng)的 doGet/doPost 執(zhí)行,doGet在地址欄中顯示請(qǐng)求的內(nèi)容,doPost隱藏.
其時(shí)說來很簡(jiǎn)單,在servlet中doPost方法里還是調(diào)用了doGet方法,所以在創(chuàng)建servlet時(shí)可以不要doPost方法,但在做大型項(xiàng)目涉及密碼的傳送時(shí)doPost方法會(huì)更安全些,通常情況下二者沒什么區(qū)別。繼一下:下面主要介紹javax.servlet.http提供的HTTP Servlet應(yīng)用編程接口。

HTTP Servlet 使用一個(gè) HTML 表格來發(fā)送和接收數(shù)據(jù)。要?jiǎng)?chuàng)建一個(gè) HTTP Servlet,請(qǐng)擴(kuò)展 HttpServlet 類,該類是用專門的方法來處理 HTML 表格的 GenericServlet 的一個(gè)子類。 HTML 表單是由和標(biāo)記定義的。表單中典型地包含輸入字段(如文本輸入字段、復(fù)選框、單選按鈕和選擇列表)和用于提交數(shù)據(jù)的按鈕。當(dāng)提交信息時(shí),它們還指定服務(wù)器應(yīng)執(zhí)行哪一個(gè)Servlet(或其它的程序)。 HttpServlet 類包含 init()、destroy()、service() 等方法。其中 init() 和 destroy() 方法是繼承的。

(1) init() 方法

在 Servlet 的生命期中,僅執(zhí)行一次 init() 方法。它是在服務(wù)器裝入 Servlet 時(shí)執(zhí)行的。 可以配置服務(wù)器,以在啟動(dòng)服務(wù)器或客戶機(jī)首次訪問 Servlet 時(shí)裝入 Servlet。 無論有多少客戶機(jī)訪問 Servlet,都不會(huì)重復(fù)執(zhí)行 init() 。

缺省的 init() 方法通常是符合要求的,但也可以用定制 init() 方法來覆蓋它,典型的是管理服務(wù)器端資源。 例如,可能編寫一個(gè)定制 init() 來只用于一次裝入 GIF 圖像,改進(jìn) Servlet 返回 GIF 圖像和含有多個(gè)客戶機(jī)請(qǐng)求的性能。另一個(gè)示例是初始化數(shù)據(jù)庫連接。缺省的 init() 方法設(shè)置了 Servlet 的初始化參數(shù),并用它的 ServletConfig 對(duì)象參數(shù)來啟動(dòng)配置, 因此所有覆蓋 init() 方法的 Servlet 應(yīng)調(diào)用 super.init() 以確保仍然執(zhí)行這些任務(wù)。在調(diào)用 service() 方法之前,應(yīng)確保已完成了 init() 方法。

(2) service() 方法

ervice() 方法是 Servlet 的核心。每當(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() 方法。缺省的服務(wù)功能是調(diào)用與 HTTP 請(qǐng)求的方法相應(yīng)的 do 功能。例如, 如果 HTTP 請(qǐng)求方法為 GET,則缺省情況下就調(diào)用 doGet() 。Servlet 應(yīng)該為 Servlet 支持的 HTTP 方法覆蓋 do 功能。因?yàn)?HttpServlet.service() 方法會(huì)檢查請(qǐng)求方法是否調(diào)用了適當(dāng)?shù)奶幚矸椒?,不必要覆蓋 service() 方法。只需覆蓋相應(yīng)的 do 方法就可以了。

當(dāng)一個(gè)客戶通過HTML 表單發(fā)出一個(gè)HTTP POST請(qǐng)求時(shí),doPost()方法被調(diào)用。與POST請(qǐng)求相關(guān)的參數(shù)作為一個(gè)單獨(dú)的HTTP 請(qǐng)求從瀏覽器發(fā)送到服務(wù)器。當(dāng)需要修改服務(wù)器端的數(shù)據(jù)時(shí),應(yīng)該使用doPost()方法。

當(dāng)一個(gè)客戶通過HTML 表單發(fā)出一個(gè)HTTP GET請(qǐng)求或直接請(qǐng)求一個(gè)URL時(shí),doGet()方法被調(diào)用。與GET請(qǐng)求相關(guān)的參數(shù)添加到URL的后面,并與這個(gè)請(qǐng)求一起發(fā)送。當(dāng)不會(huì)修改服務(wù)器端的數(shù)據(jù)時(shí),應(yīng)該使用doGet()方法。

Servlet的響應(yīng)可以是下列幾種類型:

一個(gè)輸出流,瀏覽器根據(jù)它的內(nèi)容類型(如text/HTML)進(jìn)行解釋。

一個(gè)HTTP錯(cuò)誤響應(yīng), 重定向到另一個(gè)URL、servlet、JSP。

(3) destroy() 方法

destroy() 方法僅執(zhí)行一次,即在服務(wù)器停止且卸裝Servlet 時(shí)執(zhí)行該方法。典型的,將 Servlet 作為服務(wù)器進(jìn)程的一部分來關(guān)閉。缺省的 destroy() 方法通常是符合要求的,但也可以覆蓋它,典型的是管理服務(wù)器端資源。例如,如果 Servlet 在運(yùn)行時(shí)會(huì)累計(jì)統(tǒng)計(jì)數(shù)據(jù),則可以編寫一個(gè) destroy() 方法,該方法用于在未裝入 Servlet 時(shí)將統(tǒng)計(jì)數(shù)字保存在文件中。另一個(gè)示例是關(guān)閉數(shù)據(jù)庫連接。

當(dāng)服務(wù)器卸裝 Servlet 時(shí),將在所有 service() 方法調(diào)用完成后,或在指定的時(shí)間間隔過后調(diào)用 destroy() 方法。一個(gè)Servlet 在運(yùn)行service() 方法時(shí)可能會(huì)產(chǎn)生其它的線程,因此請(qǐng)確認(rèn)在調(diào)用 destroy() 方法時(shí),這些線程已終止或完成。

(4) GetServletConfig()方法

GetServletConfig()方法返回一個(gè) ServletConfig 對(duì)象,該對(duì)象用來返回初始化參數(shù)和ServletContext。ServletContext 接口提供有關(guān)servlet 的環(huán)境信息。

(5) GetServletInfo()方法

GetServletInfo()方法是一個(gè)可選的方法,它提供有關(guān)servlet 的信息,如作者、版本、版權(quán)。

當(dāng)服務(wù)器調(diào)用sevlet 的Service()、doGet()和doPost()這三個(gè)方法時(shí),均需要 "請(qǐng)求"和"響應(yīng)"對(duì)象作為參數(shù)。"請(qǐng)求"對(duì)象提供有關(guān)請(qǐng)求的信息,而"響應(yīng)"對(duì)象提供了一個(gè)將響應(yīng)信息返回給瀏覽器的一個(gè)通信途徑。

javax.servlet 軟件包中的相關(guān)類為ServletResponse和ServletRequest,而javax.servlet.http 軟件包中的相關(guān)類為HttpServletRequest 和 HttpServletResponse。

Servlet 通過這些對(duì)象與服務(wù)器通信并最終與客戶機(jī)通信。Servlet 能通過調(diào)用"請(qǐng)求"對(duì)象的方法獲知客戶機(jī)環(huán)境,服務(wù)器環(huán)境的信息和所有由客戶機(jī)提供的信息。Servlet 可以調(diào)用"響應(yīng)"對(duì)象的方法發(fā)送響應(yīng),該響應(yīng)是準(zhǔn)備發(fā)回客戶機(jī)的。

<!-- Standard Action Servlet Configuration (with debugging) -->

<servlet>
<servlet-name>log4j-init</servlet-name>
<servlet-class>com.neusoft.ehr.common.Log4jInit</servlet-class>
<init-param>
<param-name>log4j-init-file</param-name>
<param-value>/WEB-INF/classes/property/log4j.properties</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>



查看完整回答
反對(duì) 回復(fù) 2019-03-15
?
繁花如伊

TA貢獻(xiàn)2012條經(jīng)驗(yàn) 獲得超12個(gè)贊

沒什么區(qū)別,就是html表單提交的method是post的調(diào)doPost、get的調(diào)doGet。而一般情況下,無論哪種method提交的表單,處理都一樣,所以只要寫一個(gè),在另一個(gè)里調(diào)這個(gè)就行了。public void doGet(HttpSrevletRequest request, HttpServletResponse response) { 邏輯實(shí)現(xiàn)}public void doPost(HttpSrevletRequest request, HttpServletResponse response) { doGet(request, response);}

查看完整回答
反對(duì) 回復(fù) 2019-03-15
  • 2 回答
  • 0 關(guān)注
  • 711 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)