jsp腳本、jsp標準動作、EL表達式、JSTL標籤

https://blog.csdn.net/gx_hxl/article/details/79032331


https://blog.csdn.net/a731604348/article/details/69053921


前言:在實際開發中,我們不應該使用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");%>1

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

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

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

這裏不能加分號,因爲加分號後,就會編譯成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"%>123

三、七大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()的值
requestScoperequest.getAttribute()
sessionScoperequest.getSession().getAttribute()
applicationScoperequest.getServletContext().getAttribute()
與請求參數(parameter)有關
paramrequest.getParameter()
paramValuesrequest.getParameterValues()
與請求頭部有關
headerrequest.getHeader()
headerValuesrequest.getHeaders()
其他
cookie效果類似於request.getCookie(cookieName),但api沒有這個方法
initParamrequest.getServletContext().getInitParameter()

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

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

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

我們很快能想到可以使用${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 標準標籤庫中學習。






servlet的三大作用域對象:

request(HttpServletRequest)

session(HttpSession):

application(ServletContext):tomcat啓動時創建,tomcat關閉時銷燬,整個web的生命週期只有一個

括號內爲其對應的類


jsp的九大內置對象:

pageContext(pageContext)也包含了另外八大對象的引用

request(HttpServletRequest)

session(HttpSession)

application(ServletContext)

response(HttpResponse)

config(ServletConfig)

out(JspWriter)

page(Object)

exception(Throwable)

括號內爲其對應的類,這些對象都是存在於jsp中的,可以直接使用



jsp的四大作用域對象:

pageContext(pageContext)

request(HttpServletRequest)

session(HttpSession)

application(ServletContext)

括號內爲其對應的類

-


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