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()的值 |
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,。
思考:假如我們程序這麼設置屬性,那麼怎麼分別拿到a
和a.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)
括號內爲其對應的類
-