1. 程式人生 > >JavaWeb九大內建物件之request

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="張三"&param2=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("");
相對路徑(不以斜槓開頭的路徑,要參考當前所在的路徑去拼新的路徑)---除了在必須使用的情況外,都不要使用相對路徑:
    如果直接寫相對路徑或寫./相對路徑的話,相對路徑替換當前路徑最後一級
    如果寫../相對路徑,則替換當前路徑的最後一級路徑的上一級路徑。
    如果想替換更高層,則寫多個../