JavaWeb - JSP核心、MVC開發模式、EL表示式、JSTL標籤、三層架構
阿新 • • 發佈:2020-08-05
1. JSP核心
1. 指令
* 作用:用於配置JSP頁面,匯入資原始檔
* 格式:
<%@ 指令名稱 屬性名1=屬性值1 屬性名2=屬性值2 ... %>
* 分類:
1. page : 配置JSP頁面的
* contentType:等同於response.setContentType()
1. 設定響應體的MIME型別以及字符集
2. 設定當前JSP頁面的編碼(只能是高階的IDE才能生效,如果使用低階工具,則需要設定pageEncoding屬性設定當前頁面的字符集)
* import:導包
* errorpage:當前頁面發生異常後,會自動跳轉到指定的錯誤頁面
* iserrorpage:標識當前頁面是否是錯誤頁面
* true:是,可以使用內建物件exception
* false:否,預設值。不可以使用內建物件exception
2. include :頁面包含的。匯入頁面的資原始檔,比如大家都需要同樣的一個頭資訊,就不用重複寫,直接包含進來即可
3. taglib :匯入資源
*<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
* prefix為自定義字首 JSTL一般用c
2. 註釋
1. html註釋:<!- - - - >:只能註釋html程式碼片段
2. jsp註釋:<%- - - -%>:可以註釋所有
3. 內建物件
* 在jsp頁面中不需要建立,直接使用的物件
* 一共有9個:
* pageContext: 真實型別:pageContext 作用:當前頁面共享資料,還可以獲取其他八個內建物件
* request: 真實型別:HttpServletRequest 作用:一次請求訪問的多個資源(轉發)間共享資料
* session 真實型別:HttpSession 作用:一次會話的多個請求間共享資料
* application 真實型別:ServletContext 作用:所有使用者間共享資料
* response 真實型別:HttpServletResponse 作用:響應物件
* page 真實型別:Object 作用:當前頁面(Servlet)物件 this
* out 真實型別:JspWriter 作用: 輸出物件,資料輸出到頁面上
* config 真實型別:ServletConfig 作用:Servlet的配置物件
* exception 真實型別:Throwable 作用:異常物件
2. MVC開發模式
1. jsp演變歷史
1. 早期只有servlet,只能使用response輸出標籤資料,非常的麻煩
2. 後來有了jsp,簡化了Servlet的開發,如果過度使用sp,在jsp中既寫大量的java程式碼,又寫html標籤,造成難以維護,難於分工協作
3. 再後來,java的web開發,借鑑mvc開發模式,使得程式的設計更加合理
2. MVC
1. M:Model,模型。JavaBean
* 完成具體的業務操作,如:查詢資料庫、封裝物件
2. V:View,檢視。JSP
* 展示資料
3. C:Controller,控制器。Servlet
* 獲取使用者的輸入
* 呼叫模型
* 將資料交給檢視進行展示
* 優缺點:
1. 優點:
1. 耦合性低,方便維護,可以利於分工協作
2. 重用性高
2. 缺點:
1. 使得專案的架構變得複雜,對開發人員要求高
3. EL表示式
1. 概念:Expression Language 表示式語言
2. 作用:替換和簡化jsp頁面中java程式碼的編寫
3. 語法:${ 表示式 }
4. 注意:
* jsp預設支援EL表示式。 如果要忽略el表示式
1. 設定jsp中page指令中:isELIgnore="true" 忽略當前jsp頁面中所有的EL表示式
2.\${ } : 忽略當前這個EL表示式
5. 作用
1. 運算
* 運算子:
1. 算數運算子: + - * /(div) %(mod)
2. 比較運算子: > < = >= <= == !=
3. 邏輯運算子:&&(and) ||(or) !(not)
4. 空運算子:empty
* 功能:用於判斷字串、集合、陣列物件是否為null或者長度是否為0
* ${ not empty list }:表示判斷字串、集合、陣列物件是否不為null 並且長度大於0
2. 獲取值
1. 注意事項:el表示式只能從域物件中獲取值
2. 語法:
1. ${ 域名稱 . 鍵名稱 }:從指定域中獲取指定鍵的值
* 域名稱:
1. pageScope - - > pageContext
2. requestScope - - > request
3. sessionScope - - > session
4. application - - > application(ServletContext)
* 舉例:如在request域中儲存了name=張三
獲取:${ requestScope.name }
2. ${ 鍵名 }:表示依次從最小的域中去查詢是否有該鍵對應的值,直到找到為止
3. 獲取物件、List集合、Map集合
1. 物件的值:通過的是物件的屬性來獲取 ${ 域名稱.鍵名.屬性名} 本質上會去呼叫物件的getter方法
# 屬性:指的是setter或getter方法,去掉set或get,再將剩餘部分變為小寫。 如setName - - > name
2. List集合:${ 域名稱.鍵名[索引]}
3. Map集合:${ 域名稱.鍵名.key名稱} 或 ${ 域名稱.鍵名['key名稱']}
3. 隱式物件:
* el表示式中有11個隱式物件
* pageContext:
* 獲取jsp其他八個內建物件
在jsp頁面中動態獲取虛擬目錄: ${ pageContext.request.contextPath }
4. JSTL
1. 概念:JavaServer Pages Tag Library : JSP標準標籤庫
* 是由Apache組織提供的開源的免費的jsp標籤
2. 作用:用於簡化和替換jsp頁面上的java程式碼
3. 使用步驟:
1. 匯入JSTL相關jar包
2. 引入標籤庫:taglib指令 :<%@ taglib %> 如:<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
3. 使用標籤
4. 常用的JSTL標籤
1. if :相當於java程式碼的if語句
1. 屬性:
* test 必須屬性,接收boolean表示式
* 如果表示式為true,則顯示if標籤體內容,如果為false,則不顯示標籤體內容
* 一般情況下,test屬性值會結合el表示式一起使用
如:判斷request域中的一個list集合是否為空,如果不為null則顯示遍歷集合 : <c:if test="${ not empty requestScope.list}"> 遍歷集合 </c:if>
2. choose:相當於java程式碼的switch when標籤做數字判斷 otherwise做其他情況的宣告
* 案例:完成數字編號對應星期幾的案例
<% request.setAttribute("number",3); %> <c:choose> <c:when test="${number==1}">星期一</c:when> <c:when test="${number==2}">星期二</c:when> <c:when test="${number==3}">星期三</c:when> <c:when test="${number==4}">星期四</c:when> <c:when test="${number==5}">星期五</c:when> <c:when test="${number==6}">星期六</c:when> <c:when test="${number==7}">星期天</c:when> <c:otherwise>數字輸入有誤</c:otherwise> </c:choose>
3. foreach:相當於java程式碼的for迴圈
* 屬性:
(普通for迴圈時)
begin:開始值
end:結束值
var:臨時變數
step:步長
varStatus:迴圈狀態物件
index:容器中元素的索引,從0開始
count:迴圈次數,從1開始
<c:forEach begin="1" end="10" var="i" step="1" varStatus="s">
${s.index} ${s.count}
</c:forEach>
(遍歷容器時)
items:容器物件
var:容器中元素的臨時變數
<% List list = new ArrayList<>(); list.add("aaa"); list.add("ccc"); request.setAttribute("list",list); %> <c:forEach items="${list}" var="str" varStatus="s"> ${s.index} ${s.count} ${str}<br> </c:forEach>
5. 練習
* 需求:在request域中有一個存有User物件的List集合。需要使用JSTL+EL將list集合資料展示到jsp頁面的表格table中
<%@ page import="java.util.List" %> <%@ page import="java.util.ArrayList" %> <%@ page import="domain.User" %> <%@ page import="java.util.Date" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <html> <head> <title>Title</title> </head> <body> <% List list = new ArrayList(); list.add(new User("張三",23,new Date())); list.add(new User("李四",24,new Date())); list.add(new User("王五",25,new Date())); request.setAttribute("list",list); %> <table border="1" width="500" align="center"> <tr> <th>編號</th> <th>姓名</th> <th>年齡</th> <th>生日</th> </tr> <%--資料化--%> <c:forEach items="${list}" var="user" varStatus="s"> <c:if test="${s.count % 2== 0}"> <tr bgcolor="#ffd700"> <td>${s.count}</td> <td>${user.name}</td> <td>${user.age}</td> <td>${user.birthday}</td> </tr> </c:if> <c:if test="${s.count % 2== 1}"> <tr bgcolor="aqua"> <td>${s.count}</td> <td>${user.name}</td> <td>${user.age}</td> <td>${user.birthday}</td> </tr> </c:if> </c:forEach> </table> </body> </html>案例實現