JSP學習筆記四之out和session物件
接著上篇繼續講JSP的9大物件。
C、out物件
out物件是 javax.servlet.jsp.JspWriter 類的例項,用來在response和request物件中寫入內容。最初的JspWriter類物件根據頁面是否有快取(快取區使用來儲存臨時資料的)來進行不同的例項化操作。可以在page指令中使用buffered='false'屬性來輕鬆關閉快取。JspWriter類包含了大部分java.io.PrintWriter類中的方法。不過,JspWriter新增了一些專為處理快取而設計的方法。還有就是,JspWriter類會丟擲IOExceptions異常,而PrintWriter不會。
下表列出了我們將會用來輸出boolean,char,int,double,String,object等型別資料的重要方法:
方法
描述
out.print(dataType dt)
輸出Type型別的值
out.println(dataType dt)
輸出Type型別的值然後換行
out.flush()
重新整理輸出流
Out物件常用方法:
· void println()向客戶端列印字元
· void clear()清除緩衝區的內容。如果在flush之後呼叫,會丟擲異常
· void clearBuffer() 也是清除緩衝區內容,但在flush之後不會丟擲異常
· void flush()將緩衝區內容輸出到客戶端
· int getBufferSize()返回緩衝區的大小(位元組數),如不設緩衝區則為0
· int getRemaining()返回緩衝區還剩餘多少可用
· boolean isAutoFlush()返回緩衝區滿時,是否自動清空緩衝區
· void close()關閉輸出流
程式碼如下:
<%
String str=”sdjsds”;
out.println(str);
%>
D、session物件
每個使用者的一次會話代表就是一個session。Web中的session指的是使用者在瀏覽某個網站時,從進入網站到瀏覽器關閉所經過的這段時間,也就是使用者瀏覽這個網站所花費的時間。如下圖所示:
session物件是 javax.servlet.http.HttpSession 類的例項。和Java Servlets中的session物件有一樣的行為。session物件用來跟蹤在各個客戶端請求間的會話。注意session會話是儲存在伺服器的記憶體中。
從一個客戶開啟瀏覽器並連線到伺服器開始,到客戶關閉瀏覽器離開這個伺服器結束,被稱為一個會話。當一個客戶訪問一個伺服器時,可能會在伺服器的幾個頁面之間切換,伺服器應當通過某種途徑知道這是一個客戶,這就需要session物件。
1、session物件常用的方法:
long getCreationTime();返回session的建立時間
public String getId();返回session建立時jsp引擎為它設的唯一ID號
public Object setAttribute(String name,Object value);使用指定名稱將物件繫結到此會話
public Object getAttribute(String name);返回與此會話中的指定名稱繫結在一起的物件,如果沒有物件繫結在該名稱下,則返回null
String[] getValueNames();返回一個包含此session中所有可用屬性的陣列
int getMaxInactiveInterval();返回兩次請求間隔多長時間此session被取消(單位秒)
int setMaxInactiveInterval();設定兩次請求的間隔時長
2、session物件的生命週期
session的生命週期是從使用者開始訪問到關閉所有關於session的瀏覽介面與伺服器斷開連線的這段時間。
session一般有時間限制(半個小時),長時間不操作可能會導致session失效。session失效後原session中儲存的屬性值會全部丟失。
setMaxInactiveInterval(int)可以設定session存活的最長時間,在時間過了之後,伺服器會建立全新的一個session。前面的session物件將會消失。
a、Session的銷燬有三種方式
1.呼叫了session.invalidate();
2.session過期
3.伺服器重啟
b、如何設值session的時間:
Tomcat伺服器中session 超時時間為30分鐘。我們設定設定超時時間的方式如下:
1.session.setMaxInactiveInterval(30*60); 單位是秒
2.在web.xml配置
<session-config>
<session-timeout>
30
</session-timeout>
</session-config> 單位是分鐘
例項程式碼1:
session_page1.jsp
<%@ page import="java.text.*" %>
<body>
<h1>Session內建物件</h1>
<%
SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");//定義日期格式物件
Date d=new Date(session.getCreationTime());
session.setAttribute("username", "admin");
session.setAttribute("password", "123456");
session.setAttribute("age", "23");
%>
建立session的時間:<%=sdf.format(d) %><br>
session的使用者ID:<%=session.getId() %><br>
session的使用者名稱:<%=session.getAttribute("username") %><br>
<%
//設定session的最長時間
session.setMaxInactiveInterval(10);//10秒鐘
%>
<a href="session_page2.jsp" target="_blank">跳轉到session_page2.jsp</a>
</body>
結果顯示:(注意我們將session的存活時間設為了10秒)
此時在tomcat的manager管理中可以看到session ID:
10秒鐘之後重新整理Tomcat manager頁面再來看看session ID:
說明session 已經被銷燬了。
程式碼例項2:
<pre name="code" class="html"><body>
<h1>Session內建物件</h1>
<%
//SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
// Date d=new Date(session.getCreationTime());
// session.setAttribute("username", "admin");
%>
session的使用者ID:<%=session.getId() %><br>
session的使用者名稱:<%=session.getAttribute("username") %><br>
session的屬性有:<%
if(session.getValueNames()!=null){
String[] str=session.getValueNames();
for(String s:str){
out.print(s+" ");
}
}
%>
</body>
結果顯示:
首先執行session_page1.jsp。
單擊超連結
同一個會話不管有幾個頁面,session ID是不變的。10秒中之後session又被銷燬了。我們開啟Tomcat manager頁面再來看看session ID。