JSP、JavaBean和EL

1. JSP指令

1.1 page:爲頁面屬性指定值

使用:java<%@page language="java" info="xxx"...%>

  • pageEncoding和contentType:設置編碼。<%@ page pageEncoding=”utf-8”%>

    pageEncoding:告知服務器當前jsp頁面的編碼;
    contentType:它表示添加一個響應頭:Content-Type!等同與response.setContentType(“text/html;charset=utf-8”);
    如果兩個屬性只提供一個,那麼另一個的默認值爲設置那一個。
    如果兩個屬性都沒有設置,那麼默認爲iso

  • import:用於導包。<%@page import=”java.net.*,java.util.*,java.sql.*”%>
  • errorPage和isErrorPage:指定錯誤頁面。<%@ page errorPage="b.jsp" %>
    還可以在web.xml文件中指定錯誤頁面:
 <error-page>
  	<error-code>404</error-code>
  	<location>/error404.jsp</location>
  </error-page>

1.2 include

靜態包含!目的是把多個JSP合併成一個JSP文件!
include指令只有一個屬性:file,指定要包含的頁面,例如:

<%@include file=”b.jsp”%>

原理
在這裏插入圖片描述

1.3 taglib

在JSP頁面中使用第三方的標籤庫時,需要使用taglib指令來“導包”。例如:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

2. jsp九個內置對象

在JSP中無需創建就可以使用的9個對象,它們是:

  • config(ServletConfig):對應“真身”中的ServletConfig;
  • request(HttpServletRequest):即HttpServletRequest類的對象;
  • response(HttpServletResponse):即HttpServletResponse類的對象;
  • session(HttpSession):即HttpSession類的對象;
  • page(當前JSP的真身類型):當前JSP頁面的“this”,即當前對象;
  • pageContext(PageContext):頁面上下文對象,它可獲取其它8個內置對象;
  • application(ServletContext):即ServletContext類的對象;
  • out(JspWriter):等同與response.getWriter(),用來向客戶端發送文本數據;
  • exception(Throwable):只有在錯誤頁面中可以使用這個對象;

在JavaWeb中一共四個域對象。
Servlet能使用其中3個:request、session、application。
JSP都可以使用:pageContext、request、session、application。

2.1 pageContext對象

一個jsp頁面!這個域是在當前jsp頁面和標籤之間共享數據!
功能:
> 域對象
> 代理其他域:pageContext.setAttribute(“xxx”, “XXX”, PageContext.SESSION_SCOPE);
> 全域查找:pageContext.findAttribute(“xxx”);從小到大,依賴查找!
> 獲取其他8個內置對象:

3. JSP動作標籤

是JavaWeb內置的動作標籤,已經定義好,可以直接使用。

3.1 <jsp:include>頁面包含

include指令是在編譯級別完成的包含,即把當前JSP和被包含的JSP合併成一個JSP,然後再編譯成一個Servlet
include動作標籤是在運行級別完成的包含,即當前JSP和被包含的JSP都會各自生成Servlet,然後在執行當前JSP的Servlet時完成包含另一個JSP的Servlet。它與RequestDispatcher的include()方法是相同的!(和請求包含一樣,實質是一句方法調用)

在這裏插入圖片描述

3.2 <jsp:forward>頁面轉發

forward標籤的作用是請求轉發!forward標籤的作用與RequestDispatcher#forward()方法相同。

3.3 <jsp:param>

可以在<jsp:include><jsp:forward>標籤中使用<jsp:param>子標籤,用來傳遞參數的、

4.JavaBean

JavaBean是一種規範,也就是對類的要求:

  1. 必須要有一個默認構造器
  2. 提供get/set方法,如果只有get方法,那麼這個屬性是隻讀屬性!
  3. 屬性:有get/set方法的成員,還可以沒有成員,只有get/set方法。屬性名稱由get/set方法來決定!而不是成員名稱!
  4. 方法名稱滿足一定的規範,那麼它就是屬性!boolean類型的屬性,它的讀方法可以是is開頭,也可以是get開頭!、

5.EL表達式

5.1 EL表達式格式

EL(Expression Language)是一門表達式語言,可替代<%=…%>腳本

  • 操作List和數組:${list[0]}、${arr[0]}
  • 操作bean的屬性:${person.name}、${person[‘name’]},對應person.getName()方法;
  • 操作Map的值:${map.key}、${map[‘key’]},對應map.get(key)。

5.2 EL的11個內置對象

  • pageScope:域內置對象。${pageScope.name}等同與pageContext.getAttribute(“name”)
  • requestScope:域內置對象。
  • sessionScope:域內置對象。
  • applicationScope:域內置對象。
  • param:獲取請求參數,它是一個Map,其中key參數名,value是參數值,適用於單值的參數。
  • paramValues:key參數名,value是多個參數值,適用於多值的參數。
  • header:獲取請求頭,它是一個Map,其中key表示頭名稱,value是單個頭值,適用於單值請求頭
  • headerValues:key表示頭名稱,value是多個頭值,適用於多值請求頭
  • initParam:獲取web.xml中標籤<context-param>內的參數!
  • cookie:Map<String,Cookie>類型,其中key是cookie的name,value是cookie對象。 ${cookie.username.value}
  • pageContext:它是PageContext類型!${pageContext.request.contextPath}輸出項目名

5.3 EL函數庫

導入標籤庫:<%@ tablib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>

6.自定義函數庫

(1). 編寫類
類中只能有public static的方法,並且一定要有返回值

public class ItcastFuncations {
	public static String test() {
		return "傳智播客自定義EL函數庫測試";
	}
}

(2). 部署文件
/WEB-INF/itcast.tld

<?xml version="1.0" encoding="UTF-8" ?>

<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
  version="2.0">
    
  <tlib-version>1.0</tlib-version>
  <short-name>itcast</short-name>
  <uri>http://www.itcast.cn/jsp/functions</uri>

  <function>
    <name>test</name>
    <function-class>cn.itcast.el.funcations.ItcastFuncations</function-class>
    <function-signature>String test()</function-signature>
  </function>
</taglib>

(3). 在JSP中使用自定義

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="itcast" uri="/WEB-INF/itcast.tld" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <body> 
  	<h1>${itcast:test() }</h1>
  </body>
</html>

7.JSTL標籤語言

JSTL是apache對EL表達式的擴展(也就是說JSTL依賴EL)!

7.1 core 標籤!

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  • <c:out>:輸出。EL表達式的增強,可設置默認值,可使用EL獲取指定域的屬性等。

    value:可以是字符串常量,也可以是EL表達式
    default:當要輸出的內容爲null時,會輸出default指定的值
    escapeXml:默認值爲true,表示轉義!

  • <c:set>:設置(創建域的屬性),可以指定域。

    var:變量名
    value:變量值,可以是EL表達式
    scope:域,默認爲page,可選值:page、request、session、application

  • <remove>:刪除域變量

    var:變量名
    scope:如果不給出scope,表示刪除所有域中的該名稱的變量;如果指定了域,那麼只刪除該域的變量。

  • url

    value:指定一個路徑!它會在路徑前面自動添加項目名。
    <c:url value="/index.jsp"/>,它會輸出: /項目名/index.jsp
    子標籤:<c:param>,用來給url後面添加參數,例如:
    <c:url value="/index.jsp">
    <c:param name=“username” value=“張三”/>
    </c:url>
    結果爲:/day13_1/index.jsp?username=%ED%2C%3F%ED%2C%3F
    var:指定變量名,一旦添加了這個屬性,那麼url標籤就不會再輸出到頁面,而是把生成url保存到域中。
    scope:它與var一起使用,用來保存url。默認爲page域。

  • if:對應java中的if語句

    <c:if test=“布爾類型”>…</c:if>,當test爲真時,執行標籤體內容!

  • choose:它對應java中的if/else if/ … /else

    例如:
    <c:choose>
    <c:when test="">…</c:when>

    <c:otherwise> …</c:otherwise>
    </c:choose>

  • forEach:它用來循環遍歷數組、集合!
    它還可以用來計數方式來循環!

計數方式:
<c:forEach var="i" begin="1" end="10">
  ${i}
</c:forEach>

屬性:
    * var:循環變量
    * begin:設置循環變量從幾開始。
    * end:設置循環變量到幾結束。
    * step:設置步長!等同與java中的i++,或i+=2。step默認爲1
  
增強for方式:
<c:forEach items="${strs }" var="str">
 ${str }<br/>
</c:forEach>

屬性:
	* items:指定要循環誰,它可以是一個數組或一個集合
	* var:把數組或集合中的每個元素賦值給var指定的變量。
循環狀態:可以使用varStatus來創建循環狀態變量!

循環狀態變量有如下屬性:
  * count:循環元素的個數
  * index:循環元素的下標
  * first:是否爲第一個元素
  * last:是否爲最後一個元素
  * current:當前元素

<c:forEach items="${list }" var="ele" varStatus="vs">
	${vs.index} ${vs.count } ${vs.first } ${vs.last } ${vs.current }<br/>
</c:forEach>

7.2 fmt庫

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

(1)時期格式庫:<fmt:formatDate value="" pattern="">

  • value:指定一個Date類型的變量
  • pattern:用來指定輸出的模板!例如:yyyy-MM-dd HH:mm:ss

(2)時期格式庫:<fmt:formatNumber value="" pattern="">

<fmt:formatNumber value="${num1}" pattern="0.00">
// 保留小數點後2位,它會四捨五入!如果不足2位,以0補位!
<fmt:formatNumber value="${num1}" pattern="#.##">
// 保留小數點後2位,它會四捨五入!如果不足2位,不補位!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章