日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

大数据WEB阶段(十三)JSP(二)JSP标签、EL表达式、JSTL

發布時間:2024/4/30 javascript 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 大数据WEB阶段(十三)JSP(二)JSP标签、EL表达式、JSTL 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

JSP標簽、EL表達式、JSTL

(一)JSP標簽技術

一、JSP標簽技術概述

  • jsp本質上是一種動態web資源開發技術 , 看起來像是html , 但其中可以寫java代碼 , 非常方便用來開發動態web資源 。
  • 但是一旦在jsp中寫了太多的java代碼 , 仍然會造成代碼和標簽混雜在一起 , 不便于開發維護 , 所以sun公司在JSP2.0開始已經不再推薦 在jsp頁面中出現任何一行java代碼了 。
  • 所有的java代碼應該替換問為jsp標簽技術來實現 。
  • jsp標簽技術提供的標簽 , 看起來像是一個標簽 , 但本質上仍然是Java代碼 , 所以仍然是web動態資源開發技術
  • 由于JSP原生的標簽庫標簽比較少, 且不太好用 , 所以目前的開發越來越趨勢:
  • jsp原生標簽 只替代jsp頁面中的轉發和包含的java代碼
  • el表達式替代jsp頁面中腳本表達式
  • JSTL替代jsp頁面中的腳本片段 。
  • (二)JSP標簽

    一、jsp標簽

  • 是sun公司 在jsp2.0中提供的原生的標簽 不需要導入任何開發包就可以直接使用
  • 但是 這個標簽庫中的標簽 比較少 且不太好用 所以現在用的很少
  • 我們只需了解幾個即可

    <jsp:inclue> 用來替代request.getRequestDispatcher().include()實現頁面包含 <jsp:forward>用來替代request.getRequestDispatcher().forward() <jsp:param>配合前兩個標簽使用,可以在包含或轉發時,帶一些參數過去
  • (三)EL表達式

    一、概述及注意

  • 全稱叫做Expression Language ,用來替代jsp頁面中的jsp的腳本表達式 <%= java表達式%>
  • el表達式的形式 $(el表達式)
  • 注意:
  • el只能獲取域中的數據
  • el只能獲取不能遍歷
  • el只能獲取不能修改
  • 二、獲取數據

  • 獲取常量數據

  • 支持包括數值類型 、 在字符串類型 、 布爾類型

    <%--獲取常量數據 --%>${123.342 }${"abc" }${true }${false }
  • 獲取變量中的數據

  • el中直接寫變量的名稱, el會按照由小到大的順序自動搜尋四大作用域找該名稱對應的值 , 如果找到則返回 ,找不到則返回空字符串 。

    <%--獲取變量 --%><%//pageContext.setAttribute("country", "CN");//request.setAttribute("country", "US");//session.setAttribute("country", "UK");//application.setAttribute("country", "JP");%><%= pageContext.findAttribute("country") %>${country }
  • 獲取數組中的數據

  • 可以通過中括號來訪問數組中的數據

    <%--獲取數組中的數據 --%> <%String [] provs = {"京","粵","滬","魯"};pageContext.setAttribute("provs", provs);%> ${provs[2]}
  • 獲取集合中的數據

  • 可以通過中括號來訪問數組中的數據

    <%--獲集合中的數據 --%> <%List list = new ArrayList();list.add("孫悟空");list.add("哈利波特");list.add("薩達姆");list.add("樸乾");pageContext.setAttribute("list", list);%>${list[3] }
  • 獲取Map中的數據

  • 可以通過中括號或點的形式來獲取map中的數據 , 大部分情況下使用哪個都可以 , 但是如果擔心產生歧義(變量名中可能有點), 最好使用中括號
  • 中括號中鍵的名稱加引號就是常量, 直接使用來獲取map中的值 , 如果不加引號 , 則是一個變量 , el會先去獲取對應的值 , 在根據其中的值獲取map中對應變量的值

    <%--獲取map中的數據 --%><%Map<String,String> map = new HashMap<String,String>();map.put("name", "韋小寶"); map.put("addr", "揚州"); map.put("wife", "雙兒"); map.put("shifu", "陳近南");map.put("wife.xiao","阿珂");pageContext.setAttribute("map", map);pageContext.setAttribute("shifu", "addr"); %>${map }${map["name"] }${map.wife }${map["wife.xiao"] }${map[shifu] }
  • 獲取JavaBean的屬性

  • 可以在el中通過【 bean的.屬性 】的方法來獲取bean中的屬性
  • 要注意 ,前提是這個bean中必須要有對應的getxxx()方法

    <%--獲取javabean的屬性 --%><%Person p = new Person();p.setName("張三豐");p.setAge(120);p.setAddr("武當山");pageContext.setAttribute("p", p);%>${p.name }${p.addr }
  • 延伸~~

  • pageContext來獲取當前應用的名稱

    <%= request.getContextPath()%> ${pageContext.request.contextPath}
  • 二、執行簡單的運算

  • 算術運算

  • +
  • -
  • *
  • /
  • %

    <%--算數運算 --%>${ 2 + 3 }${ 2*3 }${ 10/3 }${ 2+"3" }<%-- ${ 2 + "a" } ${"a" + "b" }--%>
  • 注意:el在進行算術運算時 , 會嘗試將參與運算的非數字字符轉換為數字參與運算 , 如果轉換不成功則直接拋出異常
  • 注意:el執行算術運算時運算結果為double類型
  • 關系運算

  • == eq
  • != ne
  • < lt
  • <= le
  • > gt
  • = ge

    <!--關系運算 -->${3 == 4 } ${5>=3 }
  • 邏輯運算

  • && and
  • || or
  • ! not

    <!--邏輯運算符 --> ${3>5 or 3<=4 } ${3>5 and 3<=4 } ${!(3>5 and 3<=4)}
  • 三元運算

    ${3>2 ? "yes" : "no" }
  • empty運算

  • 判斷對象是否是null
  • 判斷對象內容是否為空
  • 判斷集合數組中是否沒有任何元素
  • 判斷域中是否沒有任何屬性

    <%String str = null;str = "";str = "abc";pageContext.setAttribute("str", str);List list = null;list = new ArrayList();list.add("abc");pageContext.setAttribute("list", list);request.setAttribute("like", "football");%>${empty str}${empty list }${empty requestScope}${empty sessionScope}${empty pageScope}${empty applicationScope}
  • 三、獲取常用開發對象

  • 概述:
  • 了為了方便使用 , 在其內部定義了11個el內置的對象 , 不需要 提親存入域中就能使用 。
  • 要注意 , 著了所謂的11個內置對象域之jsp中九大飲食對象不是一回事 , 沒有關系
  • 11個內置對象

  • pageContext :代表當前頁面 , 有了它就意味著有了 九大隱式對象

    <!-- pageContext 代表當前頁面的對象 有了它就相當于有了九大隱式對象 --> ${pageContext.request } ${pageContext.session }
  • pageScope :pageContext域

  • requestScope: request域
  • sessionScope :session域
  • applicationScope : application域

    <!-- 代表四大作用域的對象,注意!是作用域 不是對象本身!pageScope -- pageContext域requestScope -- request域 sessionScpoe -- sessiono域applicationScope -- ServletContext域 --> <% request.setAttribute("name", "特朗普");session.setAttribute("name", "普京");application.setAttribute("name", "樸乾");%>${name }${sessionScope.name }${applicationScope.name }
  • param : 瀏覽器提交的請求所有參數組成的Map
  • 四、調用函數

  • 可以調用JSTL中fn子庫中的函數 , 在JSTL中詳解
  • 可以調用自定義的函數 , 但是在開發中幾乎不用
  • (四)JSTL標簽

    一、JSTL標簽概述

  • JavaServer Pages Standard Tag Library 是提供給JavaWeb開發人員的一個標準通用的標簽函數庫
  • 可以與EL表達式配合來取代傳統JSP頁面上嵌入大量的java代碼的做法 , 可以提高 程序的可讀性 、維護性 、 和方便性
  • 在javaee4.0之前需要導入相關的jar包才能使用 ,但是在javaee5.0開始 , 默認已經包含了此jar包
  • 在使用時需要在jsp頁面通過用<%@ taglib %> 標簽來引入相應的標簽庫

    <%@ taglib uri="xxxx" prefix=""%> uri用來指定引入的包 prefix用于指定標簽的前綴 ,可以是任意字符串, 在開發中一般使用默認的c 。
  • 二、JSTL的子庫

  • core : 核心標簽庫
  • fn : JSTL提供的el函數庫 有很多可以通過el調用的函數
  • fmt : 國際化標簽庫
  • xml : 操作xml文件的標簽庫
  • sql : 操作sql的標簽庫
  • 但是在開發中一般jsp文件只用來作數據的展示 , 而邏輯處理全部交給servlet , 所以xml子庫和sql子庫沒人用 , 國際化標簽fmt以后詳解。
  • 三、core子庫

  • 輸出常量
  • 輸出變量
  • 轉義輸出
  • 輸出默認值

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> <!DOCTYPE HTML> <html><head></head><body><h1>輸出固定值</h1><c:out value="987"></c:out><c:out value="abc"></c:out>${987 }${"abc" }<hr> <h1>輸出變量</h1><%pageContext.setAttribute("name", "馬里奧");pageContext.setAttribute("name", "路易吉");%><c:out value="${name}"></c:out>${name }<hr> <h1>轉義輸出</h1><c:out value="<a href='#'>xxx</a>"></c:out><c:out value="<a href='#'>xxx</a>" escapeXml="false"></c:out>${fn:escapeXml("<a href='#'>xxx</a>") }<hr> <h1>輸出默認值</h1><%pageContext.setAttribute("addr", "上海");%><c:out value="${addr}" default="北京"></c:out>${addr == null ? "北京" : addr }<hr> </body> </html>
  • 向四大作用域中添加域屬性
  • 向map中添加或修改鍵值對
  • 修改javaBean中的屬性

    <%@page import="cn.tedu.Person"%> <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <!DOCTYPE HTML><html><head></head><body><h1>向四大作用域增加域屬性</h1><c:set scope="request" var="name" value="張飛"></c:set><c:set scope="page" var="name" value="關羽"></c:set>${requestScope.name }${pageScope.name }<hr> <h1>操作Map 增加或修改Map中的屬性</h1><%Map map = new HashMap();map.put("name", "劉備");map.put("wife", "糜夫人");pageContext.setAttribute("map", map);%><c:set target="${map }" property="wife" value="孫尚香"></c:set>${map }<c:set target="${map }" property="son" value="劉禪"></c:set>${map }<hr> <h1>操作JavaBean的屬性</h1><%Person p = new Person();p.setName("諸葛亮");p.setAge(20);p.setAddr("南陽");pageContext.setAttribute("p", p);%><c:set target="${p }" property="name" value="孔明"></c:set>${p.name }<hr> </body> </html>
  • 移除指定域中的指定名稱的屬性
  • 如果不指定哪個域 , 則默認刪除所有域中的該屬性

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <!DOCTYPE HTML> <html> <head> </head> <body><h1>刪除指定域中的屬性</h1><%pageContext.setAttribute("name", "喬峰");request.setAttribute("name", "段譽");session.setAttribute("name", "虛竹");application.setAttribute("name", "玄慈");%>${name }<c:remove var="name" scope="page"/>${name }<c:remove var="name" scope="request"/>${name } <c:remove var="name" scope="session"/>${name } <c:remove var="name" scope="application"/>${name } <hr><h1>刪除所有域中指定名稱的屬性</h1><%pageContext.setAttribute("name", "喬峰");request.setAttribute("name", "段譽");session.setAttribute("name", "虛竹");application.setAttribute("name", "玄慈");%><c:remove var="name"/>${name } <hr> </body> </html>
  • 捕捉指定范圍內的異常
  • 捕獲到的異常可以通過聲明var屬性來指定一個名字 , 并自動寫入pageContext域中 , 以便后續處理

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <!DOCTYPE HTML> <html> <head> </head> <body><%try{String str = null;str.toUpperCase();}catch(Exception e){out.write("哈哈哈 捕獲了異常~");} %><c:catch var="e"><%String str = null;str.toUpperCase();%></c:catch>${e } </body> </html>
  • 實現判斷
  • test寫判斷表達式
  • scope聲明將判斷結果存入哪個域中
  • var聲明存入域中時的變量名

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <!DOCTYPE HTML> <html><head></head><body><h1>實現判斷</h1><%int num = 1000;pageContext.setAttribute("num", num);%><c:if test="${num<100}" scope="page" var="result">yes~</c:if><c:if test="${num >= 100}">no~</c:if>${result }<hr> </body> </html>
  • -

  • 實現多重判斷

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <!DOCTYPE HTML> <html><head></head><body><%request.setAttribute("day", 2);%><c:choose><c:when test="${day == 1 }">星期一</c:when><c:when test="${day == 2 }">星期二</c:when><c:when test="${day == 3 }">星期三</c:when><c:when test="${day == 4 }">星期四</c:when><c:when test="${day == 5 }">星期五</c:when><c:otherwise>休息日</c:otherwise></c:choose></body> </html>
  • 實現循環遍歷 , 類似于java中的foe循環

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <!DOCTYPE HTML> <html><head></head><body><h1>實現普通for循環</h1><c:forEach begin="0" end="10" step="2" var="i">${i } </c:forEach><hr><h1>實現增強for循環</h1><%List list = new ArrayList();list.add("北京");list.add("上海");list.add("廣州");list.add("深圳");list.add("鐵嶺");pageContext.setAttribute("list", list);%><c:forEach items="${list }" var="addr">${addr } </c:forEach><hr><h1>實驗:遍歷10到100的偶數,如果數字所在的位置是3的倍數,顯示成紅色</h1><c:forEach begin="10" end="100" step="2" var="i" varStatus="stat"><c:if test="${stat.count % 3 == 0 }"><font color="red">${i }</font> </c:if><c:if test="${stat.count % 3 != 0 }"><font color="blue">${i }</font> </c:if></c:forEach><hr></body> </html>
  • 將一串字符按照指定的字符切割

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <!DOCTYPE HTML> <html><head></head><body><c:set scope="page" var="addr" value="www.tedu.cn"></c:set>${addr }<br><c:forTokens items="${addr }" delims="." var="x">${x } <br></c:forTokens></body> </html>
  • 實現url重寫 - 可以實現url重寫 , 在瀏覽器禁用cookie時 , 在請求地址后加上jsessionid從而使用session

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <!DOCTYPE HTML> <html><head></head><body><c:url var="addr" scope="page" value="/index.jsp" context="/Day14"></c:url><a href="${addr }">xx</a></body> </html>
  • 四、fn函數庫

  • JSTL提供了 可以供el表達式調用的函數庫
  • 其中提供了大量的操作字符串的函數

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %><!DOCTYPE HTML><html><head></head><body><c:set var="infos" value="${fn:split('www.tarena.com.cn','.') }" scope="page"></c:set><c:forEach var="info" items="${infos }">${info }<br></c:forEach>${fn:toUpperCase("asdfasLKJasdfgLKjasdfgjk,lHJKqwertbnmassdfKL:HJ") }</body></html>
  • 總結

    以上是生活随笔為你收集整理的大数据WEB阶段(十三)JSP(二)JSP标签、EL表达式、JSTL的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。