JSP內(nèi)置對(duì)象即無(wú)需聲明就可以直接使用的對(duì)象實(shí)例,在實(shí)際的開(kāi)發(fā)過(guò)程中,比較常用的JSP對(duì)象有request,response,session,out和application等,筆者在本文章中將簡(jiǎn)單介紹一下以上幾種對(duì)象的使用。
request對(duì)象
request對(duì)象代表這是從用戶(hù)發(fā)送過(guò)來(lái)的請(qǐng)求,從這個(gè)對(duì)象中可以取出客戶(hù)端用戶(hù)提交的數(shù)據(jù)或者是參數(shù),這個(gè)對(duì)象只有接受用戶(hù)請(qǐng)求的頁(yè)面才可以訪問(wèn)。
1.request對(duì)象使用場(chǎng)合
如果要與用戶(hù)互動(dòng),必須要知道用戶(hù)的需求,然后根據(jù)這個(gè)需求生成用戶(hù)期望看到的結(jié)果。這樣才能實(shí)現(xiàn)與用戶(hù)的互動(dòng)。在Web應(yīng)用中,用戶(hù)的需求就抽象成一個(gè)request對(duì)象,這個(gè)對(duì)象中間包括了用戶(hù)的需求。request正是用來(lái)收集類(lèi)似這些用戶(hù)的輸入數(shù)據(jù)和參數(shù)的。
同時(shí),request對(duì)象中還包括一些服務(wù)器的信息,例如端口、真實(shí)路徑、訪問(wèn)協(xié)議等信息,通過(guò)request對(duì)象可以取得服務(wù)器的這些參數(shù)。
不多說(shuō)直接上代碼
<%@ page language="java" import="java.util.*" contentType="text/html;charset=gb2312"%> <html> <head> <title>request主要方法調(diào)用示例</title> </head> <body> <font size="2"> request主要方法調(diào)用示例:<br> <% request.setAttribute("attr","Hello!"); out.println("attr屬性的值為:"+request.getAttribute("attr")+"<br>"); out.println("上下文路徑為:"+request.getContextPath()+"<br>"); out.println("Cookies:"+request.getCookies()+"<br>"); out.println("Host:"+request.getHeader("Host")+"<br>"); out.println("ServerName:"+request.getServerName()+"<br>"); out.println("ServerPort:"+request.getServerPort()+"<br>"); out.println("RemoteAddr:"+request.getRemoteAddr()+"<br>"); request.removeAttribute("attr"); out.println("屬性移除操作以后attr屬性的值為:"+request.getAttribute("attr")+"<br>"); %> </font> </body> </html>
第11行代碼設(shè)置了一個(gè)名為“attr”的屬性值
第12~18行這段代碼向客戶(hù)端返回來(lái)request域的屬性值
第19行代碼刪除了名為“attr”的屬性
2.request對(duì)象使用示例
1、使用request對(duì)象取得表單數(shù)據(jù)
<%@ page language="java" import="java.util.*" contentType="text/html;charset=gb2312"%> <html> <head> <title>request主要方法調(diào)用示例</title> </head> <body> <font size="2"> request主要方法調(diào)用示例:<br> <% request.setAttribute("attr","Hello!"); out.println("attr屬性的值為:"+request.getAttribute("attr")+"<br>"); out.println("上下文路徑為:"+request.getContextPath()+"<br>"); out.println("Cookies:"+request.getCookies()+"<br>"); out.println("Host:"+request.getHeader("Host")+"<br>"); out.println("ServerName:"+request.getServerName()+"<br>"); out.println("ServerPort:"+request.getServerPort()+"<br>"); out.println("RemoteAddr:"+request.getRemoteAddr()+"<br>"); request.removeAttribute("attr"); out.println("屬性移除操作以后attr屬性的值為:"+request.getAttribute("attr")+"<br>"); %> </font> </body> </html>
解釋?zhuān)涸谏厦孢@個(gè)程序當(dāng)中,也可以把表單提交給其他頁(yè)面,那樣只需把接受參數(shù)的方法放在對(duì)應(yīng)的頁(yè)面即可.在這里只是為了方便展示問(wèn)題才提交給頁(yè)面自身。
2、使用request對(duì)象取得頁(yè)面?zhèn)鬟f參數(shù)
<%@ page language="java" import="java.util.*" contentType="text/html;charset=gb2312"%> <html> <head> <title>request對(duì)象取得頁(yè)面?zhèn)鬟f參數(shù)示例</title> </head> <% String param = request.getParameter("param"); %> <body> <font size="2"> <a href="URL.jsp?param=Hello">請(qǐng)點(diǎn)擊這個(gè)鏈接</a><br> 你提交的參數(shù)為:<%=param%> </font> </body> </html>
解釋?zhuān)涸谶@個(gè)例子中,通過(guò)一個(gè)超鏈接完成了一次單參數(shù)的請(qǐng)求,并且在服務(wù)器端獲取了這個(gè)參數(shù)。其中第8行代碼在服務(wù)端獲取客戶(hù)提交的參數(shù)。第12行代碼定義另一個(gè)帶參數(shù)的超連接。
response對(duì)象
response對(duì)象是服務(wù)器端向客戶(hù)端返回的數(shù)據(jù),從這個(gè)對(duì)象中可以取出部分與服務(wù)器互動(dòng)的數(shù)據(jù)和信息,只有接受這個(gè)對(duì)象的頁(yè)面才可以訪問(wèn)這個(gè)對(duì)象。
1.response對(duì)象使用場(chǎng)合
既然用戶(hù)可以對(duì)服務(wù)器發(fā)出請(qǐng)求,服務(wù)器就需要對(duì)用戶(hù)的請(qǐng)求作出反應(yīng)。這里服務(wù)器就可以使用response對(duì)象向用戶(hù)發(fā)送數(shù)據(jù),response是對(duì)應(yīng)request的一個(gè)對(duì)象。
如果需要獲取服務(wù)器返回的處理信息,就可以對(duì)response進(jìn)行操作,同時(shí)當(dāng)服務(wù)器需要對(duì)客戶(hù)端進(jìn)行某些操作的時(shí)候也需要response對(duì)象,例如服務(wù)器要在客戶(hù)端生成Cookies,那么這時(shí)候response對(duì)象就是一個(gè)很好的選擇。
2.response使用舉例,采用response實(shí)現(xiàn)頁(yè)面重定向。
<%@ page language="java" import="java.util.*" contentType="text/html;charset=gb2312"%> <html> <head> <title>response對(duì)象頁(yè)面重定向示例</title> </head> <body> <% response.sendRedirect("http://www.sohu.com"); %> </body> </html>上面這個(gè)頁(yè)面運(yùn)行的時(shí)候直接重定向到搜狐的首頁(yè)。
session對(duì)象
session對(duì)象維護(hù)者客戶(hù)端用戶(hù)和服務(wù)器端狀態(tài),從這個(gè)對(duì)象中可以去除用戶(hù)和服務(wù)器交互過(guò)程中的數(shù)據(jù)和信息。這個(gè)對(duì)象在用戶(hù)關(guān)閉瀏覽器離開(kāi)Web應(yīng)用之前一直有效。
1.session對(duì)象使用場(chǎng)合
session對(duì)象中保存的內(nèi)容是用戶(hù)與服務(wù)器整個(gè)交互過(guò)程中的信息,如果是想在整個(gè)交互的過(guò)程中都可以訪問(wèn)到信息,就可以選擇存放在session對(duì)象中。
例如在用戶(hù)登錄的過(guò)程中,可以在session中記錄用戶(hù)的登錄狀態(tài),這樣用戶(hù)就不必在每個(gè)頁(yè)面都重新登錄,只要用戶(hù)沒(méi)有離開(kāi)當(dāng)前的Web應(yīng)用系統(tǒng),就可以一直保存登錄的狀態(tài)。
2.session對(duì)象使用示例
模擬一個(gè)簡(jiǎn)單的用戶(hù)登錄動(dòng)作,在這個(gè)示例程序中不對(duì)提交的登錄信息做具體的驗(yàn)證,只要用戶(hù)名和密碼都不為空就可以登錄,這樣處理知識(shí)為了方便展示session的使用方法,在具體的開(kāi)發(fā)中必須要對(duì)登錄信息進(jìn)行驗(yàn)證。
<%@ page language="java" import="java.util.*" contentType="text/html;charset=gb2312"%> <html> <head> <title>用戶(hù)登錄界面</title> </head> <body> <font size="2"> <form action="LoginCheck.jsp" method="post"> 用戶(hù)名:<input type="text" name="userName" size="10"/> 密 碼:<input type="password" name="password" size="10"/> <input type="submit" value="提交"> </form> </font> </body> </html>
上面這個(gè)JSP頁(yè)面想LoginCheck提交了一個(gè)登錄表單,表單中有用戶(hù)名和密碼。下面是LoginCheck的內(nèi)容。
<%@ page language="java" import="java.util.*" contentType="text/html;charset=gb2312"%> <html> <head> <title>用戶(hù)登錄驗(yàn)證頁(yè)面</title> </head> <% String userName = request.getParameter("userName"); String password = request.getParameter("password"); if(userName.length()>0&&password.length()>0) { session.setAttribute("status","Login"); response.sendRedirect("Main.jsp"); }else response.sendRedirect("Login.jsp"); %> <body> </body> </html>
在上面這個(gè)頁(yè)面中,從變淡中取出用戶(hù)名和密碼,如果用戶(hù)名和密碼都不為空就允許登錄,否則就重定向到登錄頁(yè)面,讓用戶(hù)重新登錄。如果用戶(hù)登錄成功,就在session中設(shè)置一個(gè)status屬性,然后把用戶(hù)重定向到系統(tǒng)的主頁(yè)面,在主頁(yè)面中可以訪問(wèn)session中的值。下面是Main頁(yè)面的具體代碼
<%@ page language="java" import="java.util.*" contentType="text/html;charset=gb2312"%> <html> <head> <title>系統(tǒng)主界面</title> </head> <body> <font size="2"> <% Object status = session.getAttribute("status"); if(session.getAttribute("status")!=null) out.print("用戶(hù)已經(jīng)登錄!"); else response.sendRedirect("Login.jsp"); %> </font> </body> </html>
在上面這個(gè)頁(yè)面中,對(duì)用戶(hù)的狀態(tài)進(jìn)行判斷,如果從session中可以取出對(duì)應(yīng)的屬性值,說(shuō)明用戶(hù)已經(jīng)登錄,如果沒(méi)有渠道指定屬性值,說(shuō)明用戶(hù)沒(méi)有登錄,這時(shí)就重定向到登錄頁(yè)面,讓用戶(hù)重新登錄。其中session的值在用戶(hù)離開(kāi)系統(tǒng)之前的任何頁(yè)面都可以訪問(wèn)。