亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JSP > 正文

JavaWeb之 JSP:內置對象,EL表達式,JSP標簽基礎

2019-11-14 22:05:52
字體:
來源:轉載
供稿:網友
javaWeb之 jsp:內置對象,EL表達式,JSP標簽基礎JSP的內置對象什么是JSP的內置對象呢?

在JSP頁面進行編程的時候,如果我們要使用一些對象,如:Httpsession,ServletConfig,ServletContext這些對象,如果每次都要先創建這些對象,然后再去使用它們,這樣就顯得十分繁瑣了,為了方便使用者,Sun公司在開發JSP的時候,把一些對象設置為內置對象,開發者在JSP頁面編程的時候不必聲明這些對象就能直接使用,這就是JSP的內置對象。

那么JSP對象有哪些呢?

JSP內置對象       對應的類型            備注

Request         HttpServletRequest       用于得到請求信息  

Response         HttpServletResponse       用于設置響應信息

application           ServletContext       代表web應用環境

Config             ServletConfig       用于得到Servlet初始化參數

Session             HttpSession       用于的設置Session對象,調用request.getSession時被創建

Page               Object         在JSP被翻譯成java文件后,創建的字節碼對象

Out               JspWriter       一個帶緩沖的PRintWriter

Exception             Thorwable       異常對象,封裝異常信息,發生異常時調用

Pagecontext           PageContext        代表當前jsp的上下文對象

上面大多數對象在學習Servlet的時候已經學習過,下面我們只說一下兩個特別的對象:

Out對象

Out對象的類型:JspWriter ,用于向瀏覽器輸出數據。

我們知道以前向頁面輸出數據,要用到PrintWriter,下面說一下兩者的區別:

PrintWriter:直接向頁面輸出數據,通過調用它的write()方法。

JspWriter:內部有一個一定大小的緩沖區,當這個緩沖區滿了,先把緩存區的數據寫入 PrintWriter,然后由PrintWriter把數據輸出到頁面。

那如果要輸出的數據填不滿緩沖區怎么辦呢,別擔心,開發者已經為我們想好了:

JspWriter把數據寫入PrintWriter的情況:

1)緩沖區滿了。

2)Jsp頁面已經加載完成,緩沖區雖然沒有滿,但JspWriter會把數據寫入PrintWriter。

3)關閉JspWriter的緩沖區,JspWriter就會把數據直接寫入PrintWriter。

那我們怎么設置緩沖區的大小呢?

我們可以在jsp頁面使用page指令,然后設置它里面的buffer屬性。

如果不設置,它的默認值是8kb。如果想關閉緩沖區我們可以把緩沖區的大小設置為0kb或none。

PageContext對象

Pagecontext對象的數據類型:PageContext。

作用:代表當前jsp上下文對象。

那么什么是上下文對象呢?在語文書我們可能看到這樣的語句:“根據上下文,xxxxxxx”

所謂的上下文就是全文,所以Pagecontext對象可以獲取jsp的全部內置對象~

1)通過pagecontext對象來獲得jsp的其他8個內置對象

代碼如下:

  <body>          <%               pageContext.getRequest();              pageContext.getResponse();              pageContext.getSession();              pageContext.getException();              pageContext.getOut();              pageContext.getPage();              pageContext.getServletConfig();              pageContext.getServletContext();                   %>                                 </body>

為什么它可以這樣獲取其它內置對象呢?我們來看看它的源代碼吧~

class _04_page_jsp extends HttpServlet{                                    public void _jspService(){                PageContext pageContext;//把8個內置對象放入PageContext類中                            HttpSession session;                            ServietConfig config;                            SevletContext application;                            .....                                                        //調用method1                            method1(pageContext);                        }                        public void metdho1(PageContext pageContext){                            //在這里需要使用到內置對象。例如session、config......                            //得到pageContext對象就可以得到其他8個內置對象                            pageContext.getRquet();                             pageContext.getResponse();                            ........                        }                    }

由上述代碼可以看到,在JSP類里面的Serive()方法內聲明了這些變量,而里面又調用了了method1方法了把8個內置對象add到pageContext里了~

除了這個作用,pageContext還能作為域對象來使用。

1)pageContext作為域對象使用

域對象的作用:保存數據,得到數據

我們之前已經學過三個域對象:

requset域對象

context域對象

session域對象

這些都是servlet里可以使用的域對象。

然而,在JSP中,除了可以使用上面的三個域對象,還能使用pageContext域對象。

pageContext域對象的范圍:在當前jsp頁面中有效的?。?!

那么現在我們來使用它吧~

你可以這樣把數據保存到pageContext域

        pageContext.setAttribute("name",Object);

然后這樣得到數據:

        pageContext.getAttribute("name");

除了可以把數據保存在pageContext域,你也可以用pageContext對象把數據保存在其它域對象里!

指定域對象保存:

        pageContext.setAttribute("name",Object,域常量)

指定域獲?。?/p>

        pageContext.getAttribute("name",域常量);

域常量:

    PAGE_SCOPE:pageContext域

   REQUEST_SCOPE:request域

   SESSION_SCOPE:session域

   APPLICATION_SCOPE:context域

自動搜索:

      pageContext.findAttribute("name");

注意:自動在4個域中依次按順序(從小到大)搜索數據:

      page->requeste->session->application

如果在某個域中找到數據,則返回該域中的數據,如果4個域都找不到數據,那么就返回null

總結4個域對象

1.jsp的4個域對象

a)Request

b)Session

c)Application

d)pageContext

2.域對象的作用

保存數據,得到數據,清楚數據

3.域對象的核心方法

setattribute(Strings,Objectobj);

getattribute(Strings)

removeattribute(Strings)

4.四個域對象的作用范圍

Request域對象:同一次請求有效,可用轉發來維持。

Session域對象:同一次會話有效。

Application域對象:同一個web應用下有效。

pageContext域對象:同一個jsp頁面內有效。

可以在html頁面內嵌入java代碼,這樣是十分不利于開發者和美工分工的,所以后來我們提倡:盡量在jsp頁面內不使用java代碼,為此,兩種新的技術出現了:

我們 用EL表達式來代替jsp表達式;

用jsp標簽來代替jsp中的java腳本。

EL表達式那么什么是EL表達式

Jsp中的一種語法,用來代替jsp表達式。

EL表達式的語法:

${變量或表達式} 十分的簡便。

EL表達式的用法!

1)用與輸出域中的數據

我們現在兩個域中存入名字一樣的兩個數據,然后用EL來輸出到頁面

              pageContext.setAttribute("id", "rrrr",pageContext.REQUEST_SCOPE);              pageContext.setAttribute("id", "ppp");                          %>             ${id}

頁面輸出的結果為:ppp

所以,如果沒有指定域對象,EL表達式就會依次在page->request->session->application域里找那個名字的變量,先找到就先用。

那么如何指定域對象呢??在變量名前加上域范圍!

  ${域范圍.name}

域范圍:

  pageScoope:pageContext域

requestScope:request域

sessinoScope:session域

applicatinScope:application域

1)除了能輸出域對象保存的數據,EL表達式還能輸出對象里的屬性?。。?/p>

假如我們定義了一個Person類,它有一個屬性name,有一個getName()方法。

那么我們可以用EL表達式來把它的name屬性的值取出來:

pageContext.setAttribute("person", person);                          %>             ${person.name}

這樣就能把name屬性的值取出來了!為什么會這樣呢,因為EL表達式中的.name相當于調用了對象的getName()方法,這一點大家要注意了。

1)EL表達式也可以用來輸出集合對象的值!

List對象:

pageContext.setAttribute("personList", list);                          %>             ${personList[0]}

中括號里的值表示腳標!是不是很簡便~

Map對象:

   pageContext.setAttribute("personMap", map);                     %>     ${personMap["ppp"]} 

中括號里填的是key的值,這樣就能得到對應的value的值了~

4)用于計算表達式

      算術、${12+13-12*5+100}

      比較、${5<3}

      邏輯、${5<6&&7>8}

      判空判斷是否null${name==null}

      判斷是否是空字符串${name==""}

      還有一種empty關鍵字可以用來判斷空和null,用法:

          ${emptyname}

EL表達式內置對象

EL表達式還有內置對象?。e怕,很多都學過了,分別是

pageContext--等價于jsp的pageContext內置對象

pageScope--指定域獲取

requestScope

sessionScope

applicationScope

param--請求參數

paramValues

header--請求頭

headerValues

除了以上9種內置對象,還樂意獲得以下兩種~

cookie--獲取cookie

initParm--獲取web應用全局參數

下面用代碼示范一下:

<body>          <%=pageContext.getRequest() %>          <br/>          <%--EL獲取web上下文 --%>          ${pageContext.request.contextPath } <br/>          ${pageContext.request.remoteHost }          <a href="${pageContext.request.contextPath }/04.el1.jsp">頁面</a>                    <hr/>          <%-- param / paramValues --%>          <%--jsp接收參數 --%>          <%              String name = request.getParameter("name");              //out.write(name);                            String[] names = request.getParameterValues("name");              for(String n:names){                  out.write(n+"<br/>");              }           %>                      <%--EL獲取參數 --%>           <br/>           EL: ${param["name"]}<br/>           EL: ${paramValues["name"][0] } - ${paramValues["name"][1] }                     <hr/>          <%--請求有: header / headerValues --%>          <%--jsp獲取頭 --%>          <%=request.getHeader("user-agent") %>                    <%=request.getHeaders("user-agent") %>          <br/>          <%--EL獲取請求頭 --%>          EL: ${header["user-agent"] }<br/>          EL: ${headerValues["user-agent"][0] }                    <hr/>          <%--cookie:  --%>          <%--jsp獲取cookie --%>          <%=request.getCookies() %>          <br/>          <%--EL獲取 Cookie--%>          ${cookie["JSESSIONID"].name } - ${cookie["JSESSIONID"].value }                    <hr/>          <%--EL獲取全局參數--%>          ${initParam["AAA"] } - ${initParam["BBB"] }  </body>

以上就是EL的內容,重點在引用屬性時會調用它的getXxxx方法!

下面我們來說一下JSP的標簽吧!

Jsp標簽

聰明的你一定會發覺,就算EL表達式可以代替JSP表達式,但想要完成一些功能,EL表達式是不夠的,例如循環,條件判斷等。所以JSP標簽就來和它相輔相成了!

什么是JSP標簽

jsp標簽替代jsp腳本的功能。

Jsp標簽分類

一)JSP內置標簽,又稱為動作標簽

二)JSTL標簽庫的標簽

三)自定義標簽

就三種,不多~

動作標簽

動作標簽不用手動導入,所以我們直接使用就行。常使用的動作標簽有以下三種:

<jsp:forwardpage="">轉發標簽

<jsp:paramname=""value=""/>參數標簽。參數標簽不能單獨使用,只能用在forward或include 標簽中。

<jsp:includepage=""/>包含標簽。用于包含其他頁面。是一種動態包含。

那么現在在JSP文件中演示下吧:

 <jsp:include page="包含的頁面">      <jsp:param name="參數名" value="參數值"/>   </jsp:include>        <jsp:forward page="頁面名稱">              <jsp:param name="參數名" value="參數值"/>           </jsp:forward>

什么是動態包含呢?

JSP文件需要先翻譯成JAVA源文件,然后再編譯成CLASS文件。

動態包含:兩個JSP文件各自先翻譯,然后在編譯運行時再合并。也就是說途中會產生多個java文件

靜態包含:兩個文件先合并,然后一并翻譯成java源文件,過程中只產生1個java文件。

***************靜態包含vs動態包含*****************

靜態包含:@include指令實現。原理是先合并再翻譯。靜態包含不能攜帶參數。

動態包含:<jsp:include/>標簽實現。原理是先翻譯再合并。動態包含可以使用<jsp:param/>標簽攜帶參數到被包含頁面

JSTL標簽庫

JSTL,JavaStrandardTagLibararyjava標準標簽庫

*****使用jstl標簽庫,需要在jsp頁面中導入標簽庫

常見的JSTL標簽庫

核心標簽庫(c:設置變量,獲取變量,條件判斷,循環)(主要)

國際化標簽庫(fmt:日期國家化,文字國際化,數字國際化)(以后說)

EL函數庫(fn:對String常用的方法)

數據庫標簽庫(sql:對數據庫操作的標簽)

xml標簽庫(x:對xml文件操作的標簽)

核心標簽庫

使用jstl標簽步驟:

1) 如果是用java5.0的jar包,那么就已經包含jstl的jar包。

2)在jsp頁面頭部導入標簽庫:

<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

3)在jsp頁面中使用

核心庫中常用的幾種標簽

<c:set></c:set>--設置數據

<c:outvalue=""></c:out>--得到數據

<c:iftest=""></c:if>--單條件判斷

<c:choose></c:choose>--多條件判斷

<c:whentest=""></c:when>

<c:otherwise></c:otherwise>

<c:forEach></c:forEach>--循環,遍歷集合或數組

<c:forTokensitems=""delims=""></c:forTokens>-循環字符串

<c:redirect></c:redirect>--重定向

下面我們來一一示范下怎么使用這些標簽吧

  <body>  <%--使用set標簽設置數據,默認是在pageContext域中設置,也可以指定域保存 --%>     <c:set var="name" value="eric" scope="request"></c:set>         ${requestScope.name}          <%-- out標簽,從域對象中得到數據,         default屬性:設置默認值,當屬性為null時,就會用默認值代替         escapeXml:是否對內容進行轉義,false:不進行轉義,true:進行轉義         什么是轉義:特殊字符不會被識別作用,當普通字符輸出         --%>     <c:out value="${name}" default="abc" escapeXml="false"></c:out>      <%--if標簽:單條間判斷--%>     <c:if test="${1>2}">            條件成立執行的內容     </c:if>      <%--choose標簽:多條件判斷 --%>     <c:set var="id" value="001"></c:set>     <c:choose>         <c:when test="${id=002}">此用戶是002</c:when>         <c:when test="${id=001}">此用戶是001</c:when>         <c:otherwise>不存在此用戶</c:otherwise>     </c:choose>          <%--遍歷List         begin:從哪個元素開始遍歷,第一個下標為0         end:到哪個元素結束         step:步長         items:需要遍歷的對象的名稱         var:每個元素對象的名稱         varStatus:當前遍歷對象的狀態,即:已經遍歷了幾個元素。      --%>      <c:forEach items="${list}" var="student" varStatus="varSta">          序號${varSta.count}-姓名${student.name}-年齡${student.age}      </c:forEach>            <%--遍歷Map--%>      <c:forEach items="${map}" var="entry" varStatus="varSta">          序號${varSta.count}-編號${entry.key}-姓名${entry.value.name}           </c:forEach>                      <%--forTokens便簽 :循環字符串,可以切割后將子串都輸出           items:要循環的對象          delims:以什么東西切割字符串          var:切割后的單個對象的名稱      --%>          <c:forTokens items="${str}" delims="-" var="s">              ${s} <br/>          </c:forTokens>                    <%--重定向 標簽--%>          <c:redirect url="http://www.baidu.com"></c:redirect>                </body>


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩电影大全免费观看2023年上| 国模叶桐国产精品一区| 欧美激情第一页xxx| 中文字幕在线看视频国产欧美| 最近2019中文字幕大全第二页| 97视频在线免费观看| 欧美黑人国产人伦爽爽爽| 97在线视频免费播放| 国产精品国内视频| 国产精品免费一区豆花| 成人性生交大片免费看视频直播| 日韩在线视频播放| 懂色av中文一区二区三区天美| 国产精品第3页| 色在人av网站天堂精品| 亚州成人av在线| 亚洲国产99精品国自产| 日韩av大片免费看| 精品激情国产视频| 欧美激情网友自拍| 亚洲第一区第二区| 欧美日韩国产黄| 欧美电影第一页| 亚洲aⅴ男人的天堂在线观看| 国模gogo一区二区大胆私拍| 日韩精品高清在线观看| 国内久久久精品| 欧美老女人性生活| 亚洲香蕉伊综合在人在线视看| 91av在线不卡| 亚洲字幕一区二区| 国产日韩中文字幕| 亚洲激情视频在线播放| 日韩欧美一区二区在线| 色婷婷亚洲mv天堂mv在影片| 国产精品久久久久久久久影视| 亚洲电影免费观看高清| 欧美黑人xxx| 91午夜理伦私人影院| 久久人人爽人人爽人人片av高清| 精品视频在线播放免| 国产精品va在线播放我和闺蜜| 国产精品永久免费在线| 日韩成人网免费视频| 久久久午夜视频| 欧美日韩xxxxx| 国产精品入口福利| 欧美高清无遮挡| 欧美日韩视频免费播放| 欧美激情一级欧美精品| 欧美性猛交xxxx乱大交3| 性欧美办公室18xxxxhd| 中文字幕欧美视频在线| 日本亚洲欧洲色α| 欧美性感美女h网站在线观看免费| 国产欧美精品日韩精品| 97在线视频国产| 久久伊人91精品综合网站| 精品日韩中文字幕| 国产免费一区二区三区香蕉精| 午夜精品久久久99热福利| 国产日韩欧美在线| 欧美极品在线视频| 欧美丝袜一区二区三区| 欧美激情区在线播放| 国产成人avxxxxx在线看| 国产视频综合在线| 91天堂在线观看| 亚洲欧美激情四射在线日| 性色av一区二区三区免费| 欧美在线中文字幕| 精品中文视频在线| 亚洲色图av在线| 国产精品久久久久91| 亚洲国产91色在线| 4444欧美成人kkkk| 欧美精品在线视频观看| 日韩在线播放av| 国产精品久久久久国产a级| 美女久久久久久久| 伊人伊成久久人综合网站| 色婷婷**av毛片一区| 精品国产91久久久久久| 一区二区三区黄色| 欧美性猛交xxxx乱大交3| 疯狂做受xxxx欧美肥白少妇| 国产亚洲精品久久久久久牛牛| 日韩www在线| 日日骚av一区| 另类天堂视频在线观看| 97婷婷涩涩精品一区| 久久久久这里只有精品| 91欧美激情另类亚洲| 亚洲成人性视频| 日韩网站免费观看高清| 久久免费观看视频| 亚洲男人天堂九九视频| 日韩电影免费在线观看| 亚洲精品免费网站| 欧美性黄网官网| 国产日韩在线播放| 欧美午夜久久久| 91精品国产91久久久久久久久| 懂色av影视一区二区三区| 热门国产精品亚洲第一区在线| 91精品啪在线观看麻豆免费| 精品一区二区三区电影| 久久久之久亚州精品露出| 欧美国产精品人人做人人爱| 国产一区二区日韩| 国产91精品视频在线观看| 欧美国产日本高清在线| 亚洲欧美国产视频| 欧美日韩综合视频网址| 欧美激情第一页xxx| 亚洲视频在线播放| 亚洲天堂男人的天堂| 日韩亚洲第一页| www.亚洲一区| 欧美激情精品久久久久久久变态| 97在线精品视频| 欧美激情亚洲综合一区| 欧美性一区二区三区| 亚洲精品www久久久| 夜夜嗨av一区二区三区四区| 欧美日韩中文字幕综合视频| 国产精品草莓在线免费观看| 欧美性生交xxxxx久久久| 91视频九色网站| 亚洲精品一区中文字幕乱码| 欧美一级片免费在线| 国产精品扒开腿做爽爽爽视频| 亚洲黄页视频免费观看| 一本一本久久a久久精品综合小说| 2019最新中文字幕| 欧美精品999| 欧美一区三区三区高中清蜜桃| 羞羞色国产精品| 国产精品扒开腿做爽爽爽男男| 91日本在线观看| 亚洲精品美女在线观看播放| 亚洲国产91精品在线观看| 欧美一区二粉嫩精品国产一线天| 国产免费一区二区三区在线能观看| 欧美日韩国产va另类| 亚洲视频精品在线| 欧美极品少妇xxxxⅹ裸体艺术| 欧美乱人伦中文字幕在线| 91在线播放国产| 国产丝袜一区二区三区| 日韩中文字幕在线观看| 全球成人中文在线| 91av网站在线播放| 久久免费精品视频| 久久网福利资源网站| 久久精品99久久久久久久久| 永久免费看mv网站入口亚洲| 国产偷国产偷亚洲清高网站| 久久91精品国产91久久跳| 国产精品电影在线观看| 97人人爽人人喊人人模波多| 欧美激情一区二区三区在线视频观看| 日韩在线观看网站| 日韩美女在线观看|