Jsp的指令之include指令
include指令:代表的是頁面的包含。
作用:可以把一些jsp的頁面包含在一起,對外展示。
頁面的布局,現在已經不用了,現在都用css+div進行布局。
include的語法
<%@ include file="要包含的頁面" %>
比方說/personal/WebContent/jsp/base/tag.jsp需要引入tag.jsp,則<%@ include file="/jsp/base/tag.jsp" %>
include的原理
include指令是靜態包含的原理,默認把其他包含的所有的文件的源代碼全部復制到main.jsp的文件中一起翻譯成一個.java的文件,一起編譯成一個.class,最后執行。
Jsp的指令之taglib指令
taglib指令:作用是用來導入其他的標簽庫。
taglib的語法
<%@ taglib uri="" prefix="" %>
uri:引入標簽的地址
prefix:標簽的前綴名稱,每一種標簽都有自己的前綴名稱
Jsp的內置對象
jsp的內置對象:可以在jsp頁面中直接使用的對象。
內置對象的引用,內置對象真實對象,內置對象的常用方法
引用 內置對象 常用方法
request HttpServletRequest 域對象,獲取請求參數
response HttpServletResponse 響應頭,回寫cookie,輸出中文
session HttpSession 域對象
application ServletContext 域對象,getRealPath(),getResourceAsStream()
config ServletConfig 獲取初始化參數
page Object
exception Throwable 獲取的異常的信息
out ProntWriter 打印輸出流
pageContext pageContext 代表的是當前頁面的上下文對象(重點)
為什么內置對象就可以直接來使用呢?
jsp的文件在翻譯成.java文件的時候,定義了內置對象,並且賦值了。
總結:
jsp的內置對象可以在jsp頁面中直接來使用。
el表達式與jstl標簽庫及其使用
el表達式:翻譯是表達式語言,jsp內置的一種表達式的語言。
目的:el表達式的出現替換掉java的腳本。
el表達式的寫法:
在jsp頁面上:${ 表達式語言 }
el表達式的作用:
獲取域對象中的值(必須掌握)
執行運行(符號掌握)
el表達式內置的常用的對象(掌握)
調用java的方法(了解)
總結:
從域對象中取值,2種寫法:
.的方式:如果key值有特殊字符,不可以取值
[""]的方式:如果key值有特殊字符,也可以取值
如果使用el表達式獲取不存在的key值,返回""字符串
el表達式獲取域對象中的數據
注意:el表達式操作的都是域對象中的值。
學會el表達式在域對象中獲取值
代碼:
<h3>從數組中獲取值</h3>
<%
String [] arr = {"美美","小風","小花"};
// EL表達式獲取的是域對象中的值
pageContext.setAttribute("arr", arr);
%>
${ pageScope.arr[0] }
${ pageScope.arr[1] }
${ arr[2] }
<h3>從Map集合獲取值</h3>
<%
Map<String,String> map = new HashMap<String,String>();
map.put("aaa", "美美");
map.put("bbb", "小風");
map.put("ccc", "小花");
pageContext.setAttribute("map", map);
%>
${ map.aaa }
${ map.ccc }
<h3>從Java的對象中獲取值</h3>
<%
User user = new User();
user.setUsername("aaa");
user.setPassword("123");
pageContext.setAttribute("user", user);
%>
${ user.username }
${ user.password }
<h3>從List集合中獲取Java的對象的值</h3>
<%
List<User> list = new ArrayList<User>();
list.add(new User("aaa","123"));
list.add(new User("bbb","456"));
list.add(new User("ccc","789"));
pageContext.setAttribute("list", list);
%>
${ list[0].username }
el表達式的運算符
el表達式支持運算。
常用的運算符
+ - * / %
== eq
!= ne
< lt
> gt
<= le
>= ge
&& and
! not
|| or
empty 判斷對象是否是null或者判斷集合的長度是否為0
el表達式的內置對象
pageScope 代表當前的頁面
requestScope 代表request范圍
sessionScope 代表session
applicationScope 代表application
param 代表請求的參數(request.getParameter())
paramValues 代表請求的參數(request.getParameterMap() Map<String,String[]>)
header 代表獲取請求頭
headerValues 代表請求頭
initParam 代表的是全局的初始化參數
cookie 代表的所有的Cookie對象
pageContext 1個頂9個,獲取到其他的內置對象
${ pageContext.request.contextPath } 代表WEB項目的虛擬路徑
<%
pageContext.getRequest().getContextPath(); /personal
%>
${pageContext.request.contextPath} /personal
jstl標簽庫
jstl:jsp的標准的標簽庫,是Apache提供的標簽庫,需要導入jar包。
jstl依賴el表達式,jstl的標簽,獲取值使用el表達式來取值。
導入2個jar包,如果開發工具使用的是Myeclipse不用導入開發的jar包,否則,需要導入jar包。
jstl.jar
standard.jar
jstl標簽庫的語法
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
jstl的原理:jstl的標簽,真正的運行時后台的java類在運行。
jstl的標簽
out標簽
作用:輸出內容(域對象中的值,常量)
屬性:
value:必須要出現的,代表輸出的內容
default:代表默認值
escapeXml:設置是否轉義
代碼:
<h3>out標簽</h3>
<%
request.setAttribute("msg", "out標簽");
%>
<c:out value="${ msg }"></c:out>
<c:out value="<a href='http://www.baidu.com'>點擊</a>" escapeXml="false"></c:out>
頁面輸出結果:out標簽 點擊(點擊可跳轉至百度)
set標簽
作用:向域對象中存入值
屬性:
var:key值
value:值
scope:作用域(page request session application)
代碼:
<h3>set標簽</h3>
<%
request.setAttribute("msg", "A");
%>
<c:set var="msg" value="B" scope="request"></c:set>
${ msg }
頁面輸出結果:B
remove標簽
作用:從域對象中移除值
屬性:
var:移除的key值
代碼:
<h3>remove標簽</h3>
<c:set var="msg" value="美美"/>
${ msg }
<h3>已經把msg移除了</h3>
<c:remove var="msg"/>
${ msg }
if標簽
作用:進行語句的判斷。注意:只有if,沒有else
屬性:
test:必須要出現的,判斷的條件
var:把判斷條件的結果(true或者false)保存到var變量中
scope:作用域
代碼:
<h3>if標簽</h3>
<%
int n = 20;
request.setAttribute("n", n);
%>
<c:if test="${ n eq 10 }" var="i">
<font color="red">n=10</font>
</c:if>
<c:if test="${ n ne 10 }">
<font color="blue">n!=10</font>
</c:if>
${ i }
頁面輸出結果:n!=10 false
choose標簽
作用:用來進行判斷,但是復合的標簽
<c:choose>
<c:when test=""></c:chen>
<c:when test=""></c:chen>
<c:otherwise></c:otherwise>
</c:choose>
屬性:
關注when標簽,test屬性
代碼:
<%
int n = 10;
request.setAttribute("n", n);
%>
<c:choose>
<c:when test="${ n eq 20 }">
n=20
</c:when>
<c:otherwise>
n=其他
</c:otherwise>
</c:choose>
頁面輸出結果:n=其他
forEach標簽
作用:用來迭代數據
forEach當成普通的for循環。for(int i=1; i<=10; i++){}
forEach當成增強的for循環。for(String key : 集合){}
屬性:
var:聲明變量
begin:從哪開始
end:到哪結束
step:步長
varStatus:在迭代的過程中會產生一些信息,把信息保存在varStatus屬性。其中屬性有一些值:
count:代表計數
index:代表下標
first:判斷是否是第一個元素
last:判斷是否是最后一個元素
current:代表當前迭代的元素
items:代表的是要迭代的集合(數組 list set map)
代碼:
<%@page import="com.pers.domain.User"%>
<%@page import="java.util.HashMap"%>
<%@page import="java.util.Map"%>
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!-- 導入JSTL的標簽庫 -->
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
for(int i=0;i<=10;i++){
}
%>
<h3>普通for循環</h3>
<c:forEach var="j" begin="0" end="10" step="1" varStatus="vs">
${ vs.count }
</c:forEach>
<h3>模擬增強for循環</h3>
<c:forEach var="s" items="${ list }">
${ s }
</c:forEach>
<h3>遍歷數據,數據需要存入在域對象中,遍歷List集合</h3>
<%
List<String> list = new ArrayList<String>();
list.add("A");
list.add("B");
list.add("C");
request.setAttribute("list", list);
%>
<c:forEach var="s" items="${ list }">
${ s }
</c:forEach>
<h3>遍歷Map集合</h3>
<%
Map<String,String> map = new HashMap<String,String>();
map.put("a", "A");
map.put("b", "B");
map.put("c", "C");
request.setAttribute("map", map);
%>
<c:forEach var="entry" items="${ map }">
${ entry.key } -- ${ entry.value }
</c:forEach>
<h3>List集合中有Java對象</h3>
<%
List<User> ulist = new ArrayList<User>();
ulist.add(new User(1,"張三","zhangsan123","zhangsan@163.com"));
request.setAttribute("ulist", ulist);
%>
<c:forEach var="user" items="${ ulist }">
${ user.username } -- ${ user.email }
</c:forEach>
</body>
</html>