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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

2020年_Jsp Jstl 学习笔记

發布時間:2025/1/21 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2020年_Jsp Jstl 学习笔记 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2020年_Jsp & Jstl 筆記

servlet

每創建/修改一個servlet,都要重新部署一遍項目。(修改Jsp不需要,支持熱更新)

@WebServlet(name = "ServletDemo",value="/scope") //value的值是路徑

一、Jsp的腳本

普通腳本

<% %>

所有Java語句都可以在里面書寫,除了函數語句。

聲明腳本

<%! %>
  • 聲明腳本聲明的變量是全局變量

  • 聲明腳本的內容必須在普通腳本<% %>中調用

  • 如果聲明腳本中的函數具有返回值,使用輸出腳本調用<%= %>

輸出腳本

<%= %>

后面可以寫函數,但是必須有返回值,結尾不需要加分號。

Jsp注釋

<%-- 注釋的內容 --%> // 不會輸出,甚至不會被編譯

當然也可以直接使用html注釋

<!-- 這是一條注釋 --> // 這個注釋在頁面中通過 F12能看到

Jsp指令

JSP指令用來設置與整個Jsp頁面相關的屬性。

Page指令

語法 <% @page attribute1=“value1” attribute2=“value2” %>

屬性描述
contentType指定當前Jsp頁面的MIME類型和字符編碼格式
errorPage指定當JSP頁面發生異常時需要轉向的錯誤處理頁面
isErrorPage指定當前頁面是否作為寧一個Jsp頁面的錯誤處理頁面
import導入要使用的Java類
language定義JSP頁面所用的腳本語言,默認是Java
session制定Jsp頁面是否使用session。默認為true則立即創建,false為使用時創建

Include指令

  • 語法: <%@ include file= “被包含的JSP路徑”
  • 被包含的文件可以使JSP文件、html文件或者文本文件,包含的文件就好是當前JSP文件的一部分,會被同時編譯執行(靜態包含)。
<%@ include file="header.jsp"%> ?``` <%@ include file="footer.jsp"%>
  • 注意可能會出現 重名的問題,不建議使用

動作標簽

  • 語法:<jsp:action name attribute=“value”/>
  • 動作標簽指的是 jsp頁面在運行期間的命令

include(動作標簽)

  • 語法:< jsp:include page=“相對URL地址”/>
  • <jsp:include > 動作元素會將外部文件輸出的結果包含在jsp中(動態包含)
<jsp:include page="index.jsp"/>
  • 注意: 前面已經介紹過include指令,它是將外部文件的輸出代碼復制到當前Jsp文件中,而這里的jsp:include動作不同,是將外部文件的輸出結果引入到了當前Jsp文件中。

useBean(注冊對象)

  • 語法 <jsp:useBean id=“name” class=“package.className” />
  • jsp:useBean 動作用來加載一個將在JSP頁面中使用的JavaBean。
屬性描述
id必須,對象的名字
class必須,全限定名
<jsp:useBean id="user" class="com.qf.entity.User"/>
  • 在類載入后,我們可以通過jsp:setProperty 和 jsp:getProperty動作來修改和獲取bean的屬性。

  • 在創建類的時候,屬性要全部私有化,必須含有getter and setter、無參構造方法 和 有參構造方法

setProperty

可以在jsp:useBean元素之后使用jsp:setProperty進行屬性的賦值

屬性描述
name必須,用來指定設置屬性的是哪個bean
property必須,表示要設置哪個屬性
valuevalue屬性是可選的。該屬性用來指定Bean屬性的值
<jsp:useBean id="user" class="com.qf.entity.User" /> <jsp:setProperty name="user" property="name" value="gavin"/>

getProperty

jsp:getProperty動作提取指定Bean屬性的值,轉換成字符串,然后輸出。

屬性描述
name要檢索的Bean屬性名稱。Bean必須已定義。
property表示要提取Bean屬性的值
<jsp:useBean id="user" class="com.qf.entity.User"/> <jsp:setProperty name="user" property="name" value="gavin"/> <jsp:getProperty name="user" property="name" />

forward

  • 語法:< jsp:forwar page=“相對URL”
  • jsp:forward 動作把請求轉到另外的頁面。
屬性描述
pagepage屬性包含的是一個相對url地址
<jsp:forward page="index.jsp"/>

forward

  • 語法: <jsp:param name="" value="" />
  • 在轉發動作的內部使用,作為參數傳遞
<jsp:forward page="index.jsp"<jsp:param name="sex" value="nam"/> </jsp:forward>

內置對象

由JSP自動創建的對象,可以直接使用,九大內置對象。

四大域對象

JSP有四大作用域對象,存儲數據和獲取數據的方式一樣,不同的是取值的范圍有差別

  • pageContext(javax.servlet.jsp.PageContext) 當前JSP頁面范圍
  • request(javax.servlet.http.HttpServletRequest) 一次請求有效
  • session(javax.servlet.http.HttpSession) 一次會話有效(關閉瀏覽器失效)
  • application(javax.servlet.ServletContext) 整個web應用有效(服務器重啟或關閉失效)

pageContext對象

  • pageContext對象是javax.servlet.jsp.PageContext類的實例,擁有作用域,用來代表整個Jsp頁面。
  • 當前頁面的作用域對象,一旦跳轉則失效
  • 通過setAttribute(“name”,“value”)存儲值
  • 通過getAttribute(“name”) 獲取值
  • 用于獲取其他8個內置對象或者操作其他對象的作用域
<%pageContext.setAttribute("name",value); %>

pageContext獲取其他內置對象

<%pageContext.getRequest();pageContext.getResponse();pageContext.getSession();pageContext.getServletConfig();pageContext.getServletContext();pageContext.getOut();pageContext.getException();pageContext.getPage();%>

pageContext操作其他作用域

pageContext.setAttribute("page","123"); pageContext.setAttribute("req","aaa",PageContext.REQUEST_SCOPE); pageContext.setAttribute("session","bbb",PageContext.SESSION_SCOPE); String req = (String) request.getAttribute("req"); String session = (String) session.getAttribute("sess"); String sess = (String) session.getAttribute("sess"); String app = (String) qpplication.getAttribute("app"); // 全能王 String result = (String) pageContext.findAttribute("req"); // 它會依次查找 pageContext 、 request 、session 、 application // 如果查找到了,它就直接返回

二、EL表達式(express Language)

2.1 概念

EL使JSP寫起來更簡潔。主要用于獲取作用域中的數據

2.2 作用

用于替換作用域對象getAttribute(“name”)

2.3 應用

  • ${scope.name } 獲取具體某個作用域中的數據
  • ${name} 獲取作用域中的數據,逐級查找 pageContext、request、session、application

2.4.1 EL案例

<%request.setAttribute("name","tom");request.setAttribute("age","18"); %> ${requestScope.name} ${name} // 從最小作用域逐級查找,找不到則返回“”

2.4.2 EL和JSP腳本的區別

  • <%= request.getAttribute() %> // 沒有找到返回null
  • ${requestScope.name} // 沒有找到返回“”

2.5 EL獲得引用對象

使用 .成員變量名方式訪問,或者arr[i]來訪問,或者使用get方法

<% Emp e = new Emp();e.setName("gavin");e.setAge("19");request.setAttribute("e",e); %> ${requestScope.e.name}

2.6 EL的empty運算符

用于測試數值是否為空值

<%request.setAttribute("aaa","");request.setAttribute("bbb",null);%>${empty aaa} //true${empty bbb} //true

2.7 隱式對象

2.7.1 獲取應用上下文

<%=request.getContextPath()%>${pageContext.request.contextPath}

2.7.2 獲取Cookie對象

${cookie.name.value}<br> ${cookie.pass.value} <hr/> <%-- 使用傳統方法 --%> <% Cookie[] cookies = request.getCookies(); String username = ""; String pass = ""; if (cookies != null){for (Cookie cookie : cookies){if (cookie.getName().equals("name")){username=cookie.getValue();}if (cookie.getName().equals("pass")){pass = cookie.getValue();}} } %> <%=username%><%=pass %>

六、JSTL標準標簽庫

6.1 現有問題

  • EL主要是用于作用域獲取數據,雖然可以做運算判斷,但是得到的都是一個結果,作展示。
  • EL不存在流程控制。比如判斷
  • EL對于集合智能做單點訪問,不能實現遍歷操作。

6.2 什么是JSTL?

  • JSTL:全稱Java Server Pages Standard Tag Liabrary
  • JSP標準標簽庫(JSTL)是一個JSP標簽機和。

6.3 JSTL的作用

  • 可對EL獲取到的數據進行邏輯操作。
  • 與EL合作完成數據的展示。

6.4 JSTL使用

  • 導入兩個jar文件:stardard.jar 和 jstl.jar 文件拷貝到/WEB-INF/lib/下
  • 在JSP頁面引入標簽庫 <%@ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core” %>

6.5 核心標簽

6.5.1 條件標簽if判斷

語法: <c:if test=“條件”> < /c:if >

<% pageContext.setAttribute("username","jerry"); pageContext.setAttribute("age",1000); %><c:if test="${username eq 'tom'}"><h1>歡迎訪問,${username}</h1> </c:if><c:if test="${username != 'tom'}"><h1>請重新登錄</h1> </c:if>
6.5.2 多條件choose判斷

語法:< c:choose>

? <c:when test=“條件1”> 結果1 < /c:when>

? <c:when test=“條件2”> 結果2 < /c:when>

? <c:otherwise > 結果4 </c:otherwise >

? < /c:choose>

<c:choose><c:when test="${age<=18}"><h1>青年</h1></c:when><c:when test="${age<=30}"><h1>中年</h1></c:when><c:when test="${age<=80}"><h1>老年</h1></c:when><c:otherwise><h1>修仙者</h1></c:otherwise> </c:choose>
6.5.3 迭代foreach標簽

語法

<c:foreach

? var=“變量名”

? items=“集合”

? begin=“起始下標”

? end=“結束下標”

? step=“間隔長度”

? varstatus=“遍歷狀態” > //very important

< /c:foreach>

<% List<Person> persons = new ArrayList<Person>(); persons.add(new Person("tom","18")); persons.add(new Person("jerry","18")); persons.add(new Person("alice","18")); persons.add(new Person("mike","18")); request.setAttribute("persons",persons); %><c:forEach var="item" items="${persons}" begin="0" end="2" step="1" varStatus="i">${item.name} - ${item.age} - ${i.first} - ${i.last} - ${i.count} - ${i.index}<br> </c:forEach>

特別標注:forEach循環無法主動停止。如果想執行某些操作后停止循環,

可以采用以下方式不執行循環里的操作。

<c:set var="exitId" value="0"/> //set 變量 <c:forEach var="element" items="${reserveArr}" varStatus="vs"> <c:if test="${exitId eq '0' && item.bookId eq element}"> <a href="${baseUrl}/user/book/cancel?username=${u.username}&bid=${item.bookId}"><button type="button" class="btn btn-default">取消預定</button></a><c:set var="exitId" value="1"/> // 完成循環目的后,停止循環, set 變量等于1 </c:if> <c:if test="${exitId eq '0' && vs.last && item.bookId ne element}"><a href="${baseUrl}/user/book/reserve?username=${u.username}&BookId=${item.bookId}"><button type="button" class="btn btn-primary">提前預定</button></a><c:set var="exitId" value="1"/> </c:if> </c:forEach> <c:set var="exitId" value="0"/> //值恢復成原來的
6.5.4 url標簽

在Cookie禁用的情況下,通過重寫URL拼寫JESSIONID來傳遞ID值。便于下一次訪問時可查找到上一次的Session對象。(如果Cookie沒有被禁用url就不會被禁止)

<%-- 當指定 var屬性后,就不會渲染到頁面中,而是可以通過${} 進行訪問 --%> <c:url context="${pageContext.request.contextPath}" value="/user/book.jsp" var="lianjie"/> <a href="<c:url context='${pageContext.request.contextPath}' value='/user' />">鏈接</a> <a href="${lianjie}">鏈接</a>
  • 經驗: 所有涉及到鏈接的都應該使用url重寫機制。

MVC架構

總結

以上是生活随笔為你收集整理的2020年_Jsp Jstl 学习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。

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