Jsp詳解

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>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章