JSP基礎(三)JSP內置對象 利用application對象做一個簡單的網頁計數器


 

JSP基礎(三)JSP內置對象

 

JSP內置對象

  JSP有以下九種內置對象,包括:

  request,請求對象

  response,響應對象

  pageContext,頁面上下文對象

  session,會話對象

  application,應用程序對象

  out,輸出對象

  config,配置對象

  page,頁面對象

  exception,異常對象

 

  從本質上講,JSP的這些內置對象其實都是由特定的Java類所產生的,在服務器運行時根據情況自動生成

 

JSP內置對象映射表

對象名

類型

作用域

request

javax.servlet.ServletRequest

Request

response

javax.servlet.ServletResponse

Page

pageContext

javax.servlet.jsp.PageContxt

Page

session

javax.servlet.http.HttpSession

Session

application

javax.servlet.ServletContext

Application

out

javax.servlet.jsp.JspWriter

Page

config

javax.servlet.ServletConfig

Page

page

java.lang.Object

Page

exception

java.lang.Throwable

Page

 

request對象

  request對象代表的是來自客戶端的請求,例如在form表單中填寫的信息等,是最常用的對象。

  關於它的方法使用較多的是getParametergetParameterNamesgetParameterValues,通過調用這幾個方法來獲取請求對象中所包含的參數的值。

 

  request的setAttributegetAttribute方法一般都是成對出現的,首先通過setAttribute方法設置屬性與屬性值,然后通過getAttribute方法根據屬性獲取到與該屬性對應的對象值。

  setAttribute與getAttribute方法都是在服務器端內部執行的,客戶端不知道服務器端是否執行過這兩個方法。

 

  request的getParameter方法的作用是獲取到客戶端通過表單或url請求參數發送過來的參數值,是客戶端與服務器端之間的交互,服務器端要想獲取到客戶端發送過來的數據,就需要使用getParameter方法來獲取。

  沒有與getParameter方法對應的setParameter方法。

 

  request對象內數據的存活范圍就是在request對象的存活范圍內,當客戶端想服務器端發送一個請求,服務器向客戶端返回一個響應后,該請求對象就被銷毀了

  之后再向服務器端發送新的請求時,服務器會創建新的request對象,該request對象與之前的request對象沒有任何關系,因此也無法獲得在之前的request對象中所存放的任何數據。

 

response對象

  response對象代表的是對客戶端的響應,也就是說可以通過response對象來組織發送到客戶端的數據。

  但是由於組織方式比較底層,所以不建議一般人使用。

  需要向客戶端發送文字時直接用out對象即可。

 

session對象

  session對象代表服務器與客戶端所建立的會話,當需要在不同的JSP頁面中保留客戶信息的情況下使用,比如在線購物、客戶軌跡跟蹤等。

 

  HTTP是無狀態協議;

  Web Server對每一個客戶端請求都沒有歷史記憶;

  session用來保存客戶端狀態信息。

 

  瀏覽器不關閉,session對象會一直存在(姑且這樣認為),且session對象只有一個

  如果瀏覽器關閉重啟,會創建新的session對象。

 

application對象

  application對象負責提供應用程序在服務器中運行時的一些全局信息,常用的方法有getMimeType和getRealPath等。

  運用實例:網頁訪問計數器。

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'Counter.jsp' starting page</title>
    
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->

  </head>
  
  <body>
    <%
        if(application.getAttribute("counter") == null)
        {
            application.setAttribute("counter", "1");
        }
        else
        {
            String strnum = null;
            strnum = application.getAttribute("counter").toString();
            int icount = 0;
            icount = Integer.valueOf(strnum).intValue();
            icount++;
            application.setAttribute("counter", Integer.toString(icount));
            
        }
            
    %>
    
        您是第<%=application.getAttribute("counter") %>位訪問者!
        
  </body>
</html>

 

  運行結果就是訪問到該頁面之后顯示你是第幾位訪客,刷新之后數目會增加,更換瀏覽器或者更換客戶端地址都會使其訪問值正常遞增。

 

  application的存活范圍比request和session都要大。

  只要服務器沒有關閉,application對象中的數據就會一直存在在整個服務器的運行過程當中,application對象只有一個,它會被所有的用戶共享

  其中getRealPath這個方法可以獲取資源在服務器上的物理路徑(絕對路徑),常用來獲取上傳文件時要存儲文件的路徑。

 

out對象

  out對象代表了向客戶端發送數據的對象,與response對象不同,通過out對象發送的內容將是瀏覽器需要顯示的內容,是文本一級的,可以通過out對象直接向客戶端寫一個由程序動態生成的HTML文件。

  常用的方法除了print和println之外,還包括clear、clearBuffer、flush、getBufferSize和getRemaining,這是因為out對象內部包含了一個緩沖區,所以需要一些對緩沖區進行操作的方法。

 

參考資料

  聖思園張龍老師視頻教程。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM