1.JSPhtml
(1)JSP概念:Java Server Pages 即java服務器端頁面
能夠理解爲:一個特殊的頁面,其中既能夠指定定義html標籤,又能夠定義java代碼
用於簡化書寫!!!java
(2)原理
JSP本質上就是一個Servletweb
(3)JSP的腳本:JSP定義Java代碼的方式
1. <% 代碼 %>:定義的java代碼,在service方法中。service方法中能夠定義什麼,該腳本中就能夠定義什麼。
2. <%! 代碼 %>:定義的java代碼,在jsp轉換後的java類的成員位置,能夠定義成員變量或成員方法。注意:用的較少
3. <%= 代碼 %>:定義的java代碼,會輸出到頁面上。輸出語句中能夠定義什麼,該腳本中就能夠定義什麼。數據庫
(4)JSP指令數組
做用:用於配置JSP頁面,導入資源文件
格式:
<%@ 指令名稱 屬性名1=屬性值1 屬性名2=屬性值2 ... %>tomcat
例如:服務器
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
分類:
1. page指令 : 配置JSP頁面的
contentType:等同於response.setContentType()
1. 設置響應體的mime類型以及字符集
2. 設置當前jsp頁面的編碼(只能是高級的IDE才能生效,若是使用低級工具,則須要設置pageEncoding屬性設置當前頁面的字符集)
import:導包
errorPage:當前頁面發生異常後,會自動跳轉到指定的錯誤頁面
isErrorPage:標識當前也是是不是錯誤頁面。
true:是,能夠使用內置對象exception
false:否。默認值。不能夠使用內置對象exceptionsession
2. include指令 : 頁面包含的。導入頁面的資源文件
* <%@include file="top.jsp"%>
3. taglib指令: 導入資源
* <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
* prefix:前綴,自定義的架構
(5)註釋:
1. html註釋:
<!-- -->:只能註釋html代碼片斷
2. jsp註釋:推薦使用
<%-- --%>:能夠註釋全部mvc
(6) JSP的內置對象:
在jsp頁面中不須要獲取和建立,能夠直接使用的對象
jsp一共有9個內置對象。
* request
* response
* out:字符輸出流對象。能夠將數據輸出到頁面上。和response.getWriter()相似
* response.getWriter()和out.write()的區別:
* 在tomcat服務器真正給客戶端作出響應以前,會先找response緩衝區數據,再找out緩衝區數據。
* response.getWriter()數據輸出永遠在out.write()以前
變量名 真實類型 做用
* pageContext PageContext 當前頁面共享數據,還能夠獲取其餘八個內置對象
* request HttpServletRequest 一次請求訪問的多個資源(轉發)
* session HttpSession 一次會話的多個請求間,共享數據
* application ServletContext 全部用戶間共享數據
* response HttpServletResponse 響應對象
* page Object 當前頁面(Servlet)的對象 this
* out JspWriter 輸出對象,數據輸出到頁面上
* config ServletConfig Servlet的配置對象
* exception Throwable 異常對象
(7)jsp動做元素
動做元素基本上都是預約義的函數,JSP規範定義了一系列的標準動做,它用JSP做爲前綴,可用的標準動做元素以下:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <html> <body> <%--將頁面從index.jsp轉到main.jsp中--%> <jsp:forward page="/pages/main.jsp"/> </body> </html>
2.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. 優勢:
1. 耦合性低,方便維護,能夠利於分工協做
2. 重用性高
2. 缺點:
1. 使得項目架構變得複雜,對開發人員要求高
3.EL表達式
(1) 概念:Expression Language 表達式語言
(2)做用:替換和簡化jsp頁面中java代碼的編寫
(3)語法:${表達式}
(4)注意:
jsp默認支持el表達式的。若是要忽略el表達式
方法1. 設置jsp中page指令中:isELIgnored="true" 忽略當前jsp頁面中全部的el表達式
方法2. \${表達式} :忽略當前這個el表達式
(5) 使用:
1. 運算:
* 運算符:
1. 算數運算符: + - * /(div) %(mod)
2. 比較運算符: > < >= <= == !=
3. 邏輯運算符: &&(and) ||(or) !(not)
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>el_test01</title> </head> <body> ${3>4}<br> <hr> <h3>算數運算符</h3> ${3+4}<br> ${3/4}<br> ${3 div 4}<br> ${3%4}<br> ${3 mod 4}<br> <hr> <h3>比較運算符</h3> ${3 == 4}<br> <hr> <h3>邏輯運算符</h3> ${3>4 && 3<4}<br> </body> </html>
4. 空運算符: empty
* 功能:用於判斷字符串、集合、數組對象是否爲null或者長度是否爲0
* ${empty list}:判斷字符串、集合、數組對象是否爲null或者長度爲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=張三
* 獲取:${requestScope.name}
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <% request.setAttribute("name","lucky"); session.setAttribute("age","25"); %> <h1>el獲取值</h1> ${requestScope.name} ${sessionScope.age} </body> </html>
2. ${鍵名}:表示依次從最小的域中查找是否有該鍵對應的值,直到找到爲止。
3. 獲取對象、List集合、Map集合的值
1. 對象:${域名稱.鍵名.屬性名}
* 本質上會去調用對象的getter方法
案例:
User.java
package el; import java.text.SimpleDateFormat; import java.util.Date; public class User { private String name; private int age; private Date birthday; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public String getBirthdayStr(){ if(birthday!=null){ //1.格式化日期對象 SimpleDateFormat sdf=new SimpleDateFormat("yy-MM-dd HH:mm:ss"); String birthday_format = sdf.format(birthday); return birthday_format; }else { return ""; } } }
el_test03.jsp
<%@ page import="el.User" %> <%@ page import="java.util.Date" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>獲取數據</title> </head> <body> <% User user=new User(); user.setName("lucky"); user.setAge(25); user.setBirthday(new Date()); request.setAttribute("user",user); %> <h3>獲取對象中的值</h3> ${user.name} ${user.age} ${user.birthday} ${user.birthdayStr} </body> </html>
2. List集合:${域名稱.鍵名[索引]}
3. Map集合:
* ${域名稱.鍵名.key名稱}
* ${域名稱.鍵名["key名稱"]}
<%@ page import="java.util.List" %> <%@ page import="java.util.ArrayList" %> <%@ page import="java.util.Map" %> <%@ page import="java.util.HashMap" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>獲取list集合中的值</title> </head> <body> <% List list=new ArrayList(); list.add("aaa"); list.add("bbb"); request.setAttribute("list",list); Map map=new HashMap(); map.put("name","linda"); map.put("age","28"); request.setAttribute("map",map); %> <h3>獲取list集合</h3> ${list[0]} <h3>獲取map集合</h3> ${requestScope.map.name} </body> </html>
3. 隱式對象:
* el表達式中有11個隱式對象
* pageContext:
* 獲取jsp其餘八個內置對象
* ${pageContext.request.contextPath}:動態獲取虛擬目錄
4.JSTL標籤
(1)JSTL概念:JavaServer Pages Tag Library JSP標準標籤庫
是由Apache組織提供的開源的免費的jsp標籤 <標籤>
(2)JSTL做用:用於簡化和替換jsp頁面上的java代碼
(3) 使用步驟:
1. 導入jstl相關jar包(javax.servlet.jsp.jstl.jar和jstl-impl.jar這兩個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表達式一塊兒使用
2. 注意:
c:if標籤沒有else狀況,想要else狀況,則能夠在定義一個c:if標籤
小案例:判斷數字是奇數仍是偶數
<%@ page import="java.util.List" %> <%@ page import="java.util.ArrayList" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <%--引入標籤庫--%> <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <html> <head> <title>jstl標籤</title> </head> <body> <c:if test="true"> <h3>我是真</h3> </c:if> <% List list=new ArrayList(); list.add("aaaa"); list.add("bbbb"); request.setAttribute("list",list); request.setAttribute("number",3); %> <%--${not empty list} 判斷集合是否爲空--%> <c:if test="${not empty list}"> 遍歷集合 </c:if> <hr> <c:if test="${number%2!=0}"> ${number}是奇數 </c:if> </body> </html>
頁面顯示:
2. choose標籤:至關於java代碼的switch語句
1. 使用choose標籤聲明 至關於switch聲明
2. 使用when標籤作判斷 至關於case
3. 使用otherwise標籤作其餘狀況的聲明 至關於default
小案例:星期幾選擇
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <html> <head> <title>choose標籤使用</title> </head> <body> <% request.setAttribute("number",4); %> <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> </body> </html>
頁面顯示:
3. foreach標籤:至關於java代碼的for語句
1. 完成重複的操做
for(int i = 0; i < 10; i ++){
}
* 屬性:
begin:開始值
end:結束值
var:臨時變量
step:步長
varStatus:循環狀態對象
index:容器中元素的索引,從0開始
count:循環次數,從1開始
2. 遍歷容器
List<User> list;
for(User user : list){
}
* 屬性:
items:容器對象
var:容器中元素的臨時變量
varStatus:循環狀態對象
index:容器中元素的索引,從0開始
count:循環次數,從1開始
小案例:
<%@ page import="java.util.List" %> <%@ page import="java.util.ArrayList" %> <%@ 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> <c:forEach begin="1" end="10" var="i" step="2"> ${i}<br> </c:forEach> <% List list=new ArrayList(); list.add("111"); list.add("222"); list.add("333"); request.setAttribute("list",list); %> <c:forEach items="${list}" var="str" varStatus="s"> <%--索引--循環次數--值--%> ${s.index} ${s.count} ${str}<br> </c:forEach> </body> </html>
頁面顯示:
5. 練習:
* 需求:在request域中有一個存有User對象的List集合。須要使用jstl+el將list集合數據展現到jsp頁面的表格table中
5.三層架構:軟件設計架構
(1)界面層(表示層):用戶看的得界面。用戶能夠經過界面上的組件和服務器進行交互
(2)業務邏輯層:處理業務邏輯的。
(3)數據訪問層:操做數據存儲文件。