JavaWeb九大內建物件之request
Try hard every day!
注意事項1.jsp頁面要注意導包
request
它表示的是使用者所發起的一個請求,然後請求中封裝了使用者請求的所有資訊,當服務端箱客戶端響應後請求物件銷燬.
常用方法:
getParameter()
getParameterValues()
getParameterNames()
得到的是所有的Parameter的名字,要遍歷
getAttribute()
getSession()
請求轉發(對應同一個request):
把getList的值塞進去。結合請求轉發
request.setAttribute("userList",getList());(相當一個Map值,通過 getAttribute()的key值來拿到)(可以放物件的一些屬性)
實現請求轉發
requestDispatcher rd=reg.getRequestDispatcher("xxx.jsp")
rd.forward(reuest,response);
重定向
response.sendRedirect("xxx.jsp")
getParameter() 與 setAttribute() 的區別:
getParamenter是從客戶端與伺服器的互動,getAttribute()是伺服器與客戶端之間的互動,而且沒有setParement()方法。
做請求轉發過程:
form表單點選提交得到request物件,封裝的request的資訊 提交的所寫的物件(sevlet.java)
其中我們用了setAttribute()方法,塞了一些資訊給request物件,繼續請求轉發到一個頁面(success.jsp)
--------------------------------------------------------------------------- 獲取請求引數時亂碼問題--------------------------------------------------------------------------
瀏覽器傳送的請求引數使用什麼編碼呢?當初瀏覽器開啟網頁時使用什麼編碼,傳送就用什麼編碼。
伺服器端獲取到發過來的請求引數預設使用ISO8859-1進行解碼操作,中文一定有亂碼問題
對於Post方式提交的資料,可以設定request.setCharacterEncoding("UTF-8");來明確指定獲取請求引數時使用編碼。但是此種方式只對Post方式提交有效。
對於Get方式提交的資料,就只能手動解決亂碼:String newName = new String(name.getBytes("ISO8859-1"),"gb2312");此種方法對Post方式同樣有效。
request.setCharacterEncoding("gb2312");對GET方式提交無效的原因是:該程式碼只設置請求實體的編碼,而GET提交的資料是存放在請求行中的[資源名?param1="張三"¶m2=123],所以對GET請求的方式無效。
在tomcat的server.xml中可以配置http聯結器的URIEncoding可以指定伺服器在獲取請求引數時預設使用的編碼,從而一勞永逸的決絕獲取請求引數時的亂碼問題。也可以指定useBodyEncodingForURI引數,令request.setCharacterEncoding也對GET方式的請求起作用,但是這倆屬性都不推薦使用,因為釋出環境往往不允許修改此屬性。
--------------------------------------------------------------------------地址的寫法--------------------------------------------------------------------------
絕對路徑(以斜線開頭的路徑,代表相對與當前web應用):
如果地址是給伺服器用的,web應用的名稱可以省略。如果地址是給客戶端用的,必須寫上web應用名
request.getRequestDispatcher("/index.jsp").include(request, response);
response.setHeader("Location","/Day05/index.jsp");
response.sendRedirect("/Day05/index.jsp");
this.getServletContext().getRealPath("/index.jsp");
this.getServletContext().getResourceAsStream("/index.jsp");
<a href="/Day05/index.jsp">
<from action="/Day05/index.jsp">
類載入器載入資源的時候,相對於WEB-INF下的classes目錄
this.getClass().getClassLoader().getResource("");
this.getClass().getClassLoader().getResourceAsStream("");
相對路徑(不以斜槓開頭的路徑,要參考當前所在的路徑去拼新的路徑)---除了在必須使用的情況外,都不要使用相對路徑:
如果直接寫相對路徑或寫./相對路徑的話,相對路徑替換當前路徑最後一級
如果寫../相對路徑,則替換當前路徑的最後一級路徑的上一級路徑。
如果想替換更高層,則寫多個../