JSP(JSTL EL表示式 三個指令 六個動作標籤 九個JSP內建物件)
概念
JSP: Java Server Page Java服務專案
是一種可以寫html css js 也可以寫Java程式碼的頁面
作用是簡化頁面的書寫
JSP本質上是個Servlet
* JSP:
* 註釋:
* 標記語言註釋: <!-- -->
* 缺點:
1.會傳送到客戶端
2.不能註釋Java程式碼
* jsp註釋: <%-- --%>
* 優點:
1.不會傳送到客戶端
2.能註釋Java程式碼
* 3大指令:
* 指令:配置JSP頁面的屬性或者匯入一些額外的內容
* 格式:<%@ 指令名稱 屬性名="屬性值" %>
* 分類:
page:配置JSP頁面的屬性
include:靜態包含
taglib:匯入額外的內容
* page指令:
language :指定jsp頁面使用的語言。只有一個值 java
*import :匯入軟體包
*pageEncoding :設定頁面編碼
1.指定jsp檔案的編碼
2.告訴瀏覽器頁面使用的編碼格式
autoFlush:自動重新整理
buffer:緩衝區大小
*errorPage:指定錯誤頁面,當頁面發生異常時,指定跳轉的頁面
* 一般在開發完成後,會在web.xml中通過<error-page>標籤來配置整個專案的錯誤頁面
<error-page>
<error-code>500</error-code>
<!-- <exception-type></exception-type> -->
<location>/500.jsp</location>
</error-page>
<!-- <error-page>
<error-code>404</error-code>
<location>/404.jsp</location>
</error-page>
-->
isErrorPage:是否是錯誤頁面
true:是錯誤頁面,可以使用內建物件exception
false:不是
* taglib:匯入額外的內容,如:匯入jstl標籤
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
* include:靜態包含
* 包含後,只會存在一個.class檔案。
* 6個動作標籤:
* 動作標籤:替換Java程式碼。簡化書寫,提高可讀性
<jsp:useBean> Person p = new Person()
使用一個ID和一個給定作用範圍和同一ID的JavaBean相關聯
<jsp:setProperty> p.setName("zhangsan")
設定JavaBean的屬性值
<jsp:getProperty> String name = p.getName()
取得JavaBean的屬性值
<jsp:include> 動態包含
請求時檔案包含
* 多個.class位元組碼檔案
<jsp:forward> 轉發
接受使用者輸入並將請求分派給另一頁面
<jsp:param> 傳遞請求引數
------------------------------------------------------------------------------------------------------
<%
Person p = new Person();
p.setName("張三");
String name = p.getName();
//request.getRequestDispatcher("").include(request, response);
//request.getRequestDispatcher("").forward(request, response);
%>
上面的標籤可以替換為下面的
<jsp:useBean id="p1" class="cn.itcast.domain.Person" /><!-- 反射 -->
<!--
name對應的是setName方法
name---Name--setName
內省:通過欄位名稱,找到對應的setter和getter方法。
-->
<jsp:setProperty name="p1" property="name" value="李四"/>
<jsp:getProperty name="p1" property="name"/>
---------------------------------------------------------------------------------------------
<!-- 動態包含 -->
<!--
<jsp:include page="/hello.jsp" /> -->
--------------------------------------------------------------------------------------------------
<!-- 請求轉發 -->
<jsp:forward page="/index.jsp">
<jsp:param name="msg" value="hehe"/>
</jsp:forward>
-------------------------------------------------------------------------------------------
* JavaBean:一種符合特定規範的Java類
1.私有所有成員變數
2.提供公共的訪問方式 setter 或 getter
3.提供空參構造
domain
pojo
entity
beans
* 9個內建物件:
* 內建物件:在jsp轉換後的.java檔案的service方法中 宣告好的 物件。在jsp中可以直接使用。
* 分類:
application:ServletContext
session:HttpSession
request:HttpServletRequest
pageCotext:PageCotext (頁面域)
out:JspWriter
response:HttpServletResponse
config:ServletConfig
page:this
exception: Throwable
* pageCotext:
1.域物件:頁面域
2.獲取其他八個內建物件:可以在非jsp環境使用其他的內建物件。
* out和response.getWriter():
* 在使用物件向頁面輸出資訊時,採用out
早期寫法
指令碼
<%
int num=100;
System.out.println(num);
out.print("abc");
String s="一樹梨花";
%>
三六九
三個指令
三個指令
page指令:定義JSP頁面的相關資訊
contentType="text/html;charset=UTF-8" 響應的型別是html 用的編碼方式為UTF-8
language="java" 支援語言
pageEncoding="UTF-8" 頁面編碼
import 匯入包
isELIgnored="false" 是否忽略el標籤
errorPage 設定錯誤頁面
六個動作標籤
JSP內建的 直接使用
<jsp:forward page="/san">
<jsp:param name="username" value="sanwa"/>
</jsp:forward>
九個JSP內建物件
JSP內建的 直接使用
1. request:HttpServletRequest
2. pageCotext:PageCotext(頁面域)
3. session:HttpSession
4. application:ServletContext
5. response
6. exception
7. config
8. page
9. out
el表示式
el:JSP內建的表示式 作用是來替代<%=%>
el:
jsp的內建表示式語言,從jsp2.0開始.
用來替代<%=..%>
作用:
1.獲取域中資料 ★
2.執行運算 ★
3.獲取常見的web物件
4.呼叫java的方法
格式:
${el表示式}
獲取域中資料:★
1.獲取簡單資料
${pageScope|requestScope|sessionScope|applicationScope.屬性名}
以後經常使用:
${屬性名}:依次從pageContext,request,session,application查詢指定屬性,若查詢到返回值,結束該次查詢
若查詢不到,返回""
------------------------------------------------------------------------------------
例子: <%
request.setAttribute("rkey", "rvalue");
session.setAttribute("skey", "svalue");
session.setAttribute("rkey", "svalue");
application.setAttribute("akey", "avalue");
%>
獲取request中的資料:<br>
老方式:<%=request.getAttribute("rkey") %><br/>
el方式:${requestScope.rkey }<br/>
<hr>
獲取session中的資料:<br>
老方式:<%=session.getAttribute("skey") %><br/>
el方式:${sessionScope.skey }<br/>
<hr>
獲取application中的資料:<br>
老方式:<%=application.getAttribute("akey") %><br/>
el方式:${applicationScope.akey }<br/>
<hr>
獲取失敗老方式:<%=application.getAttribute("aakey") %><br/>
獲取失敗el方式:${applicationScope.aakey }
<hr>
便捷獲取:
${skey },${rkey },${aakey },${akey }
<hr>
${rkey }
----------------------------------------------------------------------------------------------
2.獲取複雜資料
獲取陣列中的資料
${域中的名稱[index]}
獲取list中的資料
${域中的名稱[index]}
獲取map中的資料
${域中的名稱.鍵名}
-----------------------------------------------------------------------------
<%
//往request域中放入陣列
request.setAttribute("arr", new String[]{"aa","bb","cc"});
//往request域中放入list
List list=new ArrayList();
list.add("aaa");
list.add("bbb");
list.add("ccc");
request.setAttribute("list", list);
//往request域中放入map
Map m=new HashMap();
m.put("username","tom");
m.put("age",18);
request.setAttribute("map", m);
%>
獲取域中的陣列:<br>
老方式:<%=((String[])request.getAttribute("arr"))[1] %><br>
el方式:${arr[1] }<br>
<hr>
獲取域中的list:<br>
老方式:<%=((List)request.getAttribute("list")).get(1) %><br>
el方式:${list[1] }<br>
list的長度:${list.size() }
<hr>
獲取域中的map:<br>
老方式:<%=((Map)request.getAttribute("map")).get("age") %><br>
el方式:${map.age}<br>
<hr>
-----------------------------------------------------------------------------------------------------------
javabean導航
javabean:
java語言編寫的一個可重用的元件,
狹義上來說就是我們編寫的一個普通的java類 例如:User Person
javabean規範:
1.必須是一個公共的具體的類 public class
2.提供私有的成員變數 private String id;//
3.提供公共訪問欄位的方法 get|set|is方法
public String getId(){..}
一旦有公共的方法之後,get|set|is之後的內容,將首字母小寫,將這個東西稱之為bean屬性
id就是一個bean屬性
4.提供一個無參的構造器
5.一般實現序列化介面 serializable
3.${域中javabean名稱.bean屬性}
---------------------------------------------------------------------
例子 el 獲取物件中欄位的值
<%
User u=new User();
u.setId("001");
u.setName("tom");
u.setPassword("123");
//將u放入域中
request.setAttribute("user", u);
%>
獲取域中javabean的id值:<br>
老方式:<%=((User)request.getAttribute("user")).getId() %><br/>
el方式:${user.id }<!-- 相當於呼叫 getXxx() -->
<hr>
el獲取那麼:${user.name }<br>
錯誤演示:${user.username }
-------------------------------------------------------------------------------------
//
執行運算:
四則運算 關係(>..) 邏輯(&& ||)
注意:
+:只能進行加法運算,字串形式數字可以進行加法運算.
empty:判斷一個容器的長度是否為0(array set list map),還可以判斷一個物件是否為空
${empty 域中的物件名稱}
取反 not 例如 not empty
${not empty 域中物件名稱}
三元運算子 ${ 3>4?"yes":"no" }
--------------------------------------------------------------------------------------------------------
例子:
<%
request.setAttribute("i", 3);
request.setAttribute("j", 4);
request.setAttribute("q", "12");
request.setAttribute("k", "k");
List l=null;
request.setAttribute("list", l);
List ll=new ArrayList();
ll.add("22");
request.setAttribute("list_", ll);
User user=null;
request.setAttribute("bean", user);
User user_=new User();
request.setAttribute("bean_", user_);
%>
${i+j }<br/>
${i+q }<br/>
${q+q }<br/>
<%-- ${i+k }<br/> --%>
<hr>
域中list的長度是否為0:${empty list}<br/>
域中list_的長度是否為0:${empty list_ }<br/>
<hr>
域中的bean是否為空:${empty bean }<br/>
域中的bean_是否為空:${empty bean_ }<br/>
<hr>
${ 3>4?"yes":"no" }<br/>
${i==3 }
--------------------------------------------------------------------------------------
//
el的內建物件(瞭解)
11個
pageScope
requestScope
sessionScope
applicationScope
param
paramValues
header
haederValues
initParam
cookie★
cookie內建物件:
${cookie} 獲取map{key=Cookie}
例如:建立cookie
Cookie c=new Cookie("username","tom");
通過${cookie}獲取相當於
{username=new Cookie("username","tom")}
相當於map的key是cookie的鍵
map的value是當前cookie
若項獲取名稱username的cookie的value值(獲取tom)
${cookie.username.value}--javabean導航
注意:
java中Cookie的api
getName():獲取cookie的名稱
getValue():獲取cookie的value值
我們稱name和value是cookie的bean屬性
使用cookie內建物件:
${cookie.給cookie起名字.value}
例如:
獲取jsession的值
${cookie.JSESSIONID.value}
pageContext:獲取不是map集合,相當於jsp的pageContext內建物件
在jsp頁面中獲取專案名
${pageContext.request.contextPath}
例如:<a href="${pageContext.request.contextPath }/demo8.jsp">pagecontext內建物件獲取專案名(掌握)</a>
-----------------------------------------------------------------------------------------------------
JSTL
-----------------------------------------------------------------------------------------------------
jstl:
jsp標準的標籤庫語言
apache的
用來替代java指令碼
使用步驟:
1.匯入jar包 (jstl.jar和standard.jar)
2.在頁面上匯入標籤庫
<%@taglib prefix="" uri=""%>
例如:
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
jstl的分類:
core:核心類庫 ★
fmt:格式化|國際化
xml:過時了
sql:過時了
函式庫:很少使用
core:掌握
★c:if
★c:forEach
★c:if 判斷
<c:if test="${el表示式}">滿足的時候輸出的內容</c:if>
例如:
<c:if test="${3>4 }">
3大於4
</c:if>
<c:if test="${3<=4 }">
3不大於4
</c:if>
//
例子 比如可以給我們登陸成功頁面 加上判斷
<c:if test="${not empty name }">
${name}歡迎你!
</c:if>
<c:if test="${empty name }">
你尚未登陸請重新登陸<a href="/ServletDemo/login.jsp">點選登陸</a>
</c:if>
---------------------------------------------------------------------------------------------------------
★c:forEach 迴圈
格式1:
<c:forEach begin="從那裡開始" end="到那裡結束" step="步長" var="給變數起個名字" varStatus="迴圈狀態變數">
${i }--${vs.count }--${vs.current }<br>
</c:forEach>
varStatus:用來記錄迴圈的狀態
常用的屬性:
count:記錄次數 從1開始
current:當前遍歷的內容
index: 索引 從0 開始
例如:
<c:forEach begin="1" end="20" step="2" var="i" varStatus="vs">
${i }--${vs.count }--${vs.current }<br>
</c:forEach>
格式2:
<c:forEach items="${el獲取域中的容器}" var="n">
${n }
</c:forEach>
例如:
//遍歷list
<c:forEach items="${list }" var="n">
${n }
</c:forEach>
//遍歷map
<c:forEach items="${map }" var="en">
${en.key }-- ${en.value }<br/>
</c:forEach>
-----------------------------------------------------------------------------------
例子:
<%
ArrayList<Student> list = new ArrayList<Student>();
list.add(new Student("張三", "23"));
list.add(new Student("李四", "24"));
list.add(new Student("王五", "25"));
list.add(new Student("趙六", "26"));
request.setAttribute("list", list);
%>
<table height=300 width=400 align=center>
<tr bgcolor=green>
<th>編號</th>
<th>姓名</th>
<th>年齡</th>
</tr>
<c:forEach items="${list }" var="stu" varStatus="s">
<c:if test="${s.count%2==0 }">
<tr bgcolor=red>
</c:if>
<c:if test="${s.count%2!=0 }">
<tr bgcolor=yellow>
</c:if>
<td>${s.count }</td>
<td>${stu.name }</td>
<td>${stu.age }</td>
</tr>
</c:forEach>
</table>
-----------------------------------------------------------------------------------------------------------------
* c:url:
功能:
* 自動補專案路徑
* 自動url重寫
<a href='<c:url value="/foreach.jsp" />'>foreach.jsp</a>
---------------------------------------------------------------------------------------------------------------------------
<%
HttpServletRequest req = (HttpServletRequest)(pageContext.getRequest());
String contextPath = req.getContextPath();
session.setAttribute("aaa", "aaa");
%>
<%=contextPath %><br>
${pageContext.request.contextPath}
<a href="${pageContext.request.contextPath}/foreach.jsp">foreach.jsp</a><br>
<a href='<c:url value="/foreach.jsp" />'>foreach.jsp</a>
--------------------------------------------------------------------------------------------------------------------
<%--使用標籤 --%>
<%--set標籤 :儲存資料(儲存到域中)預設儲存到page域 --%>
<c:set var="name" value="rose" scope="request"></c:set>
<%
String msg = null;
pageContext.setAttribute("msg",msg);
%>
${msg }
<br/>
<%--out標籤: 獲取資料(從域中)
default: 當value值為null時,使用預設值
escapeXml: 是否對value值進行轉義,false,不轉義,true,轉義(預設)
--%>
<c:out value="${msg}" default="<h3>標題3</h3>" escapeXml="true"></c:out>
<hr/>
----------------------------------------------------------
<%--choose標籤+when標籤+otherwirse標籤: 多條件判斷 --%>
<c:set var="score" value="56"></c:set>
<c:choose>
<c:when test="${score>=90 && score<=100}">
優秀
</c:when>
<c:when test="${score>=80 && score<90}">
良好
</c:when>
<c:when test="${score>=70 && score<80}">
一般
</c:when>
<c:when test="${score>=60 && score<70}">
及格
</c:when>
<c:otherwise>
不及格
</c:otherwise>
</c:choose>
--------------------------------------------
<%-- forToken標籤: 迴圈特殊字串 --%>
<%
String str = "java-php-net-平面";
pageContext.setAttribute("str",str);
%>
<c:forTokens items="${str}" delims="-" var="s">
${s }<br/>
</c:forTokens>
<%--redrict:重定向 --%>
<c:redirect url="http://www.baidu.com"></c:redirect>
--------------------------------------------------------------------------------------------
* MVC模式 一種前輩們總結出來的開發模式
* M :Model 模
* 封裝資料,處理業務邏輯
* V : View 檢視
* 介面顯示
* C :Controller 控制器
* 排程
* JavaWeb的三層架構
* org.westos.web.servlet :web層
* org.westos.service:service層
*org.westos.dao:dao層
* org.westos.domain : JavaBean
* org.westos.util:工具包
org.westos.test:測試包