2016年4月14日 星期四

JSP 的指令元素(taglilb)和指令元素與動作元素的include (JSP 2.x 三)

※指令元素(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都會錯誤,而動作元素不會

沒有留言:

張貼留言