Listener監聽器、EL表達式、JSTL標籤庫
尚硅谷JavaWeb筆記-06

Listener監聽器

  • 是一個接口,用於監聽某種事物的變化

ServletContextListener 監聽器

  • ServletContextListener 它可以監聽 ServletContext 物件的創建和銷毀。
  • ServletContext 物件在 web 工程啟動的時候創建,在 web 工程停止的時候銷毀。
  • 監聽到創建和銷毀之後都會分別調用 ServletContextListener 監聽器的方法回饋
  • 兩個方法分別是:
public interface ServletContextListener extends EventListener {

// 在ServletContext 物件創建之後馬上調用,做初始化
public void contextInitialized(ServletContextEvent sce);

// 在ServletContext 物件銷毀之後調用
public void contextDestroyed(ServletContextEvent sce);

使用步驟

  1. 編寫一個類去實現 ServletContextListener

  2. 實現其兩個回檔方法

  3. 到 web.xml 中去配置監聽器

監聽器實現類
public class MyServletContextListenerImpl implements ServletContextListener {

@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("ServletContext 對象被創建了");
}

@Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("ServletContext 對象被銷毀了");
}

}
web.xml 中的配置
<!--配置監聽器-->
<listener>
	<listener-class>com.atguigu.listener.MyServletContextListenerImpl</listener-class>
</listener>

EL表達式

Expression Language,這部分過眼了解就好不用詳細研究

  • 用於簡化JSP中的表達式語法(就是取代那些<% ….)
  • 格式是:${運算式}
  • EL表達式在輸出 null 值的時候,輸出的是空串
  • jsp 運算式腳本輸出 null 值的時候,輸出的是 null 字串

輸出域物件的值

EL表達式最主要的功能

  • ${ key }它會自動從範圍小到大搜索,找到就輸出
<body>
<%
    //往四個域中都保存了相同的 key 的資料。
    request.setAttribute("key", "request");
    session.setAttribute("key", "session");
    application.setAttribute("key", "application");
    pageContext.setAttribute("key", "pageContext");

%>
${ key }
</body>

輸出Bean的屬性

<body>
<%
    Person person = new Person();
    person.setName("張三");
    person.setPhones(new String[]{"18610541354","18688886666","18699998888"});

    List<String> cities = new ArrayList<String>();
    cities.add("北京");
    cities.add("上海");
    cities.add("深圳");
    person.setCities(cities);

    Map<String,Object> map = new HashMap<>();
    map.put("key1","value1");
    map.put("key2","value2");
    map.put("key3","value3");
    person.setMap(map);

    pageContext.setAttribute("p", person);

%>

輸出 Person:${ p }<br/>
輸出 Person 的 name 屬性:${p.name} <br>
輸出 Person 的 pnones 陣列屬性值:${p.phones[2]} <br>
輸出 Person 的 cities 集合中的元素值:${p.cities} <br>
輸出 Person 的 List 集合中個別元素值:${p.cities[2]} <br>
輸出 Person 的 Map 集合: ${p.map} <br>
輸出 Person 的 Map 集合中某個 key 的值: ${p.map.key3} <br>
輸出 Person 的 age 屬性:${p.age} <br>

</body>

empty 運算

  • empty 運算可以判斷一個資料是否為空,如果為空,則輸出 true,不為空輸出 false
  • 以下幾種情況為空:
    • 值為 null 值的時候,為空
    • 值為空串的時候,為空
    • 值是 Object 類型陣列,長度為零的時候
    • list 集合,元素個數為零
    • map 集合,元素個數為零
<body>
<%
request.setAttribute("Str", "");
%>

${ empty Str }
</body>

獲取特定域中的值

  • pageScope > pageContext 域
  • requestScope > Request 域
  • sessionScope > Session 域
  • applicationScope > ServletContext 域
<body>
<%
    pageContext.setAttribute("key1", "pageContext1");
    pageContext.setAttribute("key2", "pageContext2");
    request.setAttribute("key2", "request");
    session.setAttribute("key2", "session");
    application.setAttribute("key2", "application");
%>
${ applicationScope.key2 }
</body>

pageContext的使用

<body>
<%-- 原本jsp中的用法
request.getScheme() 它可以獲取請求的協議
request.getServerName() 獲取請求的伺服器 ip 或功能變數名稱
request.getServerPort() 獲取請求的伺服器埠號
getContextPath() 獲取當前工程路徑
request.getMethod() 獲取請求的方式(GET 或 POST)
request.getRemoteHost() 獲取用戶端的 ip 地址
session.getId() 獲取會話的唯一標識
--%>
<%
    pageContext.setAttribute("req", request);
%>
<%=request.getScheme() %> <br>

1.協議: ${ req.scheme }<br>
2.伺服器 ip:${ pageContext.request.serverName }<br>
3.伺服器埠:${ pageContext.request.serverPort }<br>
4.獲取工程路徑:${ pageContext.request.contextPath }<br>
5.獲取請求方法:${ pageContext.request.method }<br>
6.獲取用戶端 ip 地址:${ pageContext.request.remoteHost }<br>
7.獲取會話的 id 編號:${ pageContext.session.id }<br>
</body>

JSTL標籤庫

JSP Standard Tag Library,JSP 標準標籤庫

  • 是一個不斷完善的開放原始程式碼的 JSP 標簽庫,可以讓整個 jsp 頁面變得更佳簡潔
功能範圍 URI 首碼
核心標籤庫 http://java.sun.com/jsp/jstl/core c
格式化 http://java.sun.com/jsp/jstl/fmt fmt
函數 http://java.sun.com/jsp/jstl/functions fn

使用

先導入 jstl 標籤庫的 jar 包

taglibs-standard-impl-1.2.1.jar

taglibs-standard-spec-1.2.1.jar

第二步,使用 taglib 指令引入標籤庫

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

範例

<%-- 原本的寫法
ii.<c:if />
if 標籤用來做 if 判斷。
test 屬性工作表示判斷的條件(使用 EL 運算式輸出)
--%>

<c:if test="${ 12 == 12 }">
    <h1>12 等於 12</h1>
</c:if>
  • 反正來來去去就那些,看到這種<c:開頭之類的就知道它是JSTL,大致也都能看懂,不懂再查也不遲

上次修改於 2022-01-06