**表示式_EL表示式與JSTL表示式 [web基礎day17] *
阿新 • • 發佈:2019-01-02
今日內容:
1.JSP:
* 指令
* 註釋
* 內建物件
2.MVC開發模式
3.EL表示式
4.JSTL標籤
5.三層架構
JSP:
1.指令 * 作用:用於配置JSP頁面,匯入資原始檔 * 格式: <% 指令名稱 屬性名1=屬性值1 屬性名2=屬性值2... %> * 分類: 1.page:用於配置JSP頁面 * contentType:等同於response.setContentType() 如:contentType="text/html;charset=UTF-8" 1.設定響應體的檔案編碼,字符集 2.設定當前JSP頁面編碼(這是高階的ide工具讀取了該程式碼然後自動編寫的) 3.如果使用低階工具(如記事本),則需要設定pageEncoding="GBK"來進行編碼。 * pageEncoding="GBK":設定當前頁面編碼 * import:導包 如:import java.util.lang.String * errorPage:當前頁面發生異常後9,會自動跳轉到指定的錯誤頁面 如:errorpage="500.jsp" * isErrorPage:標識當前頁面是否是錯誤頁面 isErrorPage="false" * true:是,可以使用內建物件exception 可以列印錯誤資訊,返回錯誤原因,以後可以列印在日誌上。 * false:否。預設值。不可以使用內建物件exception * language:當前頁面的型別:只有一個值,language="java":就是說jsp頁面用的是java語言。 * buffer:緩衝區,可以寫資料到瀏覽器上去。 2.include:頁面包含的。匯入頁面的資原始檔 <%@include file="top.jsp"%> 3.taglib:匯入資源:用JSTL就用c:字首 * <%@taglib prefix="c" uri="http://java.sun.com/jap/jstl/core"%> * prefix:字首,自定義的,呼叫標籤的時候需要加字首 2.註釋: 1.html註釋: * <!-- -->:只能註釋html片段 2.jsp註釋: * <%-- --%>:可以註釋所有,既可以註釋html內容也可以註釋jsp內容 * 推薦使用jsp註釋; 3.內建物件(九個): -- 在jsp頁面中不需要建立,直接使用的物件。它們是在jsp建立過程中已經宣告好了的內建物件那個。 注意:isErrorPage如果為flase時,則不建立exception物件,就只有八個了。 * 域物件: (面試的時候可能考:請寫出內建的九個物件。) -- 使用物件的時候是java程式碼,所以需要用<% %>進行。 變數名 真實型別 作用: * pageContext: PageContext 當前頁面共享資料 可以獲取其他八個物件,使用方法:pageContext.getxxx * request: HttpServletRequest 一次請求訪問的多個資源()轉發 * session HttpSession 一次會話的多個請求間 * application ServletContext 所有使用者間共享資料 (慎用,空間大) * 響應物件: * response: HttpServletResponse 響應物件 * page Object 當前頁面(Servlet)的物件 this * out: ServletConfig 輸出物件,資料輸出到頁面上,基本都用它 * config ServletConfig Servlet的配置物件 * exception: Throwable 異常物件 * request存資料,轉發-->request 取資料 * pageContext一般不用於共享,但是它可以呼叫其他八個物件。 * request和session常用,一個用於一次請求的轉發,一個用於一次會話的多個請求 * out使用較多,輸出方法中建議用它。
MVC:開發模式
1.jsp演變 1.早期只有servlet,只能使用response輸出標籤資料,非常麻煩。 2.後來有了jsp,簡化了servlet的開發,如果過度使用jsp,在jsp中寫java程式碼和html標籤語句,全部冗雜在一起,造成了維護困難,難以分工協作。 3.再後來,java的web開發,借鑑mvc開發模式,使得程式的設計更加合理性 2.MVC: 1. M : Model,模型 -- JAVABean模型 * 業務邏輯操作,如查詢資料庫,封裝物件 2. V : view,檢視 -- jsp * 展示資料 3. C : Controller,控制器 -- Servlet 1. 獲取客戶端的輸入 2. 呼叫模型 3. 將資料交給檢視展示 * 優點: * 耦合性低,方便維護,可以利於分工協作(jsp,模型,servlet都可以分工找人寫) * 重用性高。(將model模型的資料封裝成方法,可以重用) * 部署快,有利於工程管理 * 缺點: * 使得專案架構變得複雜,對開發人員要求高。 -- jsp介面只做展示資料的工作。 -- servlet獲取使用者輸入與資料庫返回的結果進行比較再交給jsp -- model獲取資料庫內的內容,返回給servlet
EL表示式: 最重要的作用就是:將在域物件中的資料取出來
1.概念:Expression Language 表示式語言 2.作用:替換和簡化jsp頁面中java程式碼的編寫 3.語法:${表示式} 4.注意: * jsp預設支援el表示式 * isElignored="true" -- <%@ page 中寫這個的時候,el表示式將被忽略,不被瀏覽器解析isElignored="true" %> * \${表示式}:忽略當前這個el表示式 5.使用: 1.運算: 1.算數運算子:+-* /(div) %(mod) 2.比較運算子:><= <= == != 3.邏輯運算子:&&(and) ||(or) !(not) 4.空運算子:empty * 功能:用於判斷字串、集合、陣列物件是否為null或者長度是否為0; * ${empty list}:判斷該集合為null並且長度為0或者長度為0; * ${not empty str}:表示判斷字串、集合、陣列物件是否不為null並且長度大於0; 2.獲取值 1.el表示式只能從域物件中獲取值 2.語法: 1.${域名稱.鍵名}:從指定域中獲取指定鍵的值 * 域名稱: 1.pageScope -->pageContext 2.requestScope -->request 3.sessionScope -->session 4.applicationScope -->application(ServletContext) * 舉例:在request域中儲存了name=張三 * request.setAttribute("name","張三") * session.setAttribute("age","23") * 獲取:${requestScope.name} * ${sessionScope.age} * 注意:如果沒有該值,不會報錯,只是不會顯示該頁面。 2.${鍵名}:表示依次從最小的域中查詢是否有該鍵對應的值,直到找到位置。 ${name}:首先從pageScope,再從requestScope->sessionScope->applicationScope依次查詢。 3.獲取物件、List集合、Map集合的值 1.物件:${域名稱.鍵名.屬性名} * 本質上會去呼叫物件的getter方法。 2.List集合:${域名城.鍵名.key名稱} 3.Map集合: * ${域名城.鍵名.屬性值} * ${域名城.鍵名稱.[屬性值]} 3.隱式物件 * el表示式中有11個隱式物件 * pageContext: * 獲取jsp其他八個物件 * 動態獲取虛擬目錄: ${pageContext.request.contextPath} 在需要寫虛擬目錄的地方就寫這個。
JSTL
1.概念:JavaServer Pages Tag Library JSP標準標籤庫
* 是由Apache組織提供的開源的免費的jsp標籤
2.作用:用於簡化和替換jsp頁面上的java程式碼
3.使用步驟:
1.匯入jstl相關jar包 : --> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
2.引入標籤庫:taglib指令:<%@taglib %> 引入標籤庫的時候要加字首,參照上面。
3.使用標籤
4.常用標籤:
1.if:相當於java的if語句
* <c:if test=""></c:if>
* if標籤:
1.屬性:
* test屬性為必須屬性,接收boolean表示式
* 如果表示式為true,則顯示if標籤提內容,如果為false,則不顯示標籤體內容。
* 一般情況下,test屬性值會結合el表示式一起使用。
2.注意:
* c:if標籤沒有else情況,如果想要有個else,則可以再定義一個c:if標籤。
2.choose:相當於java程式碼的switch語句
1.使用choose標籤宣告 相當於switch宣告
2.使用when標籤做判斷 相當於case
3.使用otherwise標籤做其他情況的宣告 相當於default
* <%
* <c:choose>
* <c:when test="${number==1}">星期一</c:when>
* </c:choose>
* %>
3.foreach:相當於java程式碼的for語句
* 使用foreach語句能做什麼事情?
* 完成重複的操作
* 屬性:
-- begin: 開始值
-- end:結束值
-- var:臨時變數
-- step:步長
-- varStatus:迴圈的狀態
* index :容器中迴圈的索引,
* count :迴圈的次數
* 遍歷容器
* 屬性:
-- items:容器物件
-- var:容器中的臨時變數
5.練習:
* 需求: 在request域中有一個存有User物件的List集合。需要使用jstl將list集合資料展示到jsp頁面的表格table中
三層架構:
1.介面層(表示層):使用者看的介面。使用者可以通過介面上的元件和伺服器進行互動 表示層/web層
2.業務邏輯層:處理業務邏輯的 業務邏輯層/sercice層
3.資料訪問層:操作資料儲存檔案 資料訪問層(dao層)
* 在資料訪問層中,定義了對於資料庫最基本的CRUD操作 dao:Data Access Object Catalog Access Object cn.itcast.專案名.dao
* 業務邏輯層:組合DAO層中的簡單方法,形成複雜的功能(業務邏輯操作) cn.itcast.專案名.service
* 接收使用者引數,封裝資料,呼叫業務邏輯層完成處理,轉發jsp頁面完成顯示。 cn.itcast.專案名.web
* 三大框架:
* web層:SpringMVC框架
* dao層:MyBatis框架
* Service:Spring框架 -- web框架中的靈魂框架,它也可以呼叫其他框架。
案例:使用者資訊列表展示
1.需求:使用者資訊的增刪改查操作
2.設計:
1.技術選型:
Servlet+JSP+MYSQL+JDBCTempleat+Duird+BeanUtils+Tomcat
2.資料庫設計:
create datebase day17;
use day17;
create table user(
id int primary key auto_increment,
name varchar(20) not null,
gender varchar(5),
age int,
address varchar(32),
qq varchar(20),
email varchar(50)
);
3.開發:
1.環境搭建
1.建立資料庫環境
2.建立專案,匯入需要的jar包
2.編碼
4.測試
5.部署運維