1. 程式人生 > 其它 >Spring Boot Actuator監控檢查

Spring Boot Actuator監控檢查

技術標籤:Java Web

目錄

一、EL表示式簡介

二、EL表示式獲取資料

1.EL 表示式搜尋域資料的順序

2.EL表示式獲取JavaBean的資料

2.1 JavaBean規範

2.2 獲取JavaBean中不同型別的資料

三、EL的11個隱含物件

1.pageContext的使用

2.獲取四個特定域中的屬性

3.其他隱含物件的使用

四、EL中的運算子

1.關係運算

2.邏輯運算

3.算數運算

4.empty運算

5.三元運算子

6."."點運算和[]中括號運算子


一、EL表示式簡介

  1. EL 表示式的全稱:Expression Language。是表示式語言。
  2. EL 表示式的作用:EL 表示式主要是代替 jsp 頁面中的表示式指令碼在 jsp 頁面中進行資料的輸出。因為 EL 表示式在輸出資料的時候,要比 jsp 的表示式指令碼要簡潔很多。
  3. EL表示式的語法格式:${表示式}。EL 表示式在輸出 null 值的時候,輸出的是空串。jsp 表示式指令碼輸出 null 值的時候,輸出的是 null 字串。

二、EL表示式獲取資料

示例:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>EL表示式簡介</title>
</head>
<body>
	<%
		request.setAttribute("userName", "root");
	%>
	
	JSP表示式輸出userName:<%= request.getAttribute("userName") %><br />	
	JSP表示式輸出password:<%= request.getAttribute("password") %><br />
	EL表示式輸出userName:${userName }<br /> 
	EL表示式輸出password:${password }<br />
</body>
</html>

1.EL 表示式搜尋域資料的順序

EL 表示式主要是在 jsp 頁面中輸出資料。主要是輸出域物件中的資料。當四個域中都有相同的 key 的資料的時候,EL 表示式會按照四個域的從小到大的順序去進行搜尋,找到就輸出。如下:

<body>
	<%
		pageContext.setAttribute("key", "pageContextValue");
		request.setAttribute("key", "requestValue");
		session.setAttribute("key", "sessionValue");
		application.setAttribute("key", "applicationValue");
	%>
	EL表示式輸出資料:${key }<br />
</body>

訪問瀏覽器結果:EL表示式輸出資料:pageContextValue

2.EL表示式獲取JavaBean的資料

2.1 JavaBean規範

  1. JavaBean 類必須是一個公共類,並將其訪問屬性設定為 public。
  2. JavaBean 類必須有一個空的建構函式:類中必須有一個不帶引數的公用構造器,此構造器也應該通過呼叫各個特性的設定方法來設定特性的預設值。
  3. 一個JavaBean類不應有公共例項變數,類變數都為private。
  4. 持有值應該通過一組存取方法(getXxx 和 setXxx)來訪問:對於每個特性,應該有一個帶匹配公用 getter 和 setter 方法的專用例項變數。若是布林值,可以用isXxx來代替getXxx。
  5. 成員變數的第二個字母最好不要大寫, 像rCategory, hFilename之類,生成getter 和setter會有問題。

2.2 獲取JavaBean中不同型別的資料

public class Person {
	private String name;
	private String[] hobbies;
	private List<String> friends;
	private Map<String, String> map;

	public String getName() {
		System.out.println("Person類的getName方法");
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String[] getHobbies() {
		System.out.println("Person類的getHobbies方法");
		return hobbies;
	}

	public void setHobbies(String[] hobbies) {
		this.hobbies = hobbies;
	}

	public List<String> getFriends() {
		System.out.println("Person類的getFriends方法");
		return friends;
	}

	public void setFriends(List<String> friends) {
		this.friends = friends;
	}

	public Map<String, String> getMap() {
		System.out.println("Person類的getMap方法");
		return map;
	}

	public void setMap(Map<String, String> map) {
		this.map = map;
	}

	@Override
	public String toString() {
		return "Person類的toString方法";
	}
	
}
<body>
	<%
		String[] hobbies = {"打籃球","下棋"};
		
		List<String> friends = new ArrayList<String>();
		friends.add("李四");
		friends.add("王五");
		
		Map<String, String> hashMap = new HashMap<>();
		hashMap.put("key1", "value1");
		hashMap.put("key2", "value2");
	
		Person p = new Person();
		p.setName("張三");
		p.setHobbies(hobbies);
		p.setFriends(friends);
		p.setMap(hashMap);
		
		pageContext.setAttribute("person", p);
	%>
	
	EL表示式輸出p物件: ${person }<br />
	EL表示式輸出name成員: ${person.name }<br />
	EL表示式輸出hobbies陣列的第一個元素: ${person.hobbies[0] }<br />
    EL表示式輸出hobbies陣列越界的元素: ${person.hobbies[10] }<br />
	EL表示式輸出firends集合: ${person.friends }<br />
	EL表示式輸出firends集合的第一個元素: ${person.friends[0] }<br />
	EL表示式輸出map: ${person.map }<br />
	EL表示式輸出map的第一個鍵對應的值: ${person.map.key1 }<br />
</body>

瀏覽器訪問結果:

由於在JavaBean中每個成員的getter方法中都往控制檯輸出了一句話,下面為控制檯輸出:

可以看到,EL表示式獲取值其實是通過JavaBean的getter方法獲取資料。

三、EL的11個隱含物件

EL 個達式中 11 個隱含物件,是 EL 表示式中自己定義的,可以直接使用。如下:

變數型別作用
pageContextPageContextImpl它可以獲取 jsp 中的九大隱含物件
pageScopeMap<String,Object>它可以獲取 pageContext 域中的資料
requestScopeMap<String,Object>它可以獲取 request 域中的資料
sessionScopeMap<String,Object>它可以獲取 session 域中的資料
applicationScopeMap<String,Object>它可以獲取 application 域(ServletContext)中的資料
paramMap<String,String>它可以獲取請求引數的值
paramValuesMap<String,String[]>它也可以獲取請求引數的值,獲取多個值的時候使用。
headerMap<String,String>它可以獲取請求頭的資訊
headerValuesMap<String,String[]>它可以獲取請求頭的資訊,它可以獲取多個值的情況
cookieMap<String,Cookie>它可以獲取當前請求的 Cookie 資訊
initParamMap<String,String>它可以獲取在 web.xml 中配置的<context-param>上下文引數

1.pageContext的使用

EL表示式中的pageContext可以獲取JSP中的九個隱含物件,JSP中的幾個物件的原型我們可以檢視其轉換後的Servlet類得知。比如JSP中的request物件就是HttpRequest物件,session就是HttpSession物件,所以我們可以呼叫其暴露出來的getter方法,而EL表示式只不過是以“.”的形式執行其getter方法。

<body>
	1.獲取請求的協議: ${pageContext.request.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>

瀏覽器訪問結果如下:

2.獲取四個特定域中的屬性

如果不使用EL域物件那麼其搜尋域資料的順序是由小到大的,EL提供4個域物件方便精準獲取資料。

<body>
	<%
		pageContext.setAttribute("key", "pageContextValue");
		request.setAttribute("key", "requestValue");
		session.setAttribute("key", "sessionValue");
		application.setAttribute("key", "applicationValue");
	%>
	pageContext域中的資料: ${pageScope.key }<br />
	request域中的資料: ${requestScope.key }<br />
	session域中的資料: ${sessionScope.key }<br />
	application域中的資料: ${applicationScope.key }<br />
</body>

瀏覽器訪問結果如下:

3.其他隱含物件的使用

獲取請求引數

<body>
	<%--請求引數:?userName=123&hobby=c&hobby=java --%>
	1.獲取請求引數userName的值:${param.userName }<br />
	2.獲取請求引數userName的值:${paramValues.userName[0] }<br />
	
	3.獲取請求引數hobby的值 : ${paramValues.hobby[0] }<br />
	4.獲取請求引數hobby的值 : ${paramValues.hobby[1] }<br />
</body>

瀏覽器訪問結果如下:

獲取請求頭資訊

<body>
	1.輸出請求頭【User-Agent】的值:${header['User-Agent'] } <br />
	2.輸出請求頭【User-Agent】的值:${headerValues['User-Agent'][0] } <br />
	3.輸出請求頭【Accept-Language】的值:${header['Accept-Language'] } <br />
	4.輸出請求頭【Connection】的值:${header.Connection } <br />
	5.輸出請求頭【Host】的值:${header.Host } <br />
</body>

瀏覽器訪問結果如下:

獲取Cookie資訊

<body>
	1.獲取 Cookie 的名稱:${cookie.JSESSIONID.name } <br />
	2.獲取 Cookie 的值:${cookie.JSESSIONID.value } <br />
</body>

瀏覽器訪問結果如下:

獲取web.xml中配置的值

<context-param>
    <param-name>userName</param-name>
	<param-value>root</param-value>
</context-param>
<body>
	獲取全域性配置userName 的值:${initParam.userName } <br />
</body>

訪問結果為:root

四、EL中的運算子

1.關係運算

關係運算符示例結果
==或eq${5 == 5}或 ${5 eq 5}true
!=或ne${5 != 5}或 ${5 ne 5}false
<或lt${2 < 8}或 ${2 lt 8 }true
>或gt${2 > 8 }或 ${2 gt 8 }false
<=或 le${2 <= 2 }或 ${2 le 2 }true
>=或 ge${2 >= 6}或 ${2 ge 6}false

2.邏輯運算

邏輯運算子示例結果
&&或and${12 < 20 && 2 > 1}或 ${12 < 20 and 2 > 1}true
||或or${12 == 12 || 1 > 6}或 ${12 == 12 or 1 > 6}true
!或not${! true}或 ${not true}false

3.算數運算

算數運算子示例結果
+${10 + 1}11
-${10 - 1}9
*${10 * 2}20
/或div${10 / 2}或 ${10 div 2}5
%或mod${11 % 10}或 ${11 mod 10}1

4.empty運算

empty 運算可以判斷一個數據是否為空,如果為空,則輸出 true,不為空輸出 false。

以下幾種情況為空:

  1. 值為 null 值的時候,為空
  2. 值為空串的時候,為空
  3. 值是 Object 型別陣列,長度為零的時候
  4. list 集合,元素個數為零
  5. map 集合,元素個數為零

5.三元運算子

表示式 1?表示式 2:表示式 3

如果表示式 1 的值為真,返回表示式 2 的值,如果表示式 1 的值為假,返回表示式 3 的值。

6."."點運算和[]中括號運算子

.點運算,可以輸出 Bean 物件中某個屬性的值。[]中括號運算,可以輸出有序集合中某個元素的值。並且[]中括號運算,還可以輸出 map 集合中 key 裡含有特殊字元的 key 的值。

<body>
	<%
		Map<String, String> hashMap = new HashMap<>(); 
		hashMap.put("Accept-Language", "xxx");
		hashMap.put("User-Agent", "yyy");
		hashMap.put("Connection", "zzz");
		pageContext.setAttribute("map", hashMap);
	%>
	${pageScope.map["Accept-Language"] }<br />
	${pageScope.map["User-Agent"] }<br />
	${pageScope.map.Connection }<br />
</body>

最後需要注意的是:EL表示式目的是替代JSP指令碼表示式可以使頁面變得整潔,方便,避免<%= %>的出現。由於JSP中Java程式碼就是寫在<%%>中的,這將導致不能與EL表示式一起使用,可以利用JSP中的各種標籤替代Java程式碼,這樣可以結合EL表示式。比如對於一些使用if判斷的java程式碼可以使用JSP標籤來代替<c:if>等。