Jsp技術A(一)之9大內置對象應用範圍

一、四種屬性範圍

1.1、在JSP中提供了四種屬性保存範圍

  • page:在當前頁面內保存屬性,跳轉之後無效
  • request: 只能將請求保存在一次請求範圍之內且必須是使用服務器跳轉<jsp:forward/>,而超鏈接不可以,因爲超鏈                接是 客戶 端跳轉
  • session:-在瀏覽器和服務器一次會話範圍內有效,無論何種跳轉都可以使用,關閉瀏覽器就會失效;(可用於驗證用              戶 登錄)
  • application:在整個服務器上保存,所有用戶都可以使用,如果服務器關閉一次,所有的applicaton屬性都會消失,               (用於統計網站  用戶的訪問量)

建議:(由於該屬性保存在服務器上,如果保存的內容過多,肯定會影響服務器的性能,所以儘量少設置application屬性)

1.2、4種屬性範圍都支持的操作

  1. public void setAttribute(String name,Object value)  
  2. public Object getAttribute(String name)  
  3. public Object removeAttribute(String name)  

下面,我們來對四種範圍來分別進行詳細的介紹

 

1.3、page範圍

在JSP中設置一個頁的屬性範圍,必須通過pageContext完成,PageContext屬性範圍是最重要的JSP屬性之一,但是如果使用純粹的JSP代碼開發,此屬性顯示不出用處,其發揮作用在 Struts ,WebWork 中

如下:

<%@page import="java.util.*"%>  

<%@ page language="java" contentType="text/html; charset=UTF-8"  

    pageEncoding="UTF-8"%>  

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  

<html>  

<head>  

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  

<title>Insert title here</title>  

</head>  

<body>  

<%  

//設置page屬性範圍,此屬性只在當前JSP頁面內起作用  

pageContext.setAttribute("name", "linbingwen");  

pageContext.setAttribute("time", new Date());  

%>  

姓名:${pageScope.name}<br>  

時間:${pageScope.time}<br>  

</body>  

</html>  

${pageScope.name}這裏用了EL表達式來取得值,輸出結果如下,

 

這裏要注意發果在其它頁面使用:

如下:

<%@page import="java.util.*"%>  

<%@ page language="java" contentType="text/html; charset=UTF-8"  

    pageEncoding="UTF-8"%>  

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  

<html>  

<head>  

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  

<title>Insert title here</title>  

</head>  

<body>  

姓名:${pageScope.name}<br>  

時間:${pageScope.time}<br>  

</body>  

</html>  

輸出結果:

 

這說明page範圍的值只能在本頁使用!

1.4、request屬性範圍

request將屬性保存在一次請求範圍之內:

前提:必須使用服務器端跳轉:<jsp:forward/> 應用點:MVC設計模式、Struts、 Webwork

應用實例

首先是設置request:

request.jsp

[html] view plaincopy
<%@page import="java.util.*"%>  
<%@ page language="java" contentType="text/html; charset=UTF-8"  
    pageEncoding="UTF-8"%>  
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
<html>  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
<title>Insert title here</title>  
</head>  
<body>  
<%  
//設置request屬性範圍  
request.setAttribute("name", "linbingwen");  
request.setAttribute("time", new Date());  
%>  
 <jsp:forward page="requestResult.jsp"/>   
</body>  
</html>  

然後是顯示requestResult.jsp

<%@page import="java.util.*"%>  
<%@ page language="java" contentType="text/html; charset=UTF-8"  
    pageEncoding="UTF-8"%>  
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
<html>  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
<title>Insert title here</title>  
</head>  
<body>  
獲取request姓名:${requestScope.name}<br>  
獲取request時間:${requestScope.time}<br>  
</body>  
</html>  

訪問結果:

這時比如requestResult1.jsp也想來訪問這兩個屬性

內容和requestResult.jsp一樣:

<%@page import="java.util.*"%>  
<%@ page language="java" contentType="text/html; charset=UTF-8"  
    pageEncoding="UTF-8"%>  
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
<html>  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
<title>Insert title here</title>  
</head>  
<body>  
獲取request姓名:${requestScope.name}<br>  
獲取request時間:${requestScope.time}<br>  
</body>  
</html>  

結果如下,說明request只針對服務器跳轉有效,在兩次跳轉之間保存。

1.5、session屬性範圍

session:只要設置上去,則不管是什麼跳轉,都可以取得屬性,主要用於驗證用戶是否登陸。EMAIL--->用戶需要先進行登陸,登陸成功後再編輯郵件。與session有關的任何打開的頁面都可以取得session

比如session.jsp設置如下:

<%@page import="java.util.*"%>  
<%@ page language="java" contentType="text/html; charset=UTF-8"  
    pageEncoding="UTF-8"%>  
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
<html>  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
<title>Insert title here</title>  
</head>  
<body>  
<%  
//設置session屬性範圍  
session.setAttribute("name", "linbingwen");  
session.setAttribute("time", new Date());  
%>  
<a href="sessionResult.jsp">獲取session內容</a>  
</body>  
</html>  

然後是取出sesson的值sessionResult.jsp

<%@page import="java.util.*"%>  
<%@ page language="java" contentType="text/html; charset=UTF-8"  
    pageEncoding="UTF-8"%>  
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
<html>  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
<title>Insert title here</title>  
</head>  
<body>  
獲取session姓名:${sessionScope.name}<br>  
獲取session時間:${sessionScope.time}<br>  
</body>  
</html>  

輸出結果:

如果還有一個sessionResult1.jsp和sessionResult.jsp一樣如下

<%@page import="java.util.*"%>  
<%@ page language="java" contentType="text/html; charset=UTF-8"  
    pageEncoding="UTF-8"%>  
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
<html>  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
<title>Insert title here</title>  
</head>  
<body>  
<%  
//設置request屬性範圍  
session.setAttribute("name", "linbingwen");  
session.setAttribute("time", new Date());  
%>  
<a href="sessionResult.jsp">獲取session內容</a>  
</body>  
</html>  
  
然後是取出sesson的值sessionResult.jsp  
  
<%@page import="java.util.*"%>  
<%@ page language="java" contentType="text/html; charset=UTF-8"  
    pageEncoding="UTF-8"%>  
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
<html>  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
<title>Insert title here</title>  
</head>  
<body>  
獲取session姓名:${sessionScope.name}<br>  
獲取session時間:${sessionScope.time}<br>  
</body>  
</html>  

注意看上面的GIF動畫和這裏的獲取到的時間是一樣的,這也說明了這兩個jsp頁面取得了同一個值 

1.6、application屬性範圍

只要設置一次,則所有的頁面窗口都可以取得數據。這裏的值將會保存在服務器上,所以每一個用戶都可以看見。

如下面application.jsp:

<%@page import="java.util.*"%>  
<%@ page language="java" contentType="text/html; charset=UTF-8"  
    pageEncoding="UTF-8"%>  
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
<html>  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
<title>Insert title here</title>  
</head>  
<body>  
<%  
//設置request屬性範圍  
application.setAttribute("name", "linbingwen");  
application.setAttribute("time", new Date());  
%>  
<a href="applicationResult.jsp">獲取application內容</a>  
</body>  
</html>  

然後是applicationResult.jsp

<%@page import="java.util.*"%>  
<%@ page language="java" contentType="text/html; charset=UTF-8"  
    pageEncoding="UTF-8"%>  
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
<html>  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
<title>Insert title here</title>  
</head>  
<body>  
獲取application姓名:${applicationScope.name}<br>  
獲取application時間:${applicationScope.time}<br>  
</body>  
</html>  

輸出結果:

如果這時在新建一個網頁或新建一個新的web項目,但是它們兩個要運行在同一個Tomcat中,那麼它同樣也能訪問到這個值。

注意:

pplication、session、request--==--》都與要跨多個頁,屬性保存是有內存開銷的,設置過多的application或每一個session保存過多的對象,性能就降低了。

原則:能用request就不要用session,能用session就不要用application

application應用:在線人員統計、在線人員名單列表,要釋放application資源,只能重新啓動服務器.

使用application緩存數據庫的連接,每次使用時,從緩衝中取出,用完就返回。

二、JSP九大內置對象詳解

內置對象(又叫隱含對象,有9個內置對象):不需要預先聲明就可以在腳本代碼和表達式中隨意使用

JSP內置對象映射表

request              請求對象                 類型 javax.servlet.ServletRequest        作用域 Request
response           響應對象                   類型 javax.servlet.SrvletResponse       作用域  Page
pageContext      頁面上下文對象         類型 javax.servlet.jsp.PageContext      作用域    Page
session             會話對象                   類型 javax.servlet.http.HttpSession       作用域    Session
application        應用程序對象            類型 javax.servlet.ServletContext          作用域    Application
out                    輸出對象                   類型 javax.servlet.jsp.JspWriter             作用域    Page
config               配置對象                   類型 javax.servlet.ServletConfig            作用域    Page
page                頁面對象                   類型 javax.lang.Object                            作用域    Page
exception         例外對象                   類型 javax.lang.Throwable                     作用域    page

JSP中一共預先定義了9個這樣的對象,分別爲:request、response、session、application、out、pagecontext、config、page、exception

2.1、request對象

request 對象是 javax.servlet.httpServletRequest類型的對象。 該對象代表了客戶端的請求信息,主要用於接受通過HTTP協議傳送到服務器的數據。(包括頭信息、系統信息、請求方式以及請求參數等)。request對象的作用域爲一次請求。

實現常有的方法

1、獲取數據

  1. getParameter;;接收請求參數的,

2,對所有數據進行再編碼

  1. public byte[] getBytes(“encoding”)  

如下實例將byte數組編碼轉換

<%@ page contentType="text/html";charset=gbk"%>  
<html>  
       <body>  
             <%  
                     //接收內容  
                     String name=request.getParameter("uname");  
                     byte[] b=name.getBytes("ISO8859-1");  
                     name=new String(b);  
                     String name= new String(request.getParameter("uname").getBytes("ISO8859-1"));  
              %>  
              <h1>輸入內容爲:<%=name%></h1>  
       </body>  
</html>  

3、設置統一的請求編碼

  1. public void setCharacterEncoding(String env) throws UnsunpportedEncodingException  

如下設置:

<%@ page contentType="text/html";charset=gbk"%>  
<html>  
       <body>  
              <%  
                     //接收內容  
                     request.setCharacterEncoding("GBK");  
                     String name= request.getParameter("uname");  
              %>  
              <h1>輸入內容爲:<%=name%></h1>  
       </body>  
</html>  

4、獲取requst信息:

<%@ page language="java" contentType="text/html; charset=UTF-8"  
    pageEncoding="UTF-8"%>  
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
<html>  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
<title>Insert title here</title>  
</head>  
<body bgcolor="#FFFFF0">  
<form action="" method="post">  
   <input type="text" name="name">  
   <input type="submit" value="提交">  
</form>  
請求方式:<%=request.getMethod()%><br>  
請求的資源:<%=request.getRequestURI()%><br>  
請求用的協議:<%=request.getProtocol()%><br>  
請求的文件名:<%=request.getServletPath()%><br>  
請求的服務器的IP:<%=request.getServerName()%><br>  
請求服務器的端口:<%=request.getServerPort()%><br>  
客戶端IP地址:<%=request.getRemoteAddr()%><br>  
客戶端主機名:<%=request.getRemoteHost()%><br>  
表單提交來的值:<%=request.getParameter("name")%><br>  
</body>  
</html>  

我們第一次訪問是默認用GET方法,表單提交後使用POST方式。

2.2、response對象

        response 代表的是對客戶端的響應,主要是將JSP容器處理過的對象傳回到客戶端。response對象也具有作用域,它只在JSP頁面內有效。response對象的主要使用1.設置HTTP頭信息、重定向、設置COOKie
(1).Web服務器收到一個http請求,會針對每個請求創建一個HttpServletRequest和HttpServletResponse對象,向客戶端發送數據找HttpServletResponse,從客戶端取數據找HttpServletRequest;

(2).HttpServletResponse對象可以向客戶端發送三種類型的數據:a.響應頭b.狀態碼c.數據

2.2.1、response對象所提供的方法。
(1)設定表頭的方法

void addCookie(Cookie cookie) 新增cookie  
void addDateHeader(String name, long date) 新增long類型的值到name標頭  
void addHeader(String name, String value) 新增String類型的值到name標頭  
void addIntHeader(String name, int value) 新增int類型的值到name標頭  
void setDateHeader(String name, long date) 指定long類型的值到name標頭  
void setHeader(String name, String value) 指定String類型的值到name標頭  
void setIntHeader(String name, int value) 指定int類型的值到name標頭  
containsHeader( String name )判斷指定名字的HTTP文件頭是否已經存在,然後返回真假布爾值 

(2)設定響應狀態碼的方法

void sendError(int sc) 傳送狀態碼(status code)  
void sendError(int sc, String msg) 傳送狀態碼和錯誤信息  
void setStatus(int sc) 設定狀態碼  

(3)用來URL 重寫(rewriting)的方法

 String encodeRedirectURL(String url) 對使用sendRedirect( )方法的URL予以編碼  

(4)設置重定向

 sendRedirect():設置重定向頁面.  

2.2.2、使用範例
(1)使用response對象可以設置HTTP的頭信息。格式response.setHeader(“頭信息名稱”,”參數”),其中一個重要的頭信息:refresh(刷新)。例如,每秒刷新一次也沒,顯示刷新次數:

<%@page import="java.util.*"%>  
<%@ page language="java" contentType="text/html; charset=UTF-8"  
    pageEncoding="UTF-8"%>  
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
<html>  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
<title>Insert title here</title>  
</head>  
<body>  
 <%!int i=0; %>    
 <%    
  //每秒刷新一次     
   response.setHeader("refresh","1");    
 %>    
<%=i++ %>    
</body>  
</html>  

輸出結果如下:

 

(2)重定向

<%@page import="java.util.*"%>  
<%@ page language="java" contentType="text/html; charset=UTF-8"  
    pageEncoding="UTF-8"%>  
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
<html>  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
<title>Insert title here</title>  
</head>  
<body>  
<%    
      response.setHeader("refresh","3;URL=index.jsp") ;    
      %>    
      三秒後跳轉!!!<br>    
      如果沒有跳轉,請按<a href="index.jsp">這裏</a>!!!    
</body>  
</html>  

來輸出結果看看:

輸入http://localhost:8080/JspLearning/responseObject1.jsp,三秒後自動跳轉到http://localhost:8080/JspLearning/index.jsp



當然還可以使用response.sendRedirect("**.jsp");命令

如下:

<%@page import="java.util.*"%>  
<%@ page language="java" contentType="text/html; charset=UTF-8"  
    pageEncoding="UTF-8"%>  
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
<html>  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
<title>Insert title here</title>  
</head>  
<body>  
<%    
response.sendRedirect("index.jsp");  
%>   
</body>  
</html>  

輸出結果,直接重定向返回到首頁了,

(3)設置cookie

<%@pagecontentType="text/html;charset=gb2312"%>  
<HTML>  
<HEAD>  
<TITLE>Cookie的使用</TITLE>  
</HEAD>  
<BODY>  
<%  
Cookie c1 = newCookie("name","aaa") ;  
Cookie c2 = newCookie("password","111") ;  
// 最大保存時間爲60秒  
c1.setMaxAge(60) ;  
c2.setMaxAge(60) ;  
// 通過response對象將Cookie設置到客戶端  
response.addCookie(c1) ;  
response.addCookie(c2) ;  
%>  
</BODY>  
</HTML>   

(4)讀取cookie

<%@page contentType="text/html;charset=gb2312"%>  
<HTML>  
<HEAD>  
<TITLE>Cookie的使用</TITLE>  
</HEAD>  
<BODY>  
<%  
// 通過request對象,取得客戶端設置的全部Cookie  
// 實際上客戶端的Cookie是通過HTTP頭信息發送到服務器端上的  
Cookie c[] = request.getCookies() ;  
%>  
<%  
for(int i=0;i<c.length;i++){  
Cookie temp = c[i] ;  
%>  
<h1><%=temp.getName()%> --> <%=temp.getValue()%></h1>  
<%  
}  
%>  
</BODY>  
</HTML>  

2.3、session對象

session 對象是由服務器自動創建的與用戶請求相關的對象。服務器爲每個用戶都生成一個session對象,用於保存該用戶的信息,跟蹤用戶的操作狀態。session對象內部使用Map類來保存數據,因此保存數據的格式爲 “Key/value”。 session對象的value可以使複雜的對象類型,而不僅僅侷限於字符串類型。

(1)session(會話)對象是類javax.servlet.Httpsession的一個對象。session是從客戶端連接服務器開始,到與服務器斷開爲止。
(2)session對象用於保存每個與服務器建立連接的客戶端的信息,session的ID保存於客戶端的Cookie中,這個session ID標識唯一和用戶,與其他用戶的session ID不同。
(3)session對象的ID:
當一個客戶端訪問服務器的一個JSP頁面時,JSP引擎產生一個session對象,同時分配一個String類型的ID號,併發給客戶端。客戶端將其存儲於Cookie.a其標誌了一個唯一的ID;採用getID()方法返回session對象在服務器端的編號。服務器端通過此ID,唯一地識別一個用戶,並提供特殊的服務。
(4)session對象的有效期:
存在以下幾個情況時,session對象和其存儲的數據會消失,情況有:
當用戶關閉當前正在使用的瀏覽器時;
關閉網頁服務器。
用戶未向服務器提出請求超預設時,Tomcat服務器預設爲30分鐘;
運行程序結束session.
出現以上四種情況時,session對象會消失。

以下是一個簡單的session登陸實例:

login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"  
    pageEncoding="UTF-8"%>  
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
<html>  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
<title>Insert title here</title>  
</head>  
<body>  
<form action="login.jsp" method="post">    
    用戶名:<input type="text" name="uname"><br>    
    密  碼:<input type="password" name="upass"><br>    
    <input type="submit" value="登錄">    
    <input type="reset" value="重置">    
</form>    
<%    
    String name = (String)request.getParameter("uname");    
    String password = (String)request.getParameter("upass");    
    if(!(name == null || "".equals(name) || password == null || "".equals(password))){    
        if("linlin".equals(name) && "123456".equals(password)){    
            //如果登錄成功,則設置session的屬性範圍    
            session.setAttribute("userid", name);    
            response.setHeader("refresh","3;URL= welcome.jsp");     
%>            
            <h3>用戶登錄成功!三秒後跳轉到歡迎頁……</h3>    
            <h3>如果沒有跳轉,請按<a href="welcome.jsp">這裏</a></h3>    
<%    
        }else{    
%>    
            <h3>錯誤的用戶名或密碼!</h3>    
<%    
        }     
    }    
%>    
</body>  
</html>  

welcome.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"  
    pageEncoding="UTF-8"%>  
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
<html>  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
<title>Insert title here</title>  
</head>  
<body>  
<%   //如果已經設置過了session屬性,則肯定不爲空    
    if(session.getAttribute("userid") != null){    
%>    
        <h3>歡迎<%=session.getAttribute("userid")%>登陸~~~~~~~~~~<a href="logout.jsp">註銷</a></h3>    
<%    
    }else{    
%>    
        <h3>請先進行本系統的<a href="login.jsp">登錄</a></h3>    
<%    
    }    
%>    
</body>  
</html>  

logout.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"  
    pageEncoding="UTF-8"%>  
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
<html>  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
<title>Insert title here</title>  
</head>  
<body>  
<%    
    response.setHeader("refresh", "2;URL=login.jsp");    
    session.invalidate();   //註銷表示當前的session失效    
%>    
<h3>你已成功退出本系統,兩秒後返回到首頁!</h3>    
<h3>如果沒有跳轉,請按<a href="login.jsp">這裏</a></h3>  首頁  
</body>  
</html>  

結果如下:輸入正確用戶名和密碼後,等三秒,自動跳轉到歡迎界面welcome.jsp。歡迎界面裏點註銷,重定向的註銷界面login.jsp,等2秒後自動跳轉到login.jsp

2.4、application對象

application 對象可將信息保存在服務器中,直到服務器關閉,否則application對象中保存的信息會在整個應用中都有效。與session對象相比,application對象生命週期更長,類似於系統的“全局變量”。

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

<%@page import="java.util.*"%>  
<%@ page language="java" contentType="text/html; charset=UTF-8"  
    pageEncoding="UTF-8"%>  
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
<html>  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
<title>Insert title here</title>  
</head>  
<body>  
  <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>  


輸出結果:

運行結果就是訪問到該頁面之後顯示你是第幾位訪客,刷新之後數目會增加,更換瀏覽器或者更換客戶端地址都會使其訪問值正常遞增。
    application的存活範圍比request和session都要大。只要服務器沒有關閉,application對象中的數據就會一直存在,在整個服務器的運行過程當中,application對象只有一個,它會被所有的用戶共享。其中getRealPath這個方法可以獲取資源在服務器上的物理路徑(絕對路徑),常用來獲取上傳文件時要存儲文件的路徑。

2.5、out 對象

out 對象用於在Web瀏覽器內輸出信息,並且管理應用服務器上的輸出緩衝區。在使用 out 對象輸出數據時,可以對數據緩衝區進行操作,及時清除緩衝區中的殘餘數據,爲其他的輸出讓出緩衝空間。待數據輸出完畢後,要及時關閉輸出流。

2.6、pageContext 對象

pageContext 對象的作用是取得任何範圍的參數,通過它可以獲取 JSP頁面的out、request、reponse、session、application 等對象。pageContext對象的創建和初始化都是由容器來完成的,在JSP頁面中可以直接使用 pageContext對象。

2.7、config 對象

config 對象的主要作用是取得服務器的配置信息。通過 pageConext對象的 getServletConfig() 方法可以獲取一個config對象。當一個Servlet 初始化時,容器把某些信息通過 config對象傳遞給這個 Servlet。 開發者可以在web.xml 文件中爲應用程序環境中的Servlet程序和JSP頁面提供初始化參數。

config 對象代表當前JSP 配置信息,但JSP 頁面通常無須配置,因此也就不存在配置信息。該對象在JSP 頁面中非常少用,但在Servlet 則用處相對較大。因爲Servlet 需要配置在web.xml 文件中,可以指定配置參數。

2.8、page 對象

page 對象代表JSP本身,只有在JSP頁面內纔是合法的。 page隱含對象本質上包含當前 Servlet接口引用的變量,類似於Java編程中的 this 指針。

1 什麼是page對象 ?
(1) page對象代表JSP頁面本身
page對象是當前JSP頁面本身的一個實例,page對象在當前JSP頁面中可以用this關鍵字來替代。

(2) 在JSP頁面哪些地方可以使用page對象
在JSP頁面的Java程序片中可以使用page對象
在JSP頁面的JSP表達式中可以使用page對象

(3) page對象的基類是:java.lang.Object類。
注意:如果直接通過page對象來調用方法,就只能調用Object類中的那些方法。

(4) javax,servlet.jsp.JspPage接口
JspPage接口繼承於javax.servlet.Servlet接口。

我們可以使用JspPage接口對page對象進行強制類型轉換,再調用JspPage接口中的各種方法。

(5) javax,servlet.jsp.HttpJspPage接口
HttpJspPage接口繼承於:
javax.servlet.jsp.JspPage接口和javax.servlet.Servlet接口。

我們可以使用HttpJspPage接口對page對象進行強制類型轉換,再調用HttpJspPage接口中的各種方法。

(6) 在JSP頁面中使用this關鍵字,可調用哪些方法?
在JSP頁面中,this關鍵字表示當前JSP頁面這個對象,可以調用的常見方法,如下所示:

2.9、exception 對象

      Exception對象是用來處理Jsp頁面文件在執行時所有發生的錯誤和異常;Jsp頁面文件必須在isErrorPage=true的情況下纔可以使用該對象;該對象一般配合Page指令一起使用,通過指定某個頁面爲錯誤處理頁面,把所有的錯誤都集中到那個頁面進行處理,可以使整個系統的性能得到加強;常用方法如下
getMessage():返回錯誤信息
toString:以字符串的形式返回一個對異常的描述
printStackTrace():以標準錯誤的形式輸出一個錯誤和錯誤的堆棧

(1) 可能出錯的頁面:
在有可能產生異常或錯誤的JSP頁面中,使用page指令設置errorPage屬性,屬性值爲能夠進行異常處理的某個JSP頁面。
簡單來說,只要在當前JSP頁面中產生了異常,就交給另外一個專門處理異常的JSP頁面。

(2) 專門處理錯誤的頁面:
在專門負責處理異常的JSP頁面中,使用page指令設置isErrorPage屬性爲true,並使用exception對象來獲取出錯信息。

本文轉自博主:https://www.cnblogs.com/zhanghaiyang/p/7213346.html

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章