【JavaWeb從零到一】JSP&EL&JSTL

一、JSP
在上一篇文章中我們對JSP做了一個初步的了解,所以此文中我將不再重復之前發(fā)布的內(nèi)容,如果有同學想了解的話可以點擊我??

1.JSP中的指令
JSP指令是用來設置整個JSP頁面相關的屬性的,如網(wǎng)頁的編碼方式和腳本語言。

它語法格式如下:

<%@ directive attribute=“value” %>

指令可以有很多個屬性,它們以 鍵值對 的形式存在,并用逗號隔開。

JSP中的三種指令標簽:

指令 描述
<%@ page … %> 定義網(wǎng)頁依賴屬性,比如腳本語言、error頁面、緩存需求等等
<%@ include … %> 包含其他文件
<%@ taglib … %> 引入標簽庫的定義
page指令
Page 指令為容器提供當前頁面的使用說明。一個JSP頁面可以包含多個page指令。

Page指令的語法格式:

<%@ page attribute=“value” %>

page指令有如下屬性值:
屬性 描述
buffer 指定out對象使用緩沖區(qū)的大小,默認8kb
autoFlush 控制out對象的 緩存區(qū)
contentType 指定當前JSP頁面的MIME類型和字符編碼,等同于response.setContentType()
errorPage 指定當JSP頁面發(fā)生異常時需要轉向的錯誤處理頁面
isErrorPage 指定當前頁面是否可以作為另一個JSP頁面的錯誤處理頁面
extends 指定servlet從哪一個類繼承
import 導入要使用的Java類
info 定義JSP頁面的描述信息
isThreadSafe 指定對JSP頁面的訪問是否為線程安全
language 定義JSP頁面所用的腳本語言,默認是Java
session 指定JSP頁面是否使用session
isELIgnored 指定是否執(zhí)行EL表達式
isScriptingEnabled 確定腳本元素能否被使用
Include指令
JSP可以通過include指令來包含其他文件。被包含的文件可以是JSP文件、HTML文件或文本文件。包含的文件就好像是該JSP文件的一部分,會被同時編譯執(zhí)行。

Include指令的語法格式如下:
<%@ include file=“文件相對 url 地址” %>

include指令中的文件名實際上是一個相對的 URL 地址。

如果您沒有給文件關聯(lián)一個路徑,JSP編譯器默認在當前路徑下尋找。
top.jsp文件中加入<h2>這是include頭</h2>,在body.jsp中測試

測試結果:

Taglib指令
JSP API允許用戶自定義標簽,一個自定義標簽庫就是自定義標簽的集合。

Taglib指令引入一個自定義標簽集合的定義,包括庫路徑、自定義標簽。

Taglib指令的語法:
<%@ taglib uri=“uri” prefix=“prefixOfTag” %>

2.JSP中的注釋
HTML注釋:
:只能注釋HTML代碼片段
帶有JSP表達式的注釋:
在HTML注釋中可以嵌入JSP表達式,注釋格式如下:

包含該注釋語句的 JSP 頁面被請求后,服務器能夠識別注釋中的 JSP 表達式,從而來執(zhí)行該表達式,而對注釋中的其他內(nèi)容不做任何操作。
當服務器將執(zhí)行結果返回給客戶端后,客戶端瀏覽器會識別該注釋語句,所以被注釋的內(nèi)容不會顯示在瀏覽器中。
<%String name="XYQ";%>

<table><tr><td>歡迎登錄:<%=name%></td></tr></table>
訪問該頁面后,將會在客戶端瀏覽器中輸出以下內(nèi)容:

歡迎登錄:XYQ

通過查看HTML源代碼,看到如下內(nèi)容:


<table><tr><td>歡迎登錄:XYQ</td></tr></table>
1
2
隱藏注釋:
<%--注釋內(nèi)容--%>

3.JSP中的內(nèi)置對象
在JSP頁面中不需要創(chuàng)建,直接使用的對象

對象 真實類型 說明
request javax.servlet.http.HttpServletRequest 獲取用戶請求信息
response javax.servlet.http.HttpServletResponse 響應客戶端請求,并將處理信息返回到客戶端
out javax.servlet.jsp.JspWriter 輸出內(nèi)容到 HTML 中
session javax.servlet.http.HttpSession 用來保存用戶信息
application javax.servlet.ServletContext 所有用戶共享信息
config javax.servlet.ServletConfig 這是一個 Servlet 配置對象,用于 Servlet 和頁面的初始化參數(shù)
pageContext javax.servlet.jsp.PageContext JSP 的頁面容器,用于訪問 page、request、application 和 session 等的屬性
page javax.servlet.jsp.HttpJspPage 類似于 Java 類的 this 關鍵字,表示當前 JSP 頁面
exception java.lang.Throwable 該對象用于處理 JSP 文件執(zhí)行時發(fā)生的錯誤和異常;只有在 JSP 頁面的 page 指令中指定 isErrorPage 的取值 true 時,才可以在本頁面使用 exception 對象。
二、MVC開發(fā)模式
MVC 模式代表 Model-View-Controller(模型-視圖-控制器) 模式。這種模式用于應用程序的分層開發(fā)。

M:Model(模型) - 模型代表一個存取數(shù)據(jù)的對象或 JAVA POJO。它也可以帶有邏輯,在數(shù)據(jù)變化時更新控制器。通俗來講就是用來完成具體的業(yè)務操作,如:查詢數(shù)據(jù)庫,封裝對象。
V:View(視圖) - 視圖代表模型包含的數(shù)據(jù)的可視化。展示數(shù)據(jù)。
C:Controller(控制器) - 控制器作用于模型和視圖上。它控制數(shù)據(jù)流向模型對象,并在數(shù)據(jù)變化時更新視圖。它使視圖與模型分離開。通俗來說就是獲取用戶的輸入,調(diào)用模型,將數(shù)據(jù)交給視圖進行展示。

實現(xiàn)

優(yōu)點:
耦合性低,方便維護,可以利用于工協(xié)作、重用性高、生命周期成本低、部署快、可維護性高
缺點:
使得項目架構變得復雜,對開發(fā)人員要求高
EL表達式
前面的 JSP 頁面中,我們經(jīng)常使用 JSP 表達式來輸出變量或者頁面之間傳遞的參數(shù),大大降低了頁面的可讀性。
為了簡化 JSP 頁面,JSP 2.0 新增了 EL(Expression Language)表達式語言。EL 提供了更為簡潔、方便的形式來訪問變量和參數(shù),不僅可以簡化 JSP 頁面代碼,還會使開發(fā)者的邏輯變得更加清晰 。
EL 表達式語法如下:
{EL表達式} EL 表達式語法以{開頭,以}結束,中間為合法的表達式。
示例
${param.name} 表示獲取參數(shù) name 的值,它等同于

<%=request.getParameter(‘name’) %>

EL算術表達式
算術運算符用來進行加、減、乘、除和求余,EL 表達式算術運算符如下:

EL算術運算符 說明 范例 結果

  • 加 ${5+2} 7
  • 減 ${5-2} 3
  • {5*2} 10 / 或 div 除{5/2} 2
    % 或 mod 求余 ${5%2} 1
    注意:EL 的+運算符與 Java 的+運算符不一樣,它無法實現(xiàn)兩個字符串的連接運算。如果該運算符連接的兩個值不能轉換為數(shù)值型的字符串,則會拋出異常;反之,EL 會自動將這兩個字符轉換為數(shù)值型數(shù)據(jù),再進行運算。

EL比較運算符
比較運算符用來實現(xiàn)兩個表達式的比較,進行比較的表達式可以是數(shù)值型或字符串。EL 表達式比較運算符如下:

EL比較運算符 說明 范例 結果
== 或 eq 等于 {6==6} 或{6 eq 6} {“A”=“a”} 或{“A” eq “a”} true false
!= 或 ne 不等于 {6!=6} 或{6 ne 6} {“A"!=“a”} 或{“A” ne “a”} false true
< 或 lt 小于 {3<8} 或{3 lt 8} {“A”<“a”} 或{“A” lt “a”} true true

或 gt 大于 {3>8} 或{3 gt 8} {“A”>“a”} 或{“A” gt “a”} false false
<= 或 le 小于等于 {3<=8} 或{3 le 8} {“A”<=“a”} 或{“A” le “a”} true true
= 或 ge 大于等于 {3>=8} 或{3 ge 8} {“A”>=“a”} 或{“A” ge “a”} false false
EL邏輯運算符
邏輯運算符兩邊的表達式必須是布爾型(Boolean)變量,其返回結果也是布爾型(Boolean)。EL 表達式邏輯運算符如下:

EL邏輯運算符 說明 范例 結果
&& 或 and 與 {2>1&&3<4 } 或{2>1and3<4 } true
|| 或 or 或 {2<1||3>4} 或{2<1or3>4} false
! 或 not 非 {!(2>4)} 或{not (2>4)} true
EL其它運算符
. 和 [ ]
.和[ ]是 EL 中最常用的運算符,用來訪問 JavaBean 中的屬性和隱式對象的數(shù)據(jù)。一般情況下,.用來訪問 JavaBean 屬性或 Map 類型的值,[ ]用來訪問數(shù)組或者列表的元素。
empty
empty 用來判斷 EL 表達式中的對象或者變量是否為空。若為空或者 null,返回 true,否則返回 false。
條件運算符
EL 表達式中,條件運算符的語法和 Java 的完全一致,如下:

${條件表達式?表達式1:表達式2}

其中,條件表達式用于指定一個判定條件,該表達式的結果為 boolean 類型。如果該表達式的運算結果為 true,則返回表達式 1 的值;反之,返回表達式 2 的值。

注意:
jsp默認支持EL表達式,如果要忽略EL表達式則:

設置jsp中page指令中的:isELIgnored="true"忽略當前jsp頁面中所有的EL表達式
${表達式}:忽略當前這個EL表達式
EL表達式獲取值
EL表達式只能從域對象中獲取值
語法:

${域名稱.鍵名}:從指定域中獲取指定鍵的值
pageScope ? pageContext
request ? request
sessionScope ? session
applicationScope ? application(ServletContext)
舉例:
在request域中存儲name=張三,在session域中存儲age=23
獲取語法:

{requestScope.name}{sessionScope.age}
${sessionScope.haha}//沒有的值在頁面中只會顯示空字符串。

還有一種${鍵名}:表示依次從最小的域中查找是否有該鍵對應的值,直到找到為止。

獲取對象、List集合、Map集合的值
對象:
創(chuàng)建一個user,里面有name,age,birthday
獲取對象:
${requestScope.user}

通過對象的屬性獲取值

{requestScope.user.name}{user.age}
${user.birthday}

List集合:
${域名稱.鍵名[索引]}
如果角標越界了,頁面只會顯示空字符
Map集合:

{域名稱.鍵名.Key名稱}{域名稱.鍵名[“Key名稱”]}

JSTL
JSP標準標簽庫(JSTL)是一個JSP標簽集合,它封裝了JSP應用的通用核心功能。
JSTL支持通用的、結構化的任務,比如迭代,條件判斷,XML文檔操作,國際化標簽,SQL標簽。 除了這些,它還提供了一個框架來使用集成JSTL的自定義標簽。
使用任何庫,你必須在每個 JSP 文件中的頭部包含 <taglib>標簽。
JSTL作用
用于簡化和替換JSP頁面上的java代碼
1.導入jstl相關的jar包點我去下載??
2.引入標簽庫:taglib指令:

<%@ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core” %>

3.使用標簽
常見的JSTL標簽

標簽 描述
c:out 用于在JSP中顯示數(shù)據(jù),就像<%= … >
c:set 用于保存數(shù)據(jù)
c:remove 用于刪除數(shù)據(jù)
c:catch 用來處理產(chǎn)生錯誤的異常狀況,并且將錯誤信息儲存起來
c:if 與我們在一般程序中用的if一樣
c:choose 本身只當做<c:when>和<c:otherwise>的父標簽
c:when <c:choose>的子標簽,用來判斷條件是否成立
c:otherwise <c:choose>的子標簽,接在<c:when>標簽后,當<c:when>標簽判斷為false時被執(zhí)行
c:import 檢索一個絕對或相對 URL,然后將其內(nèi)容暴露給頁面
c:forEach 基礎迭代標簽,接受多種集合類型
c:forTokens 根據(jù)指定的分隔符來分隔內(nèi)容并迭代輸出
c:param 用來給包含或重定向的頁面?zhèn)鬟f參數(shù)
c:redirect 重定向至一個新的URL.
c:url 使用可選的查詢參數(shù)來創(chuàng)造一個URL
三層架構
是一種軟件設計架構:
Web(表現(xiàn)層): 主要是指與用戶交互的界面。用于接收用戶輸入的數(shù)據(jù)和顯示處理后用戶需要的數(shù)據(jù)。
Service:(業(yè)務邏輯層) : Web層和Dao層之間的橋梁。實現(xiàn)業(yè)務邏輯。業(yè)務邏輯具體包含:驗證、計算、業(yè)務規(guī)則等等。
Dao:(數(shù)據(jù)訪問層): 與數(shù)據(jù)庫打交道。主要實現(xiàn)對數(shù)據(jù)的增、刪、改、查。將存儲在數(shù)據(jù)庫中的數(shù)據(jù)提交給業(yè)務層,同時將業(yè)務層處理的數(shù)據(jù)保存到數(shù)據(jù)庫。(當然這些操作都是基于Web層的。用戶的需求反映給界面(Web),Web反映給Service,Service反映給Dao,Dao進行數(shù)據(jù)的操作,操作后再一一返回,直到將用戶所需數(shù)據(jù)反饋給用戶)

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容