1. 程式人生 > >JavaEE(1)——常用內建物件

JavaEE(1)——常用內建物件

1 實驗目的

  1. 掌握如何獲得請求引數
  2. 瞭解如何通過請求物件獲得客戶資訊;
  3. 重點掌握request物件、session物件、application物件的用法;
  4. 重點掌握使用請求物件儲存資料請求轉發

2 實驗原理

2.1 request 物件

request物件封裝了伺服器資訊(如埠號、真實路徑及訪問協議等)、客戶端使用者請求資訊等。通過request物件可以獲取伺服器資訊客戶端請求資訊等。

2.2 session 物件

在Web中,session物件有兩個含義:

  1. 代表一種生命週期,指使用者在瀏覽某個網站時,從進入網站到瀏覽器關閉這段時間,也就是使用者瀏覽網站所花費的這段時間;
  2. 容器性的內建物件,有伺服器為使用者自動建立,為使用者都享,常用來存放session生命週期中的有關資訊。

2.3 application 物件

application物件儲存著Web應用執行期間的全域性資料和資訊,從Web應用開始執行,該物件就被建立,在整個Web應用執行期間可以在任何JSP頁面中訪問這個物件,如果要儲存整個Web應用執行期間都可以訪問的資料,就要用到application物件。

3 實驗內容與步驟

3.1 表單傳參

編寫使用者表單JSP程式,顯示使用者表單傳遞結果。

3.1.1 編寫 req_form.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html> <head> <title>My JSP 'req_form.jsp' starting page</title> </head> <body> <form action="req_recv.jsp" method="post"> <table border="1"> <tr><td>使用者名稱:</td><td><input type="text" name="name"
>
</td></tr> <tr><td>&nbsp;&nbsp; &nbsp;碼:</td><td><input type="password" name="password"></td></tr> <tr><td colspan="2"> <input type="checkbox" name="hobby" value="騎車">騎自行車 <input type="checkbox" name="hobby" value="駕車">駕駛小汽車 </td> </tr> <tr align="center"> <td colspan="2"> <input type="submit" value="提交"> <input type="reset" value="取消"> </td> </tr> </table> </form> </body> </html>

3.1.2 編寫req_recv.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ page import="java.util.Enumeration" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>  
    <title>request物件測試</title>
  </head> 
  <body>
    <%
       request.setCharacterEncoding("UTF-8");
       String parameterName=null;
       String[] parameterValue=null;
     %>
     <p>使用request.getParameter("name")獲取表單所有引數</p>
     <%
       out.println(request.getParameter("name"));
      %>
       <p>使用request.getParameterNames("name")獲取表單所有引數</p>
      <%
         Enumeration en=request.getParameterNames();
         int j=0;
         while(en.hasMoreElements()){
            parameterName=(String)en.nextElement();
            parameterValue=request.getParameterValues(parameterName);
            out.println("表單引數名稱:" + parameterName + "=");
       %>
       <%
         for(int i=0;i<parameterValue.length;i++){
        %>
        <%=parameterValue[i] %>
        <%} %><br/>
        <% } %>
  </body>
</html>

3.1.3 使用類似下面的URL訪問之

將出現如圖2-1所示表單介面。

圖2-1 單擊提交按鈕,彈出圖2 -2所示介面。

圖2-2

3.2 模擬使用者登入

模擬一個使用者登入動作,在這個實驗中,不對使用者提交資訊作登入驗證,只要使用者名稱和密碼不為空即可登入。

登入時將使用者資訊儲存在session物件中(這樣處理只是方便說明session物件的用法,具體開發中必須對登入資訊進行資料庫驗證)。

編寫3個JSP程式login.jsploginCheck.jspmain.jsp,程式功能分別是:

  1. 進行使用者登入
  2. 登入資訊處理
  3. 登入後工作頁面中獲取儲存在session中的使用者資訊。

3.2.1 編寫login.jsp

<%@ page language="java" import="java.util.*" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">   
    <title>使用者登入介面</title>
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
  </head>
    <body>
    <font size="2">
      <form action="loginCheck.jsp" method="post">
         使用者名稱:<input type="text" name="userName" size="10"/><br>&nbsp;&nbsp;&nbsp;碼:<input type="password" name="passWord" size="10"/><br></font>
        <font size="1">(提交後,使用者名稱將被存入session中)</font><br>
        <input type="submit" value="提交">  
      </form>
    
  </body>
</html>

3.2.2 編寫loginCheck.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
     <title>使用者登入驗證頁面</title>
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
    <%
         request.setCharacterEncoding("UTF-8");
         String userName=request.getParameter("userName");
         String passWord=request.getParameter("passWord");
         if(userName.length()>0 && passWord.length()>0){
            session.setAttribute("uname", userName);
            response.sendRedirect("main.jsp");
         }else{
            response.sendRedirect("login.jsp");
         }
     %>
  </head>
  
  <body>
    
  </body>
</html>

3.2.3 編寫main.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
      <title>系統主介面</title>
  </head>
  
  <body>
    <font size="2">
      <%
          String uname=(String)session.getAttribute("uname");
          if(uname!=null){
            out.print("登入成功!歡迎" + uname + "瀏覽站點");
          }else{
            response.sendRedirect("login.jsp");
          }
       %><br>
       <font size="1" color="green">上述名稱<%=uname %>是從session中取出的</font>
    </font>
  </body>
</html>

3.2.4 使用類似下面的URL訪問之

圖2-2

圖2-3

3.3 利用application物件實現網站訪問計數

3.3.1 編寫visitPageCount.jsp


<%@ page language="java" import="java.util.*" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>application測試</title>
  </head>
  <body>
    <font size="2">
      <%
      int count=0;
      if(application.getAttribute("count")==null){
           count=count+1;
           application.setAttribute("count", count);
       }else{
           count=Integer.parseInt(application.getAttribute("count").toString());
           count=count+1;
           application.setAttribute("count", count);
       }
       out.println("您是本系統的第" + count + "個訪問者。");
       %>
    </font>
  </body>
</html>

3.3.2 使用類似下面的URL訪問之

執行結果如圖2-4所示。

圖2-4

4 思考題

  1. 如何獲得請求引數?
  2. 如何在請求物件中共享資料?

5 實驗總結

這個實驗中,實現了request物件、session物件、application物件的用法,實現資料的傳遞和共享。