JSP內(nèi)置對(duì)象即無(wú)需聲明就可以直接使用的對(duì)象實(shí)例,在實(shí)際的開(kāi)發(fā)過(guò)程中,比較常用的JSP對(duì)象有requestresponsesessionoutapplication等,筆者在本文章中將簡(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)。

作者:beijiguangyong 發(fā)表于2012-3-31 23:22:18 原文鏈接
閱讀:145 評(píng)論:3 查看評(píng)論