目錄
一、JSP
1、指令
【1】作用
- 用於配置JSP頁面,導入資源文件
【2】格式
- <%@ 指令名稱 屬性名1=屬性值1 屬性名2=屬性值2 ..... %>
【3】分類
- page:配置JSP頁面的
- contenType:等同於response.setContentType()
- 設置響應體的mime類型以及字符集
- 設置當前JSP頁面的編碼(高級IDE,如果是低級編譯器,需要設置 pageEncoding 屬性來設置字符集)
- import:導包
- errorPage:當前頁面發生異常後,會自動跳轉到指定的錯誤提示頁面
- isErrorPage:標識當前頁面是否爲錯誤頁面
- true:是,可以使用內置對象 exception
- false:否,默認值,不可以使用內置對象 exception
- contenType:等同於response.setContentType()
- include:頁面包含的,導入頁面資源文件
- <%@include file="top.jsp"%>
- taglib:導入資源
- <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
2、註釋
- <!-- -->:只能註釋HTML代碼片段
- <%-- --%>:可以註釋所有代碼片段
3、內置對象
在JSP頁面中不需要創建,可以直接使用的對象稱爲內置對象,一共有 9 個內置對象
變量名 | 真實類型 | 作用 |
pageContext | PageContext | 當前頁面共享數據,可以獲取其他 8 個對象 |
request | HttpServletRequest | 一次請求訪問的多個資源(轉發) |
session | HttpSession | 一次會話的多個請求 |
application | ServletContext | 所有用戶間數據共享 |
response | HttpServletResponse | 響應對象 |
page | Object | 當前頁面(Servlet)對象 |
out | JspWrite | 輸出對象,輸出數據到頁面上 |
config | ServletConfig | Servlet的配置對象 |
exception | Throwable | 異常對象 |
二、EL表達式
1、概念和作用
- Expression Language(表達式語言),主要用來替換和簡化JSP頁面中的java代碼
2、語法
- ${表達式}
3、忽略EL表達式
- 設置JSP中page指令:isElignored="true" 忽略JSP中所有的 EL 表達式
- \${表達式}:忽略當前的EL表達式
4、EL 表達式的使用
【1】運算符
- 算數運算符:+ - * /(div) %(mod)
- 比較運算符:> < >= <= == !=
- 邏輯運算符:&&(and) ||(or) !(not)
- 空運算符:empty
- ${empty str}:用於判斷字符串,集合數組對象是否爲null或者長度是否爲 0
- ${not empty str}:表示判斷字符串、集合、數組對象是否不爲null並且長度大於 0
【2】獲取值
- EL 表達式只能從域對象中獲取值
- 格式:${域名稱.鍵名} ==> 從指定的域中獲取指定的鍵值
域 對應的域名稱 pageContext pageScope request requestScope session sessionScope application applicationScope ${鍵名}:表示依次從最小的域中查找是否有該鍵對應的值
-
獲取對象:${域名稱.鍵名.屬性名}
本質上是調用Javabean中的getter方法 -
獲取 List 集合:${域名稱.鍵名[索引]}
-
獲取 Map 集合
-
${域名稱.鍵名.key名稱}
-
${域名稱.鍵名["key名稱"]}
-
- 格式:${域名稱.鍵名} ==> 從指定的域中獲取指定的鍵值
【3】隱式對想
EL 表達式中有 11 個隱式對象,這裏主要說 pageContext 隱式對象,pageContext 隱式對象主要功能有:
- 獲取 JSP 其他八個內置對象
- 動態獲取虛擬目錄:
<%@ page import="Test.User" %>
<%@ page import="java.util.*" %>
<%@ page contentType="text/html;charset=UTF-8" isELIgnored="false" language="java" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
${3 > 4}
\${3 > 4}
<hr>
<h3>算數運算符</h3>
${3 + 4}<br>
${3 / 4}<br>
${3 % 4}<br>
<h3>比較運算符</h3>
${3 == 4}<br>
<h3>邏輯運算符</h3>
${3 > 4 && 3 < 4}
${3 > 4 and 3 < 4}
<hr>
<h3>在域中獲取值</h3>
<%
//在request域中存儲值
request.setAttribute("name","oneStar");
//在session域中存儲值
session.setAttribute("age","18");
%>
${requestScope.name}
${sessionScope.age}
${name}
<h3>獲取對象值</h3>
<%
User user = new User();
user.setName("oneStar");
user.setAge(18);
user.setBirthday(new Date());
request.setAttribute("u",user);
%>
${requestScope.u.name}<br>
${requestScope.u.age}<br>
${requestScope.u.birthday}<br>
<h3>獲取List集合</h3>
<%
List list = new ArrayList();
list.add("oneStar");
list.add("twoStar");
list.add("threeStar");
request.setAttribute("list",list);
%>
${requestScope.list}<br>
${requestScope.list[2]}<<br>
<H3>獲取map集合</H3>
<%
Map map = new HashMap<>();
map.put("name","oneStar");
map.put("age","18");
request.setAttribute("map",map);
%>
${requestScope.map}<br>
${requestScope.map.name}<br>
${requestScope.map["age"]}<br>
<h3>隱式對象</h3>
${pageContext.request}
<h4>在JSP頁面動態獲取虛擬目錄</h4>
${pageContext.request.contextPath}
</body>
</html>
三、JSTL 標籤
JSTL 標籤(JavaServer Pages Tag Library),即JSP標準標籤庫,是由 Apache 組織提供的開源免費的JSP標籤,主要是用來簡化和替換JSP頁面上的Java代碼,具體使用步驟如下:
- 導入jstl相關jar包
- 引入標籤庫:taglib指令引入:<%@ taglib %>
- 使用標籤
1、if 標籤
- 屬性:test 屬性,爲必須屬性,接受 boolean 表達式
- 一般情況下,test屬性值會結合 EL 表達式一起使用
- if 標籤沒有else情況,如果想要else效果,可以定義多個 if 標籤
2、choose 標籤
choose 標籤就相當於switch 語句,switch 需要配合 case、default 來使用,而choose則需要配合when、otherwise 來使用
- 使用choose標籤聲明:相當於 switch 聲明
- 使用 when 標籤做判斷:相當於 case
- 使用 otherwise 標籤做其他情況的聲明:相當於default
3、 foreach 標籤
【1】完成重複操作
屬性
- begin:開始值
- end:結束值
- var:臨時變量
- step:步長
- varStatus:循環狀態對象
- index:容器中元素的索引,從 0 開始
- count:循環次數,從 1 開始
【2】遍歷容器
屬性
- items:容器對象
- var:容器中元素的臨時變量
- varStatus:循環狀態對象
- index:容器中元素的索引,從 0 開始、
- count:循環次數,從 1 開始
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>OneStar</title>
</head>
<body>
<h3>if標籤</h3>
<%
List list = new ArrayList();
list.add("oneStar");
list.add("twoStar");
request.setAttribute("list",list);
%>
<c:if test="${not empty list}">
集合非空
</c:if>
<c:if test="${3 % 2 != 0}">
是奇數
</c:if>
<hr>
<h3>choose標籤</h3>
<%
request.setAttribute("number","12");
%>
<c:choose>
<c:when test="${number == 1}">星期一</c:when>
<c:when test="${number == 2}">星期二</c:when>
<c:when test="${number == 3}">星期三</c:when>
<c:when test="${number == 4}">星期四</c:when>
<c:when test="${number == 5}">星期五</c:when>
<c:when test="${number == 6}">星期六</c:when>
<c:when test="${number == 7}">星期日</c:when>
<c:otherwise>不正確字符!!!</c:otherwise>
</c:choose>
<h3>foreach標籤</h3>
<c:forEach begin="0" end="10" var="i" step="1">
${i}
</c:forEach><br>
<%
List lists = new ArrayList();
lists.add("oneStar");
lists.add("twoStar");
request.setAttribute("lists",lists);
%>
<c:forEach items="${lists}" var="list" varStatus="s">
${s.index} ${s.count} ${list}<br>
</c:forEach>
</body>
</html>