1. 程式人生 > >JSP學習筆記四之out和session物件

JSP學習筆記四之out和session物件

接著上篇繼續講JSP的9大物件。

C、out物件

out物件是 javax.servlet.jsp.JspWriter 類的例項,用來在responserequest物件中寫入內容。最初的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。