透過瀏覽器網址列輸入url並透過?傳遞參數請求資源時,?後面的參數叫做"查詢字串",會觸發後台Servlet的doGet(),因為透過瀏覽器網址列直接存取的方式是GET方式。
下面順便了解一下form的method屬性對傳參的影響。
原始表單:
第一種情況:
上面表單的action屬性不寫時,直接點擊「提交」按鈕,會觸發表單的提交事件,此時,透過火狐瀏覽器的控制台可以發現:
訊息標頭中有以下關鍵訊息:(1)請求地址後面透過'?'傳遞參數(2)請求方式為GET

參數資訊: 查詢字串
指定form的method屬性時:
第二種情況:
訊息頭中有以下關鍵資訊:(1)請求地址後面沒有傳遞任何參數(2)請求方式為POST
參數資訊: 表單資料
上面兩種方式的對應都是刷新後顯示當前頁面,因為form沒有指定action屬性,預設提交的地址就是當前頁面。
現在透過指定action屬性存取Servlet來進一步了解method屬性。
TestServlet.java核心原始碼:
@WebServlet("/servlet/TestServlet")
public class TestServlet extends HttpServlet {
private static final long serialVerformati; request, HttpServletResponse response) throws ServletException , IOException {
response.getWriter().print("doGet()");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.getWriter().print("doPost( )");
}
}
第三種情況:method="get" action="/test/servlet/TestServlet"
上面的訊息頭,參數和第一種情況是一樣的,不過後台回應了一個doGet().
第四種情況: method="post" action="/test/servlet/TestServlet"
上面的訊息頭,參數和第一種情況是一樣的,不過後台回應了一個doPost().
TestServlet.java 新增取得參數碼:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletRequest request, HttpServletResponse response) throws Servletalception, 版本; getWriter().print ("doGet() get type="+param);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOception {getpter ).print("doPost() get type="+param);
}
第五種情況,method="get" 在action後面傳參action = "/servlet/TestServlet?type=01",同時在後台Servlet中取得參數
此時瀏覽器網址列:http://localhost:8080/test/servlet/TestServlet?username=
可以發現,後台的doGet()是取得不到參數type的.
同時發現,type參數是沒有加入到「查詢字串」的
第六種情況,method="post" 在action後面傳參action = "/servlet/TestServlet?type=01",同時在後台Servlet中取得參數
可以發現,後台的doPost()是可以取得參數type的。
同時,參數一欄和以前有些不同:既有「查詢字串」又有「表單資料」
所以上面給我們一種啟示,就是通過?在form的action後面傳遞參數時,我們需要手動指定form的method="post",不然是獲取不到?後面的參數的;
思維迷思:之前我們在瀏覽器網址列透過url傳遞參數,也是通過?來實現的,它最終也是呼叫doGet()方式,所以我們就認為在的表單(預設method="get")中action後面可以通過?來傳參。
最終原因:(個人總結)get方式提交表單資料時,會重組url,它只會將form的表單資料組裝成“查詢字串”,提交到form的action中指定的url,所以原來通過?方式傳遞的參數是不會提交的,因為url重組了就丟失了。
但是post方式提交表單時,它會將表單資料和?後面的參數,分開保存,一起提交給form中action指定的url。
(參考資源)HTML Form: why action can't have get value in it?
http://stackoverflow.com/questions/3548795/html-form-why-action-cant-have-get-value-in -it

本文討論了HTML< Progress>元素,其目的,樣式和與< meter>元素。主要重點是使用< progress>為了完成任務和LT;儀表>對於stati

本文討論了html< datalist>元素,通過提供自動完整建議,改善用戶體驗並減少錯誤來增強表格。Character計數:159

本文討論了HTML< meter>元素,用於在一個範圍內顯示標量或分數值及其在Web開發中的常見應用。它區分了< meter>從< progress>和前

本文討論了視口元標籤,這對於移動設備上的響應式Web設計至關重要。它解釋瞭如何正確使用確保最佳的內容縮放和用戶交互,而濫用可能會導致設計和可訪問性問題。

本文解釋了HTML5< time>語義日期/時間表示的元素。 它強調了DateTime屬性對機器可讀性(ISO 8601格式)的重要性,並在人類可讀文本旁邊,增強Accessibilit

本文討論了使用HTML5表單驗證屬性,例如必需的,圖案,最小,最大和長度限制,以直接在瀏覽器中驗證用戶輸入。

本文討論了< iframe>將外部內容嵌入網頁,其常見用途,安全風險以及諸如對象標籤和API等替代方案的目的。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

Dreamweaver Mac版
視覺化網頁開發工具

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

記事本++7.3.1
好用且免費的程式碼編輯器