JSP的內建物件及常用方法
先讓我們看看效果:
大概流程是這樣的,我們訪問index.jsp的時候,分別對pageContext, request, session,application四個作用域中的變數進行累加。(當然先判斷這個變數是不是存在,如果變數不存在,則要把變數初始化成1)。計算完成後就從index.jsp執行forward跳轉到test.jsp。在test.jsp裡再進行一次累加,然後顯示出這四個整數來。
從顯示的結果來看,我們可以直觀的得出結論:
page裡的變數沒法從index.jsp傳遞到test.jsp。只要頁面跳轉了,它們就不見了。
request裡的變數可以跨越forward前後的兩頁。但是隻要重新整理頁面,它們就重新計算了。
session和application裡的變數一直在累加,開始還看不出區別,只要關閉瀏覽器,再次重啟瀏覽器訪問這頁,session裡的變數就重新計算了。
application裡的變數一直在累加,除非你重啟tomcat,否則它會一直變大。
作用域規定的是變數的有效期限
如果把變數放到pageContext裡,就說明它的作用域是page,它的有效範圍只在當前jsp頁面裡。
從把變數放到pageContext開始,到jsp頁面結束,你都可以使用這個變數。
如果把變數放到request裡,就說明它的作用域是request,它的有效範圍是當前請求週期。
所謂請求週期,就是指從http請求發起,到伺服器處理結束,返回響應的整個過程。在這個過程中可能使用forward的方式跳轉了多個jsp頁面,在這些頁面裡你都可以使用這個變數。
如果把變數放到session裡,就說明它的作用域是session,它的有效範圍是當前會話。
所謂當前會話,就是指從使用者開啟瀏覽器開始,到使用者關閉瀏覽器這中間的過程。這個過程可能包含多個請求響應。也就是說,只要使用者不關瀏覽器,伺服器就有辦法知道這些請求是一個人發起的,整個過程被稱為一個會話(session),而放到會話中的變數,就可以在當前會話的所有請求裡使用。
如果把變數放到application裡,就說明它的作用域是application,它的有效範圍是整個應用。
整個應用是指從應用啟動,到應用結束。我們沒有說“從伺服器啟動,到伺服器關閉”,是因為一個伺服器可能部署多個應用,當然你關閉了伺服器,就會把上面所有的應用都關閉了。
application作用域裡的變數,它們的存活時間是最長的,如果不進行手工刪除,它們就一直可以使用。
與上述三個不同的是,application裡的變數可以被所有使用者共用。如果使用者甲的操作修改了application中的變數,使用者乙訪問時得到的是修改後的值。這在其他scope中都是不會發生的,page, request,session都是完全隔離的,無論如何修改都不會影響其他人的資料。
request常用方法
l獲得客戶機資訊
•getRequestURL方法返回客戶端發出請求時的完整URL。
•getRequestURI方法返回請求行中的資源名部分。
•getQueryString 方法返回請求行中的引數部分。
•getRemoteAddr方法返回發出請求的客戶機的IP地址
•getRemoteHost方法返回發出請求的客戶機的完整主機名
•getRemotePort方法返回客戶機所使用的網路埠號
•getLocalAddr方法返回WEB伺服器的IP地址。
•getLocalName方法返回WEB伺服器的主機名
•getMethod得到客戶機請求方式
response物件
response物件包含了響應客戶請求的有關資訊,但在JSP中很少直接用到它。它是HttpServletResponse類的例項。
1 String getCharacterEncoding() 返回響應用的是何種字元編碼
2 ServletOutputStream getOutputStream() 返回響應的一個二進位制輸出流
3 PrintWriter getWriter() 返回可以向客戶端輸出字元的一個物件
4 void setContentLength(int len) 設定響應頭長度
5 void setContentType(String type) 設定響應的MIME型別
6 sendRedirect(java.lang.String location) 重新定向客戶端的請求
session物件
session物件指的是客戶端與伺服器的一次會話,從客戶連到伺服器的一個WebApplication開始,直到客戶端與伺服器斷開連線為止。它是HttpSession類的例項
1 long getCreationTime() 返回SESSION建立時間
2 public String getId() 返回SESSION建立時JSP引擎為它設的惟一ID號
3 long getLastAccessedTime() 返回此SESSION裡客戶端最近一次請求時間
4 int getMaxInactiveInterval() 返回兩次請求間隔多長時間此SESSION被取消(ms)
5 String[] getValueNames() 返回一個包含此SESSION中所有可用屬性的陣列
6 void invalidate() 取消SESSION,使SESSION不可用
7 boolean isNew() 返回伺服器建立的一個SESSION,客戶端是否已經加入
8 void removeValue(String name) 刪除SESSION中指定的屬性
9 void setMaxInactiveInterval() 設定兩次請求間隔多長時間此SESSION被取消(ms)
jsp動作及作用
JSP共有以下6種基本動作:
jsp:include:在頁面被請求的時候引入一個檔案;
jsp:useBean:尋找或者例項化一個JavaBean。;
jsp:setProperty:設定JavaBean的屬性。;
jsp:getProperty:輸出某個JavaBean的屬性;
jsp:forward:把請求轉到一個新的頁面;
jsp:plugin:根據瀏覽器型別為Java外掛生成OBJECT或EMBED標記