1.JSP:動態網頁(就是在html中嵌套java代碼)
動態網頁:隨着 時間、地點、用戶操作的改變而改變,使用到服務端腳本語言(JSP)
2.JSP頁面元素:HTML、java代碼(腳本Scriptlet)、指令、註釋
頁面腳本
1.
<%
局部變量、java語句(編譯後:service方法中)
%>
2.
<%!
全局變量、定義方法(編譯後:Servlet成員變量位置)
%>
3.
<%= 輸出表達式 %>
指令
1.page指令
<%@ page contentType="text/html;charset=UTF-8" language="JSP頁面使用的腳本語言" import="導入類" %>
2、taglib指令
作用:導入標籤庫
語法:<%@taglib uri="文件的uri名稱" prefix="前綴(簡寫)"%>
3、include指令
作用:在當前頁面用於包含其他頁面
語法: <%@include file="common/header.jsp%>
註釋
html註釋<!-- -->
java註釋// /**/
jsp註釋<%-- --%>
3.jsp執行流程:
jsp ->java(Servlet文件) ->class
4.JSP九大內置對象:
內置對象:在jsp中,不需要創建,可以直接使用的對象
5.JavaBean(Java類)
定義:(滿足以下兩點)
1.public修飾的類,含有public無參構造函數
2.所有屬性都是private,並提供set/get。
作用:
1.減輕jsp的複雜度
2.提高代碼的複用度
使用層面分爲兩大類:
1.封裝業務邏輯的JavaBean(登錄邏輯 LoginDao.java 等) 可以將jsp中的JDBC代碼,封裝起來。
2.封裝數據的JavaBean(實體類,Student.java Person.java) 對應於數據庫中的一張表。
6.通過MVC設計模式瞭解JavaBean
M: Model 模型 (負責各個功能) javaBean
V: View 視圖 (負責頁面的顯示,以及與用戶的交互) html/css/js/jsp
C: Controller 控制器 (接受請求,將請求跳轉到模型進行處理,模型處理完畢後,再將處理的結果返回給請求處) Servlet/jsp
7.三層架構
與MVC設計模式的目標一致:都是爲了解耦合、提高代碼複用;
區別,二者對項目的理解的角度不同。
1.三層組成:
表示層(USL):視圖層
- 前臺:對應於MVC中的View,用於和用戶交互、界面的顯示(html/css/js/jsp)
- 後臺:對應於MVC中的Controller,用於控制跳轉、調用業務邏輯層(Servlet/SpringMVC/Struts2 位於servlet包)
業務邏輯層(BLL):service層
- 組裝數據訪問層,邏輯性的操作(增刪改查 位於service包) eg:刪:查+刪
數據訪問層(DAL):dao層
- 直接訪問數據庫的操作,原子性的操作(增刪改查 位於dao包)
2.三層間的關係:
上層將請求傳遞給下層,下層處理後返回給上層。
上層依賴於下層(上層持有下層成員變量,有上層的前提必須有下層)
3.三層優化
- 加入接口
建議面向接口開發:先接口-再實現類
- service、dao加入接口
- 接口與實現類的 命名規範
接口:interface IXxxService、IXxxDao
實現類:implements XxxServiceImpl、 XxxDaoImpl
使用接口/實現類時。推薦寫法
接口 x=new 實現類();
- DBUtil 通用的數據庫幫助類,可以簡化Dao層的代碼量
8.EL: 表達式語言,可以替代JSP頁面中的java代碼
傳統的 在JSP中用java顯示數據的弊端:類型轉換、需要處理null、代碼參雜-->EL
- EL示例:
${requestScope.student.address.schoolAddress}<br>
${域對象.域對象中的屬性.屬性.級聯屬性}<br>
- EL操作符
點操作符 . -- 使用方便
中括號操作符 [""] -- 功能強大:可以包含特殊字符(. 、 -),獲取變量值
獲取map屬性
Map<String,Object> map=new HashMap<>();
map.put("cn","中國");
map.put("us","美國");
request.setAttribute("map",map);
${requestScope.map.cn}
isEmpty運算符:判斷一個值存在不存在。
- EL表達式的隱式對象(內置對象)
- 作用域訪問對象
pageScope requestScope sessionScope sessionScope applicationScope
如果不指定域對象,則默認會根據從小到大的順序,依次取值
- 參數訪問對象:獲取表單數據。
${param.xxx}
${paranValues.xxx[]}
- JSP隱式對象 : pageContext
${pageContext.xxx} 通過pageContext間接獲取jsp的隱式對象。
9.JSTL:比EL更強大
1.引入兩個jar包:jstl.jar standard.jar
2.引入taglib <%@ taglib uri="...core"> prefix="c" %>
。。。。。。。。。