web筆記九:jsp腳本、jsp標準動作、EL表達式、JSTL標籤

前言:在實際開發中,我們不應該使用jsp腳本,頁面嵌套各種Java代碼維護起來非常麻煩,而且前端開發人員有時候也不具備Java開發能力,jsp標準動作有時候也需要使用jsp腳本導包,使用起來也比較麻煩,所以在開發過程中儘量使用EL表達式搭配JSTL來使用,好的網站架構應該要做到前後端分離,前端頁面(jsp)只負責拿到並展示數據,不涉及複雜的邏輯處理。所以jsp腳本和標準動作只需要瞭解即可,萬一哪天我們需要維護以前使用腳本的老系統呢?

一、JSP腳本

JSP腳本有三種:JSP聲明、JSP小腳本、JSP表達式

JSP聲明:
<%!…%>這是定義的是 實例變量或者實例方法。

JSP Scriptlet(小腳本):
<%…%>:中間可以寫Java代碼,比如:

<%Student s=new Student; s.setName("abc");%>

這裏注意要用分號(;)隔開,因爲每一個語句時一個Java語句,語句中的任何代碼都是局部變量。

JSP表達式:
<%=…%>:可以寫打印語句,其實編譯過來就是printWrite.print(…),比如:

<%=s.getName()%>===>相當於Java代碼的printWrite.print(s.getName());

這裏不能加分號,因爲加分號後,就會編譯成printWrite.print(s.getName(););,會報錯,百分號與等號之間不能有空格

二、JSP指令:
page指令 taglib指令 include指令
一般JSP文件頭都會有如下代碼:

<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>

三、七大JSP標準動作
jsp:forward: 執行頁面轉向,將請求的處理轉發到下一個頁面。
jsp:param: 用於傳遞參數,必須與其他支持參數曲標籤一起使用。
jsp:include: 用於動態引入一個 JSP 頁面。
jsp:plugin: 用於下載 JavaBean 或 Applet 到客戶端執行。
jsp:useBean: 使用 JavaBean。
jsp:setProperty: 修改 JavaBean 實例的屬性值。
jsp:getProperty: 獲取 JavaBean 實例的屬性值。

四、九大隱式對象
JSPWrite—-out
HttpServletRequest—-request
HttpServletResponse—-response
HttpSession—-session
ServletContext—-application
ServletConfig—-config 初始化類似Servlet,在web.xml中把Servlet-class改成jsp-file標籤
Throwable—-exception
PageContext—-pageContext
Object—-page

============================分割線============================

五、EL表達式
在使用EL表達式之前,我們需要先了解11個隱式對象。

EL表達式 對應的Java方法
對象集合
pageContext 包含request、session、servletContext對象,如:pageContext.servletContext
與屬性(attribute)有關
pageScope 獲得通過jsp腳本page.setAttribute()的值
requestScope request.getAttribute()
sessionScope request.getSession().getAttribute()
applicationScope request.getServletContext().getAttribute()
與請求參數(parameter)有關
param request.getParameter()
paramValues request.getParameterValues()
與請求頭部有關
header request.getHeader()
headerValues request.getHeaders()
其他
cookie 效果類似於request.getCookie(cookieName),但api沒有這個方法
initParam request.getServletContext().getInitParameter()

我們通常使用${name}的方式去獲取屬性值,也就是不指定屬性的範圍,那麼${name}查找的順序爲pageScope-->requestScope-->sessionScope-->applicationScope。如果都沒有找到則返回null,。

思考:假如我們程序這麼設置屬性,那麼怎麼分別拿到aa.b的屬性值呢?

request.setAttribute("a", "a");
request.setAttribute("a.b", "a.b");

我們很快能想到可以使用${a}${a.b},但這是不正確的,正確的拿法是${a}${requestScope["a.b"]}

EL表達式支持簡單的運算功能:
加:+
減:-
乘:*
除:/ 和 div
取模:% 和 mod

與:&& 和 and
或:|| 和 or
非:! 和 not

等於:== 和 eq
不等於:!= 和 ne
小於:< 和 lt
小於等於: <= 和 le
大於:> 和 gt
大於等於:>= 和 ge

六、JSTL標籤庫
EL表達式雖然能滿足我們取值的需求,但是對於類似數組循環,判斷等邏輯行爲就顯得力不從心,JSTL標籤庫封裝了很多實用的標籤。大體分爲五類:
核心標籤
格式化標籤
JSTL 函數
SQL 標籤(不建議使用)
XML 標籤(不建議使用)

關於JSTL標籤庫的使用這裏就不再舉例說明,需要了解的可以移步到JSP 標準標籤庫中學習。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章