※指令元素(taglilb)
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="xxx" tagdir="/WEB-INF/tags" %>
※uri和tagdir都是取得tag的地方
※uri是別人寫好而且公認的標籤,如JSTL;而tagdir是自己寫的,裡面寫放tag的路徑
等寫到JSTL就會有感覺了
※prefix是標籤開頭用的,如c:,xxx:
※指令元素與動作元素的include
@page 有個include,屬性只有file,指定要包含的路徑但後面還會寫動作元素,裡面也有個include,兩個很像,這篇要介紹不同的地方
<jsp:include>是動作元素,屬性變成page,也是指定要包含的路徑,但它還有另外一個屬性flush,是在問說buffer滿的時候要不要清空,預設是false
先準備三個頁面,副檔名分別是txt、html、jsp
※text.txt
<%@ page pageEncoding="UTF-8"%> <br />我是text<br /> <%=new Date()%><br />
※html.html
<%@ page pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> </head> <body> <br />我是HTML<br /> <%=new Date()%><br /> </body> </html>
※txt和html先不用include,看單一的結果:
※可以看出txt編碼沒有用,而html我將全部的編碼刪除,run起來都不會出亂碼
※jsp.jsp
<%@ page pageEncoding="UTF-8" import="java.util.*" isELIgnored="false"%> <!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> 我是jsp<br /> <%=new Date()%><br /> </body> </html>
※test.jsp
<%@ include file="/text.txt" %><br /> <%@ include file="/html.html" %><br /> <%@ include file="/jsp.jsp" %> ---------------------------------------------------<br /> <jsp:include page="/text.txt" /><br /> <jsp:include page="/html.html" /><br /> <jsp:include page="/jsp.jsp" />
※結果:
※虛線上面是指令元素;下面是動作元素
※指令元素的jsp和html不加編碼會出亂碼;動作元素不會
※指令元素會將全部的內容include才進行編譯;但並不完全正確,如果是這樣的話,那page除了import可以寫多行,其他都不行,如果include進來,以我上面的做法有多行一樣的,那就會500才對,可是結果並沒有,而且編碼設定真的有效果
※動作元素每一支都會先編譯才include進來(可以看變成servlet的目錄,指令元素永遠只有一個;動作元素會有多個,但只有jsp才會轉成servlet)
所以指令元素不管變數加在txt、html、jsp都會錯誤,而動作元素不會
沒有留言:
張貼留言