1. 程式人生 > >java-jsp內建物件

java-jsp內建物件

JSP中預先定義了9個這樣的物件,request,response,session,application,out,pageContext,config,page和exception

request物件

request物件是javax.servlet.http.HttpServletRequst型別的物件,該物件代表了客戶端的請求資訊,主要用於接收通過HTTP協議傳送到服務端的資料(包括頭資訊,系統資訊,請求方式以及請求引數等)request物件的作用域為一次請求。

獲取請求引數中傳遞的值
可以通過

String id = request.getParameter("id"
);

獲取引數的值。如果不存在此引數,那麼該方法返回null。
使用request物件獲取請求引數值
在web中建立index.jsp頁面,在其中加入一個超連結按鈕用來請求show.jsp頁面,並在請求後增加一個引數id

  <body>
    <a href = "show.jsp?id=001">獲取請求引數的值</a>
  </body>

新建show.jsp頁面,其中通過getParameter()方法來獲取id引數和name的值,並將其輸出到頁面中

  <body>
    id引數的值為:<%=request
.getParameter("id") %>
<br> name引數的值為:<%=request.getParameter("name") %> </body>

結果
這裡寫圖片描述
這裡寫圖片描述

獲取Form表單資訊
對於文字元素,單選按鈕,下拉列表框都可以使用getParameter()方法來獲取其具體的值
但對於複選框和多選列表別選定的內容就要使用getParameterValue()方法來獲取,該方法會返回一個字串陣列,通過迴圈遍歷這個陣列就可以得到使用者選定的所有內容。

建立index.jsp頁面,在該頁面建立一個form表單,在表單中分別加入文字框,下拉列表框,單選按鈕和複選框

<body>
    <form action="show.jsp"method="post">
        <ul style="list-style:none;line-height:30px">
        <li>輸入使用者姓名:<input type="text"name="name"/><br></li>
        <li>選擇性別:
            <input name = "sex"type="radio"value="男"/>男
            <input name = "sex"type="radio"value="女"/>女
        </li>
        <li>
            選擇密碼提示問題:
            <select name = "question">
            <option value = "母親生日">母親生日</option>
            <option value ="寵物名稱">寵物名稱</option>
            <option value = "電腦配置">電腦配置</option>
            </select>
        </li>
        <li>請輸入問題答案:<input type ="text" name = "key"/></li>
        <li>
            請選擇個人愛好:
            <div style="width:400px">
                <input name="like" type="checkbox"value="唱歌跳舞"/>唱歌跳舞
                <input name="like"type="checkbox"value="上午衝浪"/>上網衝浪
                <input name="like"type="checkbox"value="戶外登山"/>戶外登山
                <input name="like"type="checkbox"value="體育運動"/>體育運動<br/>
                <input name="like"type="checkbox"value="讀書看報"/>讀書看報
                <input name="like"type="checkbox"value="欣賞電影"/>欣賞電影
            </div>
        </li>
        <li><input type="submit"value="提交"/></li>
    </ul>

    </form>
  </body>

編寫show.jsp頁面,該頁面是用來處理請求的,在其中分別使用getParameter()方法與getParameterValues()方法將使用者提交的表單資訊顯示在頁面中

<body>
    <ul style="list-style:none;line-height:30px">
        <li>輸入使用者名稱:<%=new String(request.getParameter("name")) %></li>
        <li>選擇性別:<%=new String(request.getParameter("sex")) %></li>
        <li>選擇密碼提示問題:<%=new String(request.getParameter("key")) %></li>
        <li>請輸入問題答案:<%=new String(request.getParameter("key")) %></li>
        <li>請選擇個人愛好:
            <%
            String[] like = request.getParameterValues("like");
            for(int i = 0;i<like.length;i++){ 
            %>
            <%=new String(like[i])+"&nbsp;&nbsp;" %>
            <%
            }
             %>
        </li>
    </ul>
  </body>

結果
這裡寫圖片描述

獲取請求客戶端資訊
在request物件中通過相應的方法還可以獲取客戶端的相關資訊,如HTTP報頭資訊,客戶資訊提交方式,客戶端主機IP地址,埠號等
這裡寫圖片描述

  <body>
    <ul style="line-height:24px">
        <li>客戶使用協議:<%=request.getProtocol() %>
        <li>客戶端傳送請求的方法:<%=request.getMethod() %>
    </ul>
  </body>

結果
這裡寫圖片描述

在作用域中管理屬性
通過使用setAttribute()方法可以在request物件的屬性列表中新增一個屬性,然後在request物件的作用域範圍內通過getAttribute()方法將其屬性取出,此外,還可使用removeAttribute()方法將一個屬性刪除掉。

//首先將date屬性加入到request屬性列表中,然後輸出這個屬性的值,接下來使用removeAttribute()方法將date屬性刪除,最後再次輸出date屬性
<%
    request.setAttribute("date",new Date());//新增一個屬性
 %>
 <body>
        <ul style="line-height:24px;">
            <li>獲取date屬性:<%=request.getAttribute("date") %></li>
            <!-- 降屬性刪除 -->
            <%request.removeAttribute("date"); %>
            <li>刪除後再獲取date屬性<%=request.getAttribute("date") %></li>
        </ul>
  </body>

這裡寫圖片描述
request物件作用域為一次請求,超出作用域後屬性列表中的屬性即會失效。

cookie管理
cookie是小段的文字資訊,通過使用cookie可以標識使用者身份,記錄使用者名稱及密碼,跟蹤重複使用者。
cookie在伺服器端生成傳送給瀏覽器,瀏覽器將cookie的key/value儲存到某個指定的目錄中,伺服器的名稱和值可以由伺服器端定義。

通過cookie的getCookies()的方法可以獲取到所有的cookie物件集合,然後通過cookie物件的getName()方法獲取到指定名稱的cookie,再通過getValue()方法即可獲取到cookie物件的值。另外,將一個cookie物件傳送到客戶端使用了response物件的addCookie()方法。

建立index.jsp頁面檔案,在其中建立form表單,用於讓使用者輸入資訊,並且從request物件中獲取cookie,判斷是否含有此伺服器傳送過的cookie。如果沒有,則說明該使用者第一次訪問本站,如果有,則直接將值讀取出來,並賦給對應的表單。

<%
    String welcome = "第一次訪問";
    String[] info = new String[]{"","",""};
    Cookie[] cook = request.getCookies();
    if(cook!=null){
        for(int i = 0;i < cook.length;i++){
            if(cook[i].getName().equals("mrCoolInfo")){
                info = cook[i].getValue().split("#");
                welcome=",歡飲回來!";
            }
        }
    }
    %>
    <%=info[0]+welcome %>
        <form action="show.jsp"method="post">
        <ul style = "line-height:23">
            <li>姓&nbsp;&nbsp;&nbsp;名:<input name="name"type ="text"value="<%=info[0] %>"></li>
            <li>出生日期:<input name ="birthday"type="text"value = "<%=info[1] %>"></li>
            <li>郵箱地址:<input name="main"type="text"value="<%=info[2] %>"></li>
            <li><input type="submit" value="提交"></li>
        </ul>
        </form>

建立show.jsp頁面檔案,在該頁面中通過request物件將使用者輸入的表單資訊提取出來,建立一個cookie物件,並通過response物件的addCookie()方法將其傳送到客戶端。

 <%
        String name = request.getParameter("name");
        String birthday = request.getParameter("birthday");
        String mail = request.getParameter("mail");
        Cookie myCook = new Cookie("mrCookInfo",name+"#"+birthday+"#"+mail);
        myCook.setMaxAge(60*60*24*365); //設定cookie有效期
        response.addCookie(myCook);
     %>
     表單提交成功
     <ul style ="line-height:24px">
        <li>姓名:<%=name %>
        <li>出生日期:<%=birthday %>
        <li>電子郵箱:<%=mail %>
        <li><a href="index.jsp">返回</a>
     </li>

這裡寫圖片描述

這裡寫圖片描述

response物件

response代表的是對客戶端的響應,主要是將JSP容器處理過的物件傳回到客戶端。response物件也是有作用域,它只是JSP頁面內有效。response物件的常用方法:
這裡寫圖片描述

重定向網頁
使用sendRedirect()方法,將響應傳送到另一個指定的位置進行處理,進行重定向操作後,request中的屬性全部失效,並且進入一個新的request物件的作用域。

response.sendRedirect("www.mingribook.com")

處理HTTP檔案頭
setHeader()方法通過兩個引數——頭名稱與引數值的方式來設定HTTP檔案頭
例如:設定網頁每5秒自動重新整理一次

response.setHeader("refresh","5");

例如:設定2秒鐘後自動跳轉至指定頁面

response.setHeader("refresh","2;URL=welcome.jsp")

例如:設定響應型別

response.setContentType("text/html");

設定輸出緩衝
通常,伺服器要輸出到客戶端的內容不會直接寫到客戶端,而是先寫到一個輸出緩衝區;只有在以下3種情況下,才會把緩衝區的內容寫入緩衝區
JSP頁面的輸出資訊已經全部寫入緩衝區
緩衝區已滿在JSP頁面中呼叫flushbuffer()方法或out物件的flush()方法
setBufferSize()方法可以設定緩衝區大小。例如設定緩衝區大小為0KB,

response.setBufferSize(0);

使用isCommitted()方法來檢測伺服器端是否已經把資料寫入到了客戶端。

session物件

session物件是由伺服器自動建立的與使用者請求相關的物件。session儲存該使用者資訊,跟蹤使用者的操作狀態,內部使用Map類來儲存資料,因此儲存資料的格式為key/value
這裡寫圖片描述
建立及獲取session資訊
session是與請求有關的會話物件,是java.servlet.http.HttpSession物件。
setAttribute()方法可以實現將資訊儲存在session範圍內,語法格式
setAttribute(String key,Object obj)
key:儲存在session範圍內的關鍵字
obj:儲存在session範圍內的物件
getAttribute()方法可以實現獲取儲存在session範圍內的資訊
getAttribute(String key)
key:指定儲存在session範圍內的關鍵字

在index.jsp頁面中,實現將文字資訊儲存在session範圍內

 <%
        String sessionMessage = "session練習";
        session.setAttribute("message", sessionMessage);
        out.print("儲存在session範圍內的物件為:"+sessionMessage);     
     %>

在default.jsp頁面中,獲取儲存在 session範圍內的資訊並在頁面中顯示

<body>
    <%
        String message=(String)session.getAttribute("message");
        out.print("儲存在session範圍內的值為"+message);
     %>
  </body>

這裡寫圖片描述

從會話中移除指定的繫結物件

removeAttribute(String key)
key:儲存在session範圍內的關鍵字

removeAttribute(“message”)

銷燬session
當呼叫session物件的invalidate()方法後,表示session物件被刪除,即不可以再使用session物件
session.invalidate();
呼叫後,再呼叫session物件的任何其他方法時都會報出Session already invalidated異常。

會話超時的管理
在應用session物件時應該注意session的生命週期,一般在20-30分鐘。
在session物件中提供了設定會話生命週期的方法
getLastAccessedTime():返回客戶端最後一次與會話相關聯的請求時間
getMaxInactiveInterval():以秒為單位返回一個會話內兩個請求最大時間間隔
setMaxInactiveInterval():以秒為單位設定session的有效時間

例如

session.setMaxInactiveInterval(10000);

session物件的應用
在index.jsp頁面中,提供了使用者輸入使用者名稱文字框,在session.jsp頁面中,將使用者輸入的使用者名稱儲存在session.jsp頁面中,將使用者輸入的使用者名稱儲存在session物件中,使用者在該頁面中可以新增最喜歡去的地方;在result.jsp頁面中,將使用者輸入的使用者名稱與最想去的地方在頁面中顯示。

(1)index.jsp

<body>
    <form id = "form1"name="form1"method="post"action="session.jsp">
        <div align="center">
            <table width="23%"border="0">
                <tr>
                    <td width="36%"><div align="center">您的名字</div></td>
                    <td width="64%">
                        <label>
                            <div align="center">
                                <input type = "text" name ="name"/>
                            </div>
                        </label>
                    </td>
                </tr>
                <tr>
                    <td colspan="2">
                        <label>
                            <div align="center">
                                <input type="submit"name="Submit"value="提交"/>
                            </div>
                        </label>
                        </td>
                </tr>
            </table>
        </div>
    </form>
  </body>

(2)在session.jsp頁面中,將使用者在index.jsp頁面中輸入的使用者名稱儲存在session物件中,併為使用者提供用於新增最想去的地址的文字框

 <body>
    <%
        String name = request.getParameter("name"); //獲取使用者填寫的使用者名稱
        session.setAttribute("name",name);  //將使用者名稱儲存在session物件中
     %>
     <div align="center">
        <form id="form1"name="form1"method="post"action="result.jsp">
            <table width="28%"border="0">
                <tr>
                    <td>您的名字是:</td>
                    <td><%=name %></td>
                </tr>
                <tr>
                    <td>您最喜歡去的地方是:</td>
                    <td><label>
                        <input type="text"name="address"/>
                    </label></td>
                </tr>
                <tr>
                    <td colspan="2"><label>
                        <div align="center">
                            <input type="submit"name="Submit"value="提交"/>
                        </div>
                    </label></td>
                </tr>
            </table>
        </form>
     </div>
  </body>

(3)在result.jsp頁面中,實現將使用者輸入的使用者名稱,最喜歡去的地方在頁面中顯示

 <body>
    <%
        String name=(String)session.getAttribute("name");//獲取儲存在session範圍內的物件
        String solution = request.getParameter("address");//獲取使用者輸入的最喜歡去的地方
     %>

     <form id="form1"name="form1"method="post"action="">
        <table width = "28%"border="0">
            <tr>
                <td colspan="2"><div align="center"><strong>顯示答案</strong></div></td>
            </tr>
            <tr>
                <td width="49%"><div align="left">您的名字是</div></td>
                <td width="51%"><label>
                    <div align ="left"><%=name %></div>
                </label></td>
            </tr>
            <tr>
                <td><label>
                    <div align="left">您最喜歡去的地方</div>
                </label></td>
                <td><div align="left"><%=solution %></div></td>
            </tr>
        </table>
     </form>
  </body>

結果:
這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

application物件

application物件可將資訊儲存在伺服器中,直到伺服器關閉,否則application物件中儲存的資訊會在整個應用中都有效,生命週期更長。
這裡寫圖片描述

訪問應用程式初始化引數
application提供了對應用程式環境屬性訪問的方法。
application物件訪問應用程式初始化引數的方法
getInitParameter(String name):返回一個已命名的引數值
getAttributeNames():返回所有已定義的應用程式初始化名稱的列舉

管理應用程式環境屬性
getAttributeNames():獲得所有application物件使用的屬性名
getAttribute(String name):從application物件中獲取指定物件名
setAttribute(String key,Object obj):使用指定名稱和指定物件在application物件中進行關聯
removeAttribute(String name):從application物件中去掉指定名稱的屬性

out物件

out物件用於在Web瀏覽器內輸出資訊,並且管理應用伺服器上的輸出緩衝區。
管理相應緩衝
clear()方法清除緩衝區,如果相應內容已經提交,則報出IOException異常
clearBuffer()方法,即使內容已經提交給客戶端,也能夠訪問該方法
這裡寫圖片描述
向客戶端輸出資料
向客戶端寫入資料
print():在頁面中列印字串資訊,不換行
println():在頁面中列印字串資訊,,並且換行。

其他內建物件

獲取會話範圍內的pageContext物件
pageContext物件的作用是取得任何範圍的引數,通過他可以獲取JSP頁面的out,request,response,session,application等物件。
這裡寫圖片描述
這裡寫圖片描述

讀取web.xml配置資訊的config物件
config物件主要作用是取得伺服器的配置資訊。
這裡寫圖片描述

應答或請求的page物件
這裡寫圖片描述

獲取異常資訊的exception物件
只有在isErrorPage=“true”的頁面中才能被使用
這裡寫圖片描述

獲取異常資訊的exception物件
(1)建立index.jsp頁面,在該頁面中編寫程式碼,並通過errorPage屬性指定有異常資訊時系統將轉發至error.jsp頁面

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"errorPage="error.jsp"%>
<body>
     <%
        int apple=Integer.parseInt("ad");
        out.println("蘋果每斤"+apple+"元");
      %>
  </body>

(2)編寫error.jsp頁面,用於接收傳遞過來的異常資訊

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

<body>
    錯誤提示為:<%=exception.getMessage() %>
</body>

參考書籍:《Java Web開發實戰》作者:軟體開發技術聯盟