一、page指令 page指令是最常用的指令,用來說明JSP頁面的屬性等。JSP指令的多個屬性可以寫在一個page指令里,也可以寫在多個指令里。但需要註意的是,無論在哪個page指令里的屬性,任何page允許的屬性都只能出現一次,否則會出現編譯錯誤。import屬性除外,可以出現多次。屬性名稱區分大 ...
一、page指令
page指令是最常用的指令,用來說明JSP頁面的屬性等。JSP指令的多個屬性可以寫在一個page指令里,也可以寫在多個指令里。但需要註意的是,無論在哪個page指令里的屬性,任何page允許的屬性都只能出現一次,否則會出現編譯錯誤。import屬性除外,可以出現多次。屬性名稱區分大小寫。
屬性名稱 | 取值範圍 | 描述 |
language | java | 指明解釋該JSP文件時採用的語言。一般為Java語言。預設為Java。 |
extends | 任何類的全名 | 指明編譯該JSP文件時繼承哪個類。jsp為Servlet,因此當指明繼承普通類時需要實現Servlet的init、destroy等方法。 |
import | 任何包名,類名 | 引入該JSP中用到的類、包等。import是唯一可以聲明多次的page指令屬性。一個import屬性可以引用多個類,中間用英文逗號隔開,如<%@ page import="java.util.List,java.util.ArrayList"%>。 |
session | true,false | 指明該JSP內是否內置Session對象。如果為true,則內置Session對象,可直接使用。否則不內置Session對象。預設為true。 |
autoFlush | true,false | 是否運行緩存。如果為true,則使用out.println()等方法輸出的字元串並不是立刻到達客戶端伺服器的,而是暫存在緩存里,緩存滿或者程式執行完畢或者執行out.flush()操作時才到客戶端。預設為true。 |
buffer | none或者數字+kb | 指定緩存大小。當autoFlush設為true時有效,例如:<%@ page buffer="10kb"%>。 |
isThreadSafe | true,false | 指定是否線程安全。如果為true,則運行多個線程同時運行該JSP程式,否則只運行一個線程運行,其餘線程等待。預設為false。 |
isErrorPage | true,false | 指定該頁面是否為錯誤處理頁面,如果為true,則該JSP內置有一個Exception對象exception,可直接使用,否則沒有,預設為fasle。 |
errorPage | 某個JSP頁面的相對路徑 | 指明一個錯誤顯示頁面,如果該JSP程式拋出了一個未捕捉的異常,則轉到errorPage指定的頁面。errorPage指定的頁面通常isErrorPage屬性為true,且內置的excception對象為未捕捉的異常。 |
contentType | 有效的文檔類型 |
客戶端瀏覽器根據該屬性判斷文檔類型,例如: HTML格式為text/html 純文本格式為text/plain JPG圖像為image/jpeg GIF圖像為image/gif WORD文檔為application/msword |
info | 任意字元串 | 指明JSP的信息。該信息可以通過Servlet.getServletInfo()方法獲取到。 |
trimDirectiveWhitespaces | true,false | 是否去掉指令前後的空白字元。預設為false。 |
trimDirectiveWhitespaces=“false”(預設為false)時HTML代碼效果圖:
trimDirectiveWhitespaces=“true”時HTML代碼效果圖:
註意:在HTML文件中,空行是不影響顯示效果的。但如果輸出的是XML文件,則可能有問題,因為某些XML解析器不允許XML文件前面有空行。
二、include指令
1.重點說明
include指令只有一種格式:<%@ include file="relativeURL"%>。relativeURL為本應用程式內另一個JSP文件或者HTML文件的路徑。include指令用來實現JSP頁面的的區塊化。
2.代碼實踐和效果圖
Head.jsp(導航欄內容)
1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 3 4 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 5 <html> 6 <head> 7 8 9 <title>My JSP 'Head.jsp' starting page</title> 10 11 <meta http-equiv="pragma" content="no-cache"> 12 <meta http-equiv="cache-control" content="no-cache"> 13 <meta http-equiv="expires" content="0"> 14 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> 15 <meta http-equiv="description" content="This is my page"> 16 <!-- 17 <link rel="stylesheet" type="text/css" href="styles.css"> 18 --> 19 20 </head> 21 22 <body> 23 <table width="100%" cellspacing=1 bgcolor=#999999> 24 <tr> 25 <td bgcolor=#666666 colspan="7" 26 style="color:#FFFFFF; font-size:40px; height:60px;"> 27 Hello World 28 </td> 29 </tr> 30 <tr> 31 <td bgcolor=#DDDDDD align="center">首頁</td> 32 <td bgcolor=#DDDDDD align="center">百科</td> 33 <td bgcolor=#DDDDDD align="center">文檔</td> 34 <td bgcolor=#DDDDDD align="center">下載</td> 35 <td bgcolor=#DDDDDD align="center">關於</td> 36 <td bgcolor=#DDDDDD align="center">郵件</td> 37 <td bgcolor=#DDDDDD align="center">社區</td> 38 </tr> 39 </table> 40 </body> 41 </html>
Foot.jsp(版權內容)
1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 3 4 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 5 <html> 6 <head> 7 8 9 10 11 <meta http-equiv="pragma" content="no-cache"> 12 <meta http-equiv="cache-control" content="no-cache"> 13 <meta http-equiv="expires" content="0"> 14 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> 15 <meta http-equiv="description" content="This is my page"> 16 <!-- 17 <link rel="stylesheet" type="text/css" href="styles.css"> 18 --> 19 20 </head> 21 22 <body> 23 <table width="100%" cellspacing=1 bgcolor=#CCCCCC> 24 <tr> 25 <td align="center" bgcolor=#666666 style="color: #FFFFFF;font-size:14px;height:20px;"> 26 Copyright 2015-2016 ©King 27 </td> 28 </tr> 29 </table> 30 </body> 31 </html>
Include.jsp
1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 <%@ page trimDirectiveWhitespaces="true" %><!-- 是否去掉指令前後的空白字元。預設為false --> 3 <% 4 String path = request.getContextPath(); 5 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; 6 %> 7 8 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 9 <html> 10 <head> 11 <base href="<%=basePath%>"> 12 13 14 <meta http-equiv="pragma" content="no-cache"> 15 <meta http-equiv="cache-control" content="no-cache"> 16 <meta http-equiv="expires" content="0"> 17 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> 18 <meta http-equiv="description" content="This is my page"> 19 <!-- 20 <link rel="stylesheet" type="text/css" href="styles.css"> 21 --> 22 23 </head> 24 25 <body> 26 <%@ include file="Head.jsp" %> <!--include指令 --> 27 <p style="line-height:22px; text-indent:2em;">拉布拉多獵犬因原產地在加拿大的紐芬蘭與拉布拉多省而得名。 28 拉布拉多犬是一種中大型犬類,個性忠誠、大氣、憨厚、溫和、陽光、開朗、活潑,智商極高,也對人很友善, 29 是非常適合被選作經常出入公共場合的導盲犬或地鐵警犬及搜救犬和其他工作犬的狗品種, 30 跟哈士奇(西伯利亞雪撬犬)和金毛獵犬併列三大無攻擊性犬類,拉布拉多智商位列世界犬類第七。</p> 31 <%@ include file="Foot.jsp" %> <!--include指令 --> 32 </body> 33 </html>
3.include行為和include指令
JSP還提供了另一種包含文件的行為(include行為):<jsp:include page="relativeURL">命令。該命令與include指令使用方法基本一致。不同的是include指令是把Head.jsp和Foot.jsp的源代碼添加到Include.jsp中然後再編譯成一個class文件,屬於先包含後編譯。而include行為則是運行時單獨執行Head.jsp和Foot.jsp,然後把執行結果包含到Include.jsp中,屬於先運行後包含行為。
除了上面兩種方法包含文件外,還可以在web.xml中通過JSP配置來包含文件。
1 <jsp-config> 2 <jsp-property-group> 3 <include-prelude>/Head.jspf</include-prelude><!--在執行JSP之前執行的文件 --> 4 <include-coda>/Foot.jspf</include-coda><!--在執行JSP之後執行的文件 --> 5 </jsp-property-group> 6 </jsp-config>
三、taglib指令
JSP支持標簽技術。使用標簽功能能夠實現視圖代碼重用。要使用標簽功能必須先聲明標簽庫以及標簽首碼。taglib指令用來指明JSP頁面內使用的JSP標簽庫。taglib指令有兩個屬性,uri為類庫的地址,prifix為標簽的首碼。
1 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 2 <html> 3 <head> 4 </head> 5 <body> 6 <c:forEach var="item" items="${arrays}"> 7 <c:out value="item"></c:out> 8 </c:forEach> 9 </body> 10 </body> 11 </html>