java结丹期(11)----javaweb(jstljsp)
JSP(JavaServer Pages):
1. 概念:
?? ?* Java Server Pages: java服務器端頁面
?? ??? ?* 可以理解為:一個特殊的頁面,其中既可以指定定義html標簽,又可以定義java代碼
?? ??? ?* 用于簡化書寫!!!
2. 原理
?? ?* JSP本質上就是一個Servlet
3. JSP的腳本:JSP定義Java代碼的方式(了解java小腳本)
?? ?1. <% ?代碼 %>:定義的java代碼,在service方法中。service方法中可以定義什么,該腳本中就可以定義什么。
?? ?2. <%! 代碼 %>:定義的java代碼,在jsp轉換后的java類的成員位置。
?? ?3. <%= 代碼 %>:定義的java代碼,會輸出到頁面上。輸出語句中可以定義什么,該腳本中就可以定義什么。
1. 指令
* 作用:用于配置JSP頁面,導入資源文件
* 格式:
?? ?<%@ 指令名稱 屬性名1=屬性值1 屬性名2=屬性值2 ... %>
* 分類:
?? ?1. page: 配置JSP頁面的
?? ??? ?* contentType:等同于response.setContentType()
?? ??? ??? ?1. 設置響應體的mime類型以及字符集
?? ??? ??? ?2. 設置當前jsp頁面的編碼(只能是高級的IDE才能生效,如果使用低級工具,則需要設置pageEncoding屬性設置當前? ? ? ? ? ? ? ? ? 頁面的字符集)
?? ??? ?* import:導包
?? ??? ?* errorPage:當前頁面發生異常后,會自動跳轉到指定的錯誤頁面
?? ??? ?* isErrorPage:標識當前也是是否是錯誤頁面。
?? ??? ??? ?* true:是,可以使用內置對象exception
?? ??? ??? ?* false:否。默認值。不可以使用內置對象exception
?? ?2. include?? ?: 頁面包含的。導入頁面的資源文件
?? ??? ?* <%@include file="top.jsp"%>
?? ?3. taglib?? ?: 導入資源
?? ??? ?* <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
?? ??? ??? ?* prefix:前綴,自定義的
2. 注釋:
?? ?1. html注釋:
?? ??? ?<!-- -->:只能注釋html代碼片段
?? ?2. jsp注釋:推薦使用
?? ??? ?<%-- --%>:可以注釋所有
3. 內置對象
* 在jsp頁面中不需要創建,直接使用的對象
* 一共有9個:
?? ??? ?變量名?? ??? ??? ??? ??? ?真實類型? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 作用
?? ?* pageContext?? ??? ??? ?PageContext? ? ? ? ? ? ? ? ? ? ? 當前頁面共享數據,還可以獲取其他八個內置對象
?? ?* request?? ??? ??? ??? ??? ?HttpServletRequest?? ??? ??? ?一次請求訪問的多個資源(轉發)
?? ?* session?? ??? ??? ??? ??? ?HttpSession? ? ? ? ? ? ? ? ? ? ? ?一次會話的多個請求間
?? ?* application?? ??? ??? ??? ServletContext? ? ? ? ? ? ? ? ? 所有用戶間共享數據
?? ?* response?? ??? ??? ??? ??HttpServletResponse?? ??? ? 響應對象
?? ?* page?? ??? ??? ??? ??? ??? ?Object? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 當前頁面(Servlet)的對象 ?this
?? ?* out? ? ? ? ? ? ? ? ? ? ? ? ? JspWriter? ? ? ? ? ? ? ? ? ? ? ? ? ?輸出對象,數據輸出到頁面上
?? ?* config? ? ? ? ? ? ? ? ? ? ?ServletConfig? ? ? ? ? ? ? ? ? ? ? Servlet的配置對象
?? ?* exception?? ??? ??? ??? ?Throwable? ? ? ? ? ? ? ? ? ? ? ? ? 異常對象
EL表達式
1. 概念:Expression Language 表達式語言
2. 作用:替換和簡化jsp頁面中java代碼的編寫
3. 語法:${表達式}(不要和ajax的搞混了)
4. 注意:
* jsp默認支持el表達式的。如果要忽略el表達式
?? ?1. 設置jsp中page指令中:isELIgnored="true" 忽略當前jsp頁面中所有的el表達式
?? ?2. \${表達式} :忽略當前這個el表達式
5. 使用:
1. 運算:
* 運算符:
?? ?1. 算數運算符: + - * /(div) %(mod)
?? ?2. 比較運算符: > < >= <= == !=
?? ?3. 邏輯運算符: &&(and) ||(or) !(not)
?? ?4. 空運算符: empty
?? ??? ?* 功能:用于判斷字符串、集合、數組對象是否為null或者長度是否為0
?? ??? ?* ${empty list}:判斷字符串、集合、數組對象是否為null或者長度為0
?? ??? ?* ${not empty str}:表示判斷字符串、集合、數組對象是否不為null 并且 長度>0
2. 獲取值
1. el表達式只能從域對象中獲取值
2. 語法:
?? ?1. ${域名稱.鍵名}:從指定域中獲取指定鍵的值
?? ??? ?* 域名稱:
?? ??? ??? ?1. pageScope?? ??? ?--> pageContext
?? ??? ??? ?2. requestScope ?? ?--> request
?? ??? ??? ?3. sessionScope ?? ?--> session
?? ??? ??? ?4. applicationScope --> application(ServletContext)
?? ??? ?* 舉例:在request域中存儲了name=張三
?? ??? ?* 獲取:${requestScope.name}
?? ?2. ${鍵名}:表示依次從最小的域中查找是否有該鍵對應的值,直到找到為止。
? ?
<%@ page import="java.util.List" %> <%@ page import="java.util.ArrayList" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head><title>el獲取域中的數據</title> </head> <body><%//在域中存儲數據session.setAttribute("name","李四");request.setAttribute("name","張三");session.setAttribute("age","23");request.setAttribute("str","");%><h3>el獲取值</h3> ${requestScope.name} ${sessionScope.age} ${sessionScope.haha}${name} ${sessionScope.name}</body> </html>
?? ?
?? ?3. 獲取對象、List集合、Map集合的值
?? ??? ?1. 對象:${域名稱.鍵名.屬性名}
?? ??? ??? ?* 本質上會去調用對象的getter方法
?? ??? ?2. List集合:${域名稱.鍵名[索引]}
?? ??? ?3. Map集合:
?? ??? ??? ?* ${域名稱.鍵名.key名稱}
?? ??? ??? ?* ${域名稱.鍵名["key名稱"]}
3. 隱式對象:
* el表達式中有11個隱式對象
* pageContext:
?? ?* 獲取jsp其他八個內置對象
?? ??? ?* ${pageContext.request.contextPath}:動態獲取虛擬目錄
?
JSTL
1. 概念:JavaServer Pages Tag Library ?JSP標準標簽庫
?? ?* 是由Apache組織提供的開源的免費的jsp標簽?? ??? ?<標簽>
2. 作用:用于簡化和替換jsp頁面上的java代碼?? ??? ?
3. 使用步驟:
?? ?1. 導入jstl相關jar包
?? ?2. 引入標簽庫:taglib指令: ?<%@ taglib %>
?? ?3. 使用標簽
4. 常用的JSTL標簽
?? ?1. if:相當于java代碼的if語句
?? ??? ?1. 屬性:
?? ??? ??? ?* test 必須屬性,接受boolean表達式
?? ??? ??? ??? ?* 如果表達式為true,則顯示if標簽體內容,如果為false,則不顯示標簽體內容
?? ??? ??? ??? ?* 一般情況下,test屬性值會結合el表達式一起使用
?? ??? ? 2. 注意:
?? ??? ??? ? * c:if標簽沒有else情況,想要else情況,則可以在定義一個c:if標簽
?? ?2. choose:相當于java代碼的switch語句(也相當于if...else)
?? ??? ?1. 使用choose標簽聲明 ? ? ? ? ?? ??? ??? ?相當于switch聲明
?? ??? ?2. 使用when標簽做判斷 ? ? ? ? ?? ??? ??? ?相當于case
?? ??? ?3. 使用otherwise標簽做其他情況的聲明 ? ??? ?相當于default
?
<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><html> <head><title>choose標簽</title> </head> <body><%--完成數字編號對應星期幾案例1.域中存儲一數字2.使用choose標簽取出數字 相當于switch聲明3.使用when標簽做數字判斷 相當于case4.otherwise標簽做其他情況的聲明 相當于default--%><%request.setAttribute("number",51);%><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></body> </html>?? ?3. foreach:相當于java代碼的for語句
<%@ page import="java.util.ArrayList" %> <%@ page import="java.util.List" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %><%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><html> <head><title>foreach標簽</title> </head> <body><%--foreach:相當于java代碼的for語句1. 完成重復的操作for(int i = 0; i < 10; i ++){}* 屬性:begin:開始值end:結束值var:臨時變量step:步長varStatus:循環狀態對象index:容器中元素的索引,從0開始count:循環次數,從1開始2. 遍歷容器List<User> list;for(User user : list){}* 屬性:items:容器對象var:容器中元素的臨時變量varStatus:循環狀態對象index:容器中元素的索引,從0開始count:循環次數,從1開始--%><c:forEach begin="1" end="10" var="i" step="2" varStatus="s">${i} <h3>${s.index}<h3> <h4> ${s.count} </h4><br></c:forEach><hr><%List list = new ArrayList();list.add("aaa");list.add("bbb");list.add("ccc");request.setAttribute("list",list);%><c:forEach items="${list}" var="str" varStatus="s">${s.index} ${s.count} ${str}<br></c:forEach></body> </html>?
總結
以上是生活随笔為你收集整理的java结丹期(11)----javaweb(jstljsp)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java筑基期(10)----ajaxj
- 下一篇: java结丹期(12)----javaw