標籤:user 例子 strong param 內建對象 price 有關 錯誤資訊 選中
為了簡化開發過程,JSP提供了一些內建對象,它們由容器實現和管理。開發人員在JSP頁面中無需聲明,無需執行個體化就可使用。主要有out,request,response,session,application,pageContext,page,config和exception這九個,其中前五個最常用。
out
out對象為客戶開啟輸出資料流,向用戶端發送輸出資料流。簡單來說就是向用戶端輸出資料。
常用方法:
out.print("hello world"); //輸出到瀏覽器out.print(23.5f); //同上,可輸出基本類型,字元數組,日期等多種類型out.println("hello world"); //輸出並換行out.isAutoFlush(); //判斷是否自動重新整理緩衝區out.getBufferSize(); //擷取緩衝區大小out.getRemaining(); //擷取緩衝區剩餘空間大小out.flush(); //清除緩衝區裡的資料,並輸出到用戶端顯示out.clear(); //清除緩衝區裡的資料,不輸出到用戶端out.close(); //關閉輸出資料流
request
當使用者訪問一個伺服器頁面時,就會提交一個HTTP請求。JSP內建的request對象封裝了使用者提交的資訊,開發人員可以通過從中擷取使用者提交表單中的資訊。
常用方法樣本:
request.getMethod(); //擷取請求方式,通常是get或postrequest.setAttribute("age",20); //設定一個叫age的屬性,並賦值為20request.getAttribute("age"); //擷取上面的age屬性的值,若屬性不存在,返回nullrequest.removeAttribute("age"); //刪除name為age的屬性值
request.getAttributeNames(); //返回所有屬性的名字集合request.getCaracterEncoding(); //返回編碼格式,通常在解決亂碼時候用request.getParameter("user"); //使用者提交的form中有一個name為"user"的input框(結點),可以用這種方式擷取input框(結點)的內容request.getParameterValues("hobbies"); //使用者提交的form中有一個name為"hobbies"的複選框,可以擷取到其中選中部分的值
response
伺服器收到使用者發來的請求後,會做出響應。response對象封裝了JSP響應資訊,被發送到用戶端。
因為輸出資料流是緩衝的,所以可以設定HTTP狀態代碼(常見的404,500,504等)和response頭。
常用方法:
response.addCookie(Cookie cook); //添加一個用於儲存使用者資訊的Cookie對象response.addHeader(String name,String value); //添加資訊到標頭檔中,如果已存在就覆蓋response.containsHeader(String name); //判斷指定名字的HTTP頭是否已存在response.sendError(int); //返回錯誤資訊response.sendRedirect(String location); //重新導向response.setHeader(String name,String value); //設定指定名字的HTTP檔案頭的值。
session
敲黑板!!咣咣咣!!!這個很重要!
很多朋友對session都有種既熟悉有陌生的感覺,這個詞在開發中太常見了!但是很多地方的理解都很模糊。
這裡說的session是用來儲存每個使用者資訊的內建對象,以便跟蹤每個使用者的操作狀態。
為什麼要跟蹤使用者狀態呢?因為HTTP是一種無狀態協議,當客戶向伺服器發送一個請求(request)後,伺服器返回一個(response),串連就關閉了(故也稱為一次性串連)。當下一次串連時,伺服器無法判斷當前串連與之前的是否是同一使用者。(例如使用者在同一個網站中訪問不同的頁面時,總不能訪問一個頁面登入一次吧。。。)這時就用到了session來記錄有關串連的資訊。
session從使用者開啟瀏覽器與伺服器建立串連開始,到使用者關閉瀏覽器離開伺服器結束。伺服器將sessionID寫入到瀏覽器的Cookie中,作為這個使用者的唯一標識。每個使用者都有自己的sessionID,當使用者退出系統時,session會自動消失。
session的資訊儲存在服務端,session的ID儲存在用戶端的Cookie中。如果用戶端禁用Cookie,同一使用者在不同頁面間的session對象有可能是不同的。
常用方法,getAttribute(),setAttribute(),removeAttribute()等,均是對對象中的屬性進行增刪改查,在此就不一一贅述了
舉個例子,通過session我們可以構造一個簡單的購物車功能模組。
1.使用者登入購物商城,JSP引擎自動建立session對象
2.向session中添加兩個屬性goods(購買的商品),price(價格),方式如下
session.setAttribute("goods"," ");
session.setAttribute("price"," ");
3.在不同的頁面(生活用品類,食物類)選擇商品添加到購物車,每一次添加商品,就向goods和price中追加內容,例如
session.setAttribute("goods",session.getAttribute("goods")+"雞蛋");//其中session.getAttribute("goods")可以從session中擷取已添加到購物車的商品
session.setAttribute("price",session.getAttribute("price")+15);//其中session.getAttribute("price")可以從session擷取當前購物車中所有商品的價格
application
application對象為所有的使用者儲存共用資訊。
雖然application和session都可以為使用者儲存資訊,但是這兩個是不同的:
1.伺服器為每個使用者建立一個session對象,每個人的session都是不同的;而application是為多個應用程式儲存公用資訊,對於一個容器而言,所有使用者的application對象是同一個。
2.session和application的生命週期不同。session的生命週期是從使用者開啟瀏覽器建立與伺服器的串連開始,到關閉瀏覽器離開伺服器結束的這段時間;而application的生命週期是從伺服器啟動到伺服器關閉的這段時間。
應用情境樣本:
例如網站上常見的本網站擊量統計,就可以使用application來實現。定義一個欄位count用來計數,每次點擊就++,然後將count儲存在application對象中,application.setAttribute("Counter",count);擷取當前點擊量時,application.getAttribute("Counter")即可。
JSP最常用的五種內建對象(out,request,response,session,application)