JSP最常用的五種內置對象(out,request,response,session,application)
為了簡化開發過程,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或post request.setAttribute("age",20); //設置一個叫age的屬性,並賦值為20 request.getAttribute("age"); //獲取上面的age屬性的值,若屬性不存在,返回null request.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)