JSP內置對象

来源:http://www.cnblogs.com/shici/archive/2017/10/23/7682388.html
-Advertisement-
Play Games

jsp為用戶提供了9個內置對象,該內置對象由容器進行實例化,用戶直接使用即可; 1 四種屬性範圍 所謂的屬性保存範圍:指一個設置的對象可以在幾個頁面中保存可以繼續使用; 屬性操作方法: public void setAttribute(String name, Object obj) 設置屬性的名稱 ...


jsp為用戶提供了9個內置對象,該內置對象由容器進行實例化,用戶直接使用即可;

1 四種屬性範圍

所謂的屬性保存範圍:指一個設置的對象可以在幾個頁面中保存可以繼續使用;

屬性操作方法:

public void  setAttribute(String name, Object obj)  設置屬性的名稱及內容;

public Object getAttribute(String name)  根據屬性名稱取得屬性;

public void removeAttribute(String name) 根據屬性名稱刪除屬性;

四種屬性範圍:

page(pageContext ,習慣於將這種範圍稱為page範圍): 只在一個頁面中保存屬性,跳轉之後無效;

<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="java.util.*"%>        <!-- 導入java.util包 -->
<html>
<head><title>設置和取得page範圍的屬性</title></head>
<body>
<%    // 設置page屬性範圍,此屬性只在當前的JSP頁面中起作用
    pageContext.setAttribute("name","bugshi") ;
    pageContext.setAttribute("birthday",new Date()) ;
%>
<%    // 從page屬性範圍中取出屬性,並執行向下轉型操作
    String username = (String)pageContext.getAttribute("name") ;
    Date userbirthday = (Date)pageContext.getAttribute("birthday") ;
%>
<h2>姓名:<%=username%></h2>            <!-- 輸出取得的屬性內容 -->
<h2>生日:<%=userbirthday%></h2>        <!-- 輸出取得的屬性內容 -->
</body>
</html>

 

request : 只在一次請求中保存,伺服器跳轉後依然有效;

<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="java.util.*"%>        <!-- 導入java.util包 -->
<html>
<head><title>設置requset屬性的範圍</title></head>
<body>
<%    // 設置request屬性範圍,此屬性只在伺服器跳轉中起作用
    request.setAttribute("name","bugshi") ;    
    request.setAttribute("birthday",new Date()) ;
%>
<jsp:forward page="request_demo02.jsp"/>
</body>
</html>

request_demo02.jsp :

<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="java.util.*"%>        <!-- 導入java.util包 -->
<html>
<head><title>取出request屬性的範圍</title></head>
<body>
<%    // 從request屬性範圍中取出屬性,並執行向下轉型操作
    String username = (String)request.getAttribute("name") ;
    Date userbirthday = (Date)request.getAttribute("birthday") ;
%>
<h2>姓名:<%=username%></h2>        <!-- 輸出取得的屬性內容 -->
<h2>生日:<%=userbirthday%></h2>    <!-- 輸出取得的屬性內容 -->
</body>
</html>

使用超鏈接取得屬性

<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="java.util.*"%>        <!-- 導入java.util包 -->
<html>
<head><title>www.mldnjava.cn,MLDN高端Java培訓</title></head>
<body>
<%    // 設置request屬性範圍,此屬性只在伺服器跳轉中起作用
    request.setAttribute("name","李興華") ;    
    request.setAttribute("birthday",new Date()) ;
%>
<!-- 通過超鏈接跳轉之後,地址欄改變,屬於客戶端跳轉 -->
<a href="request_demo02.jsp">通過超鏈接取得屬性</a>
</body>
</html>

request屬性範圍理解:
    request表示客戶端的請求,正常情況下,一次請求伺服器只給一次回應;

    如果是伺服器跳轉,地址欄沒有改變,則相當於回應了一次;

    如果是地址欄變了,表示發送了第二次請求,則第一次請求的內容消失了,所以無法取得;  

 

session:在一次會話中保存,無論如何跳轉(客戶端或服務端)都可以使用,但新開瀏覽器無法使用;

  每一個新的瀏覽器連接上伺服器都是一個新的Session Id;

application:整個伺服器上保存,所有用戶都可以使用;

  application範圍的屬性設置過多會影響伺服器的性能;

  application範圍的屬性無論打開多少個瀏覽器都可以訪問到,如果伺服器重啟,則之前設置的全部屬性將消失。

 

深入page屬性範圍

設置屬性的方法:

    public void setAttribute(String name,Object value,int scope)  設置屬性並保存範圍;

    int scope:此變數可指定一個屬性的保存範圍;

在javax.servlet.jsp.pageContext類中,同樣存在4個表示屬性範圍的整形變數,通過這些整形變數在指定scope的內容;

public static final int PAGE_SCOPE      表示page屬性範圍,預設; public static final int REQUEST_SCOPE   表示request屬性範圍; public static final int SESSION_SCOPE    表示session屬性範圍; public static final int APPLICATION_SCOPE  表示application屬性範圍;   eg: 表示request屬性範圍
<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="java.util.*"%>
<html>
<head><title>request屬性範圍</title></head>
<body>
<%    // 設置屬性
    pageContext.setAttribute("name","bugshi",PageContext.REQUEST_SCOPE) ;
    pageContext.setAttribute("birthday",new Date(),PageContext.REQUEST_SCOPE) ;
%>
<jsp:forward page="request_demo02.jsp"/>
</body>
</html>

pageContext對象可以設置任意範圍的屬性,而其它操作也只是對這一功能的在包裝而已;

但一般習慣於使用pageContext對象設置保存在一頁範圍的屬性,而很少使用pageContext設置其它範圍的屬性;

2 內置對象

2.1 request對象:使用最多的一個對象

作用:接收客戶端發送而來的請求信息,如請求的參數,發送的頭信息;

request是javax.servlet.http.HttpServletRequest介面的實例化對象,表示此對象應用在http協議上;

介面定義:public interface HttpServletRequest extends ServletRequest;

查詢request對象的方法除了要查詢HttpServletReques介面,也要查詢ServletRequest介面;

request內置對象常用方法:

亂碼解決:

瀏覽器的預設編碼為UTF-8,此時刻通過setCharacterEncoding()方法設置統計的編碼即可;    

eg:  setCharacterEncoding("GBK");

接收請求參數:

單一的參數都是使用getParameter()接收(如文本框,單選按鈕,密碼框,隱藏框);

一組參數要使用getParameterValues()接收(覆選框);

表單上的提交方式 get 和post:

get提交時,提交的內容會顯示在地址欄之後;與地址重寫的格式一樣,信息長度有限制,一般在大小為4~5KB的數據;

post提交時,提交的內容不會顯示在地址欄的後面;表單中有一些大文本或圖片數據時,則只能使用post方式提交;

getParameterNames()

此方法返回所有請求參數的名稱,返回值類型為Enumeration;

此介面實例需要使用hasMoreElements()方法判斷是否有內容及使用nextElement()方法取出內容;

request_demo03.html:多種類型的表單頁面,數據提交至request_demo03.jsp;

 

<html>
<head><title>顯示多種類型的表單頁面</title></head>
<body>
<form action="request_demo03.jsp" method="post">
    姓名:    <input type="text" name="uname"><br>
    性別:    <input type="radio" name="sex" value="男" CHECKED><input type="radio" name="sex" value="女"><br>
    城市:    <select name="city">
                <option value="北京">北京</option>
                <option value="天津">天津</option>
                <option value="洛陽">洛陽</option>
            </select><br>
    興趣:    <input type="checkbox" name="**inst" value="唱歌">唱歌
             <input type="checkbox" name="**inst" value="跳舞">跳舞
             <input type="checkbox" name="**inst" value="游泳">游泳
             <input type="checkbox" name="**inst" value="看書">看書
             <input type="checkbox" name="**inst" value="旅游">旅游<br>
    自我介紹:<textarea cols="30" rows="3" name="note"></textarea><br>
    <input type="hidden" name="uid" value="1">
    <input type="submit" value="提交">
    <input type="reset" value="重置">
</form>
</body>
</html>

request_demo03.jsp

<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="java.util.*"%>
<html>
<head><title>接收參數信息界面</title></head>
<body>
<%
    request.setCharacterEncoding("GBK") ;// 設置的是統一編碼
    Enumeration enu = request.getParameterNames() ;
%>
<table border="1">
    <tr>
        <td>參數名稱</td>
        <td>參數內容</td>
    </tr>
<%
    while(enu.hasMoreElements()){
        String paramName = (String) enu.nextElement() ;
%>
        <tr>
            <td><%=paramName%></td>
            <td>
<%
            if(paramName.startsWith("**")){        // 是以**開頭
                String paramValue[] = request.getParameterValues(paramName) ;
                for(int x=0;x<paramValue.length;x++){
%>
                    <%=paramValue[x]%><%
                }
            } else {
                String paramValue = request.getParameter(paramName) ;
%>
                <%=paramValue%>
<%
            }
%>
            </td>
        </tr>
<%
    }
%>
</table>
</body>
</html>

顯示全部的頭信息

請求和響應的同時也包含一些其它的信息(如客戶端的IP,Cookie,語言等),這些額外的信息就是頭信息;

request內置對象的getHeaderNames()方法取得頭信息的名稱;

getHeader()方法取出每一個頭信息的內容;

request_demo04.jsp:取出頭信息的名稱及內容

<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="java.util.*"%>
<html>
<head><title>取出頭信息的名稱及內容</title></head>
<body>
<%
    Enumeration enu = request.getHeaderNames() ;    // 取得全部的頭信息
    while(enu.hasMoreElements()){
        String headerName = (String) enu.nextElement() ;
        String headerValue = request.getHeader(headerName) ;
%>
        <h5><%=headerName%> --> <%=headerValue%></h5>
<%
    }
%>
</table>
</body>
</html>

其它操作

request取得客戶端的IP地址,訪問的路徑信息,提交的方式;

request_demo05.jsp

<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="java.util.*"%>
<html>
<head><title>request取得其它信息</title></head>
<body>
<%
    String method = request.getMethod() ;
    String ip = request.getRemoteAddr() ;
    String path = request.getServletPath() ;
    String contextPath = request.getContextPath() ;
%>
<h3>請求方式:<%=method%></h3>
<h3>IP地址:<%=ip%></h3>
<h3>訪問路徑:<%=path%></h3>
<h3>上下文名稱:<%=contextPath%></h3>
</table>
</body>
</html>

當伺服器端需要到請求客戶端的相關信息時就會使用request對象來完成;

2.2 response對象

作用:對客戶端的請求進行回應,將Web伺服器處理後的結果發回給客戶端;

response對象屬於javax.servlet.http.HttpServletResponse介面的實例;

介面定義:public interface HttpServletResponse extends ServletResponse;

response常用方法:

設置頭信息

response_demo01,jsp

<%@ page contentType="text/html" pageEncoding="GBK"%>
<html>
<head><title>設置定時刷新的頭信息</title></head>
<body>
<%!    // 定義全局變數
    int count = 0 ;
%>
<%
    response.setHeader("refresh","2") ;    // 頁面2秒一刷新
%>
<h3>已經訪問了<%=count++%>次!</h3>
</body>
</html>

response_demo02.jsp:3秒後跳轉至其它頁面

<%@ page contentType="text/html" pageEncoding="GBK"%>
<html>
<head><title>3秒後跳轉其它頁面</title></head>

              
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 數組的定義:是用統一的名字代表這批數據,用序號來區分各個數據。數組是有序數據的集合。 如何理解:其實就是一個同時放很多數據的變數。 如 int a0;int a1; int a2; a=1; a=2; a=3; 這成了反覆賦值,最後a=3; a怎麼能同時放下1,2,3......? 必須是同樣的數據 ...
  • 一、前言 在工作中,難免遇到各種各樣的問題,每個人似乎都有一套自己的解決方案。而我,又不想每次解決完問題就把東西扔了,撿了芝麻,丟了西瓜,什麼時候才能進步勒?學習要靠積累,畢竟量變才能引起質變嘛。所以寫了這篇博文,不定時更新自己項目中遇到的問題、踩過的那些坑...... 二、項目 1、Java 將兩 ...
  • 引言 Sun所指定的JavaBean規範很大程度上是為IDE準備的 它讓IDE能夠以可視化的方式設置JavaBean的屬性。如果在IDE中開發一個可視化的應用程式,則需要通過屬性設置的方式對組成應用的各種組件進行定製,IDE通過屬性編輯器讓開發人員使用可視化的方式設置組件的屬性。 一般的IDE都支持 ...
  • 函數外部聲明有什麼作用? 讓我們定義的函數應用範圍更廣,生命更長久。共用。 也就是說所有的外部函數都可以直接調用。 ...
  • 觸發器 觸發器(trigger)是一些過程,與表關係密切,用於保護表中的數據,當一個基表被修改(INSERT、UPDATE或DELETE)時,觸發器自動執行,例如通過觸發器可實現多個表間數據的一致性和完整性。觸發器和應用程式無關。 觸發器的類型有三種: (1)DML觸發器。Oracle可以在DML( ...
  • host,$this->uid,$this->pwd,$this->dbname); //執行sql語句 $reslut = $db->query($sql); if(!$reslut){ die($db->error); } //從結果集對象裡面取數據 if($type==1) ... ...
  • 前言 因為業務要求api的一次請求響應時間在10ms以內,所以傳統的資料庫查詢操作直接被排除(網路io和磁碟io)。通過調研,最終使用了bieset,目前已經正常運行了很久 bitset介紹 看JDK中的解釋簡直一頭霧水,用我自己的理解概括一下 1. bitset的內部實現是long數組 2. se ...
  • 你好博客園!你好世界! ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...