Jsp詳解
文章目錄
1. Jsp簡介
Jsp,Java service page,Java動態網頁技術。Jsp實際上也是Servlet。
- jsp基本結構
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
</body>
</html>
2. Jsp原理分析
在運行web程序的情況下,到tomcat中work\Catalina目錄下,編譯器已經將jsp文件解析成了Servlet。
3. Jsp語法
3.1 註釋
第一種:HTML註釋,在源碼上可見
<!-- -->
第二種:Jsp註釋,在源碼上不可見
<%-- --%>
3.2 取值表達式
<%= 表達式 %>
(實際上就是調用輸出流打印到頁面上)
3.3 Java代碼塊
<%
java代碼;
%>
3.4 Java代碼塊
<%!
Java代碼
%>
4. Jsp三大指令
- Page : 頁面指令
- Include : 包含指令
- Taglib:標籤指令
4.1 Page指令
contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"
errorPage="/myerror.jsp" :如果當前頁面出錯,就跳轉到對應的頁面
isErrorPage="true" :這個頁面是否是錯誤頁面(當我們要在頁面上直接使用exception的時候就可以加上它)
4.2 包含指令
<%@ include file="/include/a.jsp"%>
//這個頁面將會把a的佈局加進來,可以用來做頁面的分割。
//注意:被引入的頁面只需要Jsp文檔聲明即可,不需要body及html頭等標籤。
4.3 Tablib指令
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
5. 九大內置對象
- pageContext(PageContext)
- request(HttpServletRequest)
- response(HttpServletResponse)
- session(HttpSession)
- exception(Throwable)
- application(ServletContext)
- config(ServletConfig)
- out(JspWriter)
- page(當前jsp對象)
6. 動作元素
<jsp:include page="/include2/a.jsp">
<%--jsp:include主要來做包含頁面的功能--%>
- 動作元素與包含指令的區別:
靜態包含先把頁面包含進來,再翻譯成java代碼(只有一個文件)
動態包含先都編譯成java代碼,再將內容進行包含(有多個文件)
如果包含的是靜態頁面(html),那麼使用靜態包含
如果包含的是動態網頁(jsp),那麼使用動態包含
7. EL表達式
- 導包
el-api.jars
- mavne依賴
<dependency>
<groupId>javax.el</groupId>
<artifactId>javax.el-api</artifactId>
<version>3.0.0</version>
</dependency>
- 注意有時候EL表達式不顯示
<!--在jsp聲明上加上這個屬性就可以解決了-->
<%@ isELIgnored="false"%>
7.1 EL表達式作用
EL表達式的作用就是從四大作用域對象中取值。
注意:EL表達式能夠從四大作用域取值的前提條件是:取的值的對象必須是符合JavaBean規範的。
集合、數組等都是符合JavaBean規範的。
7.2 EL表達式語法
${key} //會到四個作用域裏面去找到key對應的value
7.3 EL取值的順序:
如果在四個作用域存入了相同名字的屬性,此時EL表達式查詢找的順序爲從小至大,先取小的範圍的值,小的沒有,再取到大的範圍的值(pageContext<request<session<application
)。
${pageScope.msg} //取pageContext域對象中的msg屬性值
${requestScope.msg} //取request域對象中的msg屬性值
${sessionScope.msg} //取session域對象中的msg屬性值
${applicationScope.msg} //取application域對象中的msg屬性值
7.4 注意事項
- 帶點的屬性名的取值方式
//設置值
session.setAttribute("KEY.IN.SESSION", "你是session");
//取值
${sessionScope["KEY.IN.SESSION"]}
- 通過pageContext拿到上下文對象
${pageContext.request.contextPath}
- Tomcat7之後EL表達式可以調用方法
${user.getUsername()}//調用user對象的getUsername方法
7.5 其他運算符
EL算術運算符
${1+2} ${2-1} ${2*3} ${16/5}
EL 關係運算符
${16>5} 或${16 gt 5}
${16<5} 或${16 lt 5}
${16>=5} 或${16 ge 5}
${16<=5} 或${16 le 5}
${1=2} 或${1 eq 2}
${2!=1} 或 ${2 ne 1}
EL 邏輯運算符
${true && true} --結果 true
${true and true} 結果true
${true || false} ${true or false} 結果 true
${!true} 或 ${not true} 結果false
EL 其他運算符
${empty param.name} 如果param.name 爲空 返回true 否則false
EL 三目運算符
${A?B:C} 比如 ${user.sex?”男”:”女”}
獲取上下文路徑:可用於頁面中form表達提交時提交servlet請求前的上下文配置
${pageContext.request.contextPath}}
8. JSTL標準標籤庫
- 導包
jstl.jar
standard.jar
jsp-api.jar
- mavne依賴
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
8.1 引用JSTL標籤庫
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
8.2 JSTL常用標籤
- if判斷標籤
<!--test屬性中寫條件,如果條件成立,cif包裹的內容就會顯示在頁面上,否則則不會顯示。-->
<c:if test="${age>20}">
</c:if>
- choose選擇標籤
<c:choose>
<c:when test="${score>60 && score<80}">
B:中等水平。
</c:when>
<c:when test="${score>60}">
A:高等水平。
</c:when>
<c:otherwise>
C:垃圾水平。
</c:otherwise>
</c:choose>
- set/out存取值
<%--
var:聲明變量名,
scope:存入的域對象,
value:var中變量對應的值。
--%>
<c:set var="name" scope="request" value="張三"/>
<c:out value="${name}" />
- url存取值標籤
<%--
var:變量名,
value:servlet請求的地址。
param中name:參數的名稱。
param中value:參數的值。
--%>
<c:url var="login" value="/login">
<c:param name="username" value="tom"/>
<c:param name="password" value="123"/>
</c:url>
<a href="${login}">login</a>
- foreach循環遍歷標籤
<c:forEach items="${list}" var="stu">
${stu.msg}
</c:forEach>
8.3 frameset標籤
<html>
<frameset rows="20%,80%">
<!-- 頭部頁面 -->
<frame src="/xxx/top.jsp">
<!-- 中間區域 -->
<frameset cols="25%,75%">
<frame src="/xxx/menu.jsp">
<frame src="" name="frame_main">
</frameset>
</frameset>
</html>