JSP內(nèi)置對象即無需聲明就可以直接使用的對象實例,在實際的開發(fā)過程中,比較常用的JSP對象有requestresponsesessionoutapplication等,筆者在本文章中將簡單介紹一下以上幾種對象的使用。

request對象

request對象代表這是從用戶發(fā)送過來的請求,從這個對象中可以取出客戶端用戶提交的數(shù)據(jù)或者是參數(shù),這個對象只有接受用戶請求的頁面才可以訪問。

1.request對象使用場合

如果要與用戶互動,必須要知道用戶的需求,然后根據(jù)這個需求生成用戶期望看到的結(jié)果。這樣才能實現(xiàn)與用戶的互動。在Web應用中,用戶的需求就抽象成一個request對象,這個對象中間包括了用戶的需求。request正是用來收集類似這些用戶的輸入數(shù)據(jù)和參數(shù)的。

同時,request對象中還包括一些服務器的信息,例如端口、真實路徑、訪問協(xié)議等信息,通過request對象可以取得服務器的這些參數(shù)。

不多說直接上代碼

<%@ 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行代碼設置了一個名為“attr”的屬性值

12~18行這段代碼向客戶端返回來request域的屬性值

19行代碼刪除了名為“attr”的屬性

2.request對象使用示例

1、使用request對象取得表單數(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>

解釋:在上面這個程序當中,也可以把表單提交給其他頁面,那樣只需把接受參數(shù)的方法放在對應的頁面即可.在這里只是為了方便展示問題才提交給頁面自身。

2、使用request對象取得頁面?zhèn)鬟f參數(shù)

<%@ page language="java" import="java.util.*" contentType="text/html;charset=gb2312"%>
<html>
  <head> 
    <title>request對象取得頁面?zhèn)鬟f參數(shù)示例</title>
  </head>
  <%
       String param = request.getParameter("param");
       
   %>
  <body>
      <font size="2">
      <a href="URL.jsp?param=Hello">請點擊這個鏈接</a><br>
      你提交的參數(shù)為:<%=param%>
      </font>
  </body>
</html>

解釋:在這個例子中,通過一個超鏈接完成了一次單參數(shù)的請求,并且在服務器端獲取了這個參數(shù)。其中第8行代碼在服務端獲取客戶提交的參數(shù)。第12行代碼定義另一個帶參數(shù)的超連接。

 

response對象

response對象是服務器端向客戶端返回的數(shù)據(jù),從這個對象中可以取出部分與服務器互動的數(shù)據(jù)和信息,只有接受這個對象的頁面才可以訪問這個對象。

1.response對象使用場合

既然用戶可以對服務器發(fā)出請求,服務器就需要對用戶的請求作出反應。這里服務器就可以使用response對象向用戶發(fā)送數(shù)據(jù),response是對應request的一個對象。

如果需要獲取服務器返回的處理信息,就可以對response進行操作,同時當服務器需要對客戶端進行某些操作的時候也需要response對象,例如服務器要在客戶端生成Cookies,那么這時候response對象就是一個很好的選擇。

2.response使用舉例,采用response實現(xiàn)頁面重定向。

<%@ page language="java" import="java.util.*" contentType="text/html;charset=gb2312"%>
<html>
  <head> 
    <title>response對象頁面重定向示例</title>
  </head>
  <body>
      <%
          response.sendRedirect("http://www.sohu.com");
       %>
  </body>
</html>
上面這個頁面運行的時候直接重定向到搜狐的首頁。

session對象

session對象維護者客戶端用戶和服務器端狀態(tài),從這個對象中可以去除用戶和服務器交互過程中的數(shù)據(jù)和信息。這個對象在用戶關閉瀏覽器離開Web應用之前一直有效。

1.session對象使用場合

session對象中保存的內(nèi)容是用戶與服務器整個交互過程中的信息,如果是想在整個交互的過程中都可以訪問到信息,就可以選擇存放在session對象中。

例如在用戶登錄的過程中,可以在session中記錄用戶的登錄狀態(tài),這樣用戶就不必在每個頁面都重新登錄,只要用戶沒有離開當前的Web應用系統(tǒng),就可以一直保存登錄的狀態(tài)。

2.session對象使用示例

模擬一個簡單的用戶登錄動作,在這個示例程序中不對提交的登錄信息做具體的驗證,只要用戶名和密碼都不為空就可以登錄,這樣處理知識為了方便展示session的使用方法,在具體的開發(fā)中必須要對登錄信息進行驗證。

<%@ page language="java" import="java.util.*" contentType="text/html;charset=gb2312"%>
<html>
  <head> 
    <title>用戶登錄界面</title>
  </head>
  <body>
      <font size="2">
          <form action="LoginCheck.jsp" method="post">
               用戶名:<input type="text" name="userName" size="10"/>
               密  碼:<input type="password" name="password" size="10"/>
             <input type="submit" value="提交">        
          </form>
      </font>
  </body>
</html>

上面這個JSP頁面想LoginCheck提交了一個登錄表單,表單中有用戶名和密碼。下面是LoginCheck的內(nèi)容。

<%@ page language="java" import="java.util.*" contentType="text/html;charset=gb2312"%>
<html>
  <head> 
    <title>用戶登錄驗證頁面</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>

在上面這個頁面中,從變淡中取出用戶名和密碼,如果用戶名和密碼都不為空就允許登錄,否則就重定向到登錄頁面,讓用戶重新登錄。如果用戶登錄成功,就在session中設置一個status屬性,然后把用戶重定向到系統(tǒng)的主頁面,在主頁面中可以訪問session中的值。下面是Main頁面的具體代碼

<%@ 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("用戶已經(jīng)登錄!");
              else
                  response.sendRedirect("Login.jsp");
           %>
      </font>
  </body>
</html>

在上面這個頁面中,對用戶的狀態(tài)進行判斷,如果從session中可以取出對應的屬性值,說明用戶已經(jīng)登錄,如果沒有渠道指定屬性值,說明用戶沒有登錄,這時就重定向到登錄頁面,讓用戶重新登錄。其中session的值在用戶離開系統(tǒng)之前的任何頁面都可以訪問。

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