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的小例子——猜數字,文件如下:
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:頁面上下文