JSP內置對象


HTTP協議與JSP

我們在瀏覽器中訪問的網頁,都是基於HTTP協議的。回顧我們的第一個JSP程序——Hello World,在瀏覽器輸入localhost:8080/Hello.jsp,我們就可以看到Hello world顯示在瀏覽器中。這背后是什么起了作用?

使用瀏覽器從網站獲取HTML頁面時,用到的是我們十分耳熟的、聽起來非常專業的協議——HTTP協議(超文本傳輸協議),參加博文HTTP協議概述

HTTP協議規定了信息在internet上的傳輸方法,特別是規定了瀏覽器與服務器的交互方法和傳遞信息方式。常用的方法有GET、POST等。HTTP協議中一個非常重要的內容是HTTP報文,報文是在HTTP 應用程序之間發送的數據塊,是傳遞信息的載體。詳細內容參見:http報文詳解

我們打開一個網頁的過程,簡單的說包括請求和響應兩個階段。

首先瀏覽器向目標主機打開一個連接;並對相應的資源發出請求報文。服務器收到請求后向客戶端發出響應報文,所以HTTP協議的核心就是請求和響應。

現在回到JSP的內容上,上篇博文JSP基本語法,本文為大家介紹JSP的內置對象。在JSP頁面中有些對象不用什么就可以在java程序片和表達式部分使用,這就是JSP的內置對象。

jsp包含9種內置對象:request、response、out、page、session等。其中request、response分別代表請求和響應對象,是較為重要的的兩個。這兩個對象提供了服務器和瀏覽器通信方法的控制。如果有HTTP協議的基礎,你一看字面意思就能明白這兩個對象的作用,以及一些常用的方法,快速掌握JSP也是很簡單的。HTTP協議的知識在web編程中非常重要。

《HTTP權威指南》完整文字版下載地址http://pan.baidu.com/s/1bnz1dMn

1.request:請求對象

該對象封裝了用戶提交的信息,通過調用該對象想相應的方法可以獲取封裝的信息。其主要方法如下:

request.getParameterNames(); //Enumeration<String>
request.getParameter(String name);//String
request.getHeader(Sring name); //String
request.getHeadersNames(); //Enumeration<String>
request.getRequestDispatcher("/somePage.jsp").forward(request, response); 
//請求轉發

獲取請求頭

Enumeration<String> headernames =request.getHeaderNames();
while(headernames.hasMoreElements()){
  String headername=headernames.nextElement();
  System.out.print(headername+": ");
  System.out.println(request.getHeader(headername));                        
}

獲取post數據,request.getParameter(String s)將失效

StringBuffer sb = new StringBuffer();
BufferedReader br = new BufferedReader(new InputStreamReader(
request.getInputStream()));
String s = "";
while ((s = br.readLine()) != null) {
  sb.append(s);
}
System.out.println(sb.toString());

解決中文亂碼

//post方式
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding( "utf-8" );
//get方式
String string = request.getParamers("");
String = new String(string.getBytes("ISO8859-1","utf-8"));

2.response:響應對象

該對象對客戶的請求作出響應,向客戶端發送數據。

response.sendRedirect("index.jsp"); //重定向
response.setContenType(String s);
response.addHeader(String name,String value);
response.addCookie(Cookie c);

一個典型的response的HTTP響應報文頭

HTTP/1.0 200OK 
Date: Mon,31Dec200104:25:57GMT 
Server: Apache/1.3.14(Unix) 
Content-type: text/html 
Last-modified: Tue,17Apr200106:46:28GMT 
Content-length: 39725426

關於報文的詳細內容,參加HTTP報文詳解

3.session:會話對象

Tomcat服務器可以使用session記錄有關連接的信息。這個session對象有一個String類型的ID,當客戶端請求服務器時,服務器會將這個ID號發送給客戶端,存放在客戶端的Cookie中。

生命周期:客戶端向服務器發送第一個請求,服務器創建一個Session對象,到關閉瀏覽器銷毀(近似這么理解)。

session.getID(); //String
session.setAttribute(String key,Object obj);
session.getAttribute(String key); //Object
session.isNew();

session在web開發中特別重要,是解決http協議無狀態問題的服務端方案,它能讓客戶端和服務端一系列交互動作變成一個完整的事務,能使網站變成一個真正意義上的軟件。我這里有個關於session的小例子——猜數字,文件如下:

猜數字.rar

4.application :應用程序對象

服務器啟動后就產生了這個application對象,所有用戶共享這個application對象。直到服務器關閉。

application.setAttribute(String key,Object obj);
application.getAttribute(String key); //Object

5.cookie:客戶端對象

cookie是web站點保存在用戶硬盤上的一段文本,以“鍵值對”的方式記錄。

向客戶端發送cookie

Cookie c=new Cookie("username","guang"); 
response.addCookie(c);

讀取保存在客戶端的cookie

Cookie cookies[]=request.getCookies(); 
for(Cookie c:cookies){ 
    if("username".equals(c.getName())){ 
        out.println(C.getValue()); 
    } 
} 

設置cookie的有效時間

Cookie c=new Cookie("username","tom"); 
c.setMaxAge(3600);//3600秒

 

6.out:輸出對象

out.println(); 
out.newLine(); 
out.close(); 

7.config:配置對象

8.page:頁面對象

9.pageContext:頁面上下文


免責聲明!

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



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