request對象是HttpServletRequest接口的一個實例,而HttpServletRequest的父接口是ServletRequest,但是目前ServletRequest只有HttpServletRequest一個接口,如果以後出現了新的協議,只要讓新的協議繼承ServletRequest即可 request對象功能: 1、接收表單參數:request.getParameter(); 此時要注意接收參數是可能會產生亂碼,因為所有的靜態WEB的執行流程是先從服務器取得一個頁面,之後通過此頁面把內容進行提交,提交給服務器後,服務器在將處理的結果返回給客戶端進行顯示,故如果要想直接輸入內容,就要把編碼設置為和服務器內容的編碼一直,可以使用ServletRequest接口中提供的setCharacterEncoding()方法進行統一的編碼設置,即在接收頁面上使用request.setCharacterEncoding("GBK");進行統一編碼後在進行表單值的接收 2、表單的提交方式:get 和post get提交的表單在地址欄中會將全部的參數顯示出來,這樣一來是不安全,而來時如果提交過多的內容將會產生錯誤,因為URL地址欄最大只能儲存4k~5k的內容,所以過大會造成無法提交 post提交表單在地址欄中不會顯示提交參數等內容,這樣的提交比較安全,而且不會受到內容多少的限制,但是如果內容過大將會超出http的超時時間限制 3、使用地址重寫的方式提交參數 格式:Xxx.jsp?參數名稱=參數值&參數名稱=參數值&參數名稱=參數值 [html] <h1><a href="url_override_do.jsp?name=hello&school=sichuan univercity">地址重寫參數提交</a></h1> 接收時采用: [html] <% request.setCharacterEncoding("GBK");//處理中文亂碼問題 String rename=request.getParameter("name"); String reschool=request.getParameter("school"); %> <h1>姓名:<%=rename %></h1> <h1>日期:<%=reschool %></h1> 使用此種方式提交時,在提交後的頁面上右擊頁面屬性時依然可以看到url地址中帶有參數的地址 4、隱藏域傳遞參數 在表單中有一種叫做隱藏域的對象,此對象中的內容會隨表單的提交一起提交給jsp頁面 [html] <form action="input.jsp" method="post"> <input type="hidden" name="school" value="四川農業大學網絡教育學院"> <input type="submit" value="提交隱藏域對象"> </form> 處理頁面 [html] <% request.setCharacterEncoding("GBK"); //按照中文接收 String reschool =new String( request.getParameter("school").getBytes("GBK"));//轉碼 %> <h1>參數內容為:<%=reschool %></h1> 5、接收多個參數 在表單中有復選框按鈕,可以用來多選,但是復選框的name屬性都是一樣的,那麼在表單的處理頁面要使用request.getParameterValues()函數進行接收 看如下代碼: 表單頁面: [html] <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>復選框表單的提交</title> <meta http-equiv="content-type" content="text/html; charset=GBK"> </head> <body> <form action="check_input.jsp" method="post"> <table> <tr> <td>姓名:</td> <td><input type="text" name="name"></td> </tr> <tr> <td>興趣:</td> <td> <input type="checkbox" name="inst" value="游泳">游泳 <input type="checkbox" name="inst" value="上網">上網 <input type="checkbox" name="inst" value="電影">電影 <input type="checkbox" name="inst" value="音樂">音樂 </td> </tr> </table> <input type="submit" value="提交"> </form> </body> </html> 處理頁面: [html] <%@ page language="java" import="java.util.*" pageEncoding="GBK"%> <%@ page contentType="text/html; charset=GBK" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>使用地址重寫的方式提交參數</title> </head> <body> <% request.setCharacterEncoding("GBK"); //按照中文接收 String rename=request.getParameter("name"); String reinst[] = request.getParameterValues("inst"); %> <h1>姓名:<%=rename %></h1> <h1>興趣: <% for(int i=0;i<reinst.length;i++){ %> <%=reinst[i]%> <% } %> </h1> </body> </html> 6、對於一個工程上的表單來說,類型肯定是復雜多樣的,此時我們該如何接收呢?對於有單選、復選、一般的輸入等我們可以使用request.getParameterNames()方法進行接收,然後對於一般的參數就可以直接使用request.getParameter()方法進行接收了,對於像復選框之類的name屬性一樣的控件,我們可以使用String類的startWith()方法進行判斷。因為如果是諸如復選框之類的name屬性我們在進行書寫時一般在此name數值上加上***,表示數組,看案例: 表單頁面: [html] <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>復雜表單的提交</title> <meta http-equiv="content-type" content="text/html; charset=GBK"> </head> <body> <form action="Generic_input.jsp" method="post"> <table> <tr> <td>姓名:</td> <td><input type="text" name="name"></td> </tr> <tr> <td><input type="hidden" name="hidden" value="隱藏的值"></td> </tr> <tr> <td>興趣:</td> <td> <input type="checkbox" name="**inst" value="游泳">游泳 <input type="checkbox" name="**inst" value="上網">上網 <input type="checkbox" name="**inst" value="電影">電影 <input type="checkbox" name="**inst" value="音樂">音樂 </td> </tr> </table> <input type="submit" value="提交"> </form> </body> </html> 處理頁面: [html] <%@ page language="java" import="java.util.*" pageEncoding="GBK"%> <%@ page contentType="text/html; charset=GBK" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>使用地址重寫的方式提交參數</title> </head> <body> <h1> <% request.setCharacterEncoding("GBK"); //按照中文接收 Enumeration enu = request.getParameterNames(); while(enu.hasMoreElements()){ String paraname = (String)enu.nextElement(); if(paraname.startsWith("**")){ String temp[] = request.getParameterValues(paraname); for(int i=0;i<temp.length;i++){ %> <%=temp[i] %> <% } }else{ %> <%=request.getParameter(paraname) %> <% } } %> </h1> </body> </html>