一、基本概念:
JSP是一門腳本語言。
JSP擁有Java語言的所有特性。
JSP運行於JSP容器之中:Tomcat8、Jetty9。
JSP==》Servlet==》class文件。
JSR:Java規範請求。
JCP:Java社區組織。
二、腳本程序:
腳本程序可以包含任意量的Java語句、變量、方法或表達式,只要它們在腳本語言中是有效的。
腳本程序的語法格式:
<% 代碼片段 %>
三、JSP聲明:
一個聲明語句可以聲明一個或多個變量、方法,供後面的Java代碼使用。在JSP文件中,您必須先聲明這些變量和方法然後才能使用它們。
JSP聲明的語法格式:
<%! declaration; [ declaration; ]+ ... %>
示例:
<%! int i = 0; %>
<%! int a, b, c; %>
<%! Circle a = new Circle(2.0); %>
四、JSP表達式:
一個JSP表達式中包含的腳本語言表達式,先被轉化成String,然後插入到表達式出現的地方。
由於表達式的值會被轉化成String,所以您可以在一個文本行中使用表達式而不用去管它是否是HTML標籤。
表達式元素中可以包含任何符合Java語言規範的表達式,但是不能使用分號來結束表達式。
JSP表達式的語法格式:
<%= 表達式 %>
示例:
<p>
Today's date: <%= (new java.util.Date()).toLocaleString()%>
</p>
五、JSP註釋:
JSP註釋主要有兩個作用:爲代碼作註釋以及將某段代碼註釋掉。
JSP註釋的語法格式:
<%-- 這裏可以填寫 JSP 註釋 --%>
六、JSP指令:
JSP指令用來設置與整個JSP頁面相關的屬性。
JSP指令語法格式:
<%@ directive attribute="value" %>
這裏有三種指令標籤:
<%@ page ... %> 定義頁面的依賴屬性,比如腳本語言、error頁面、緩存需求等等
<%@ include ... %> 包含其他文件
<%@ taglib ... %> 引入標籤庫的定義,可以是自定義標籤
示例:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
七、JSP行爲:
JSP行爲標籤使用XML語法結構來控制servlet引擎。它能夠動態插入一個文件,重用JavaBean組件,引導用戶去另一個頁面,爲Java插件產生相關的HTML等等。
行爲標籤只有一種語法格式,它嚴格遵守XML標準:
<jsp:action_name attribute="value" />
行爲標籤基本上是一些預先就定義好的函數,下表羅列出了一些可用的JSP行爲標籤::
jsp:include 用於在當前頁面中包含靜態或動態資源
jsp:useBean 尋找和初始化一個JavaBean組件
jsp:setProperty 設置 JavaBean組件的值
jsp:getProperty 將 JavaBean組件的值插入到 output中
jsp:forward 從一個JSP文件向另一個文件傳遞一個包含用戶請求的request對象
jsp:plugin 用於在生成的HTML頁面中包含Applet和JavaBean對象
jsp:element 動態創建一個XML元素
jsp:attribute 定義動態創建的XML元素的屬性
jsp:body 定義動態創建的XML元素的主體
jsp:text 用於封裝模板數據
幾個示例:
<jsp:include page="{urlSpec | <%= expression %>}" flush="true | false " />
<jsp:forward page={"relativeURL" | "<%= expression %>"} />
<jsp:param name="ParameterName" value="ParameterValue" />
該部分可以參考文章:jsp行爲元素介紹
八、JSP隱含對象:
JSP支持九個自動定義的變量,江湖人稱隱含對象。這九個隱含對象的簡介見下表:
對象 | 描述 |
---|---|
request | HttpServletRequest類的實例 |
response | HttpServletResponse類的實例 |
out | PrintWriter類的實例,用於把結果輸出至網頁上 |
session | HttpSession類的實例 |
application | ServletContext類的實例,與應用上下文有關 |
config | ServletConfig類的實例 |
pageContext | PageContext類的實例,提供對JSP頁面所有對象以及命名空間的訪問 |
page | 類似於Java類中的this關鍵字 |
Exception | Exception類的對象,代表發生錯誤的JSP頁面中對應的異常對象 |
九、控制流語句:
判斷語句
If…else塊,請看下面這個例子:
<%! int day = 3; %>
<html>
<head><title>IF...ELSE Example</title></head>
<body>
<% if (day == 1 | day == 7) { %>
<p> Today is weekend</p>
<% } else { %>
<p> Today is not weekend</p>
<% } %>
</body>
</html>
switch…case塊:
<body>
<%
switch(day) {
case 0:
out.println("It\'s Sunday.");
break;
case 1:
out.println("It\'s Monday.");
break;
case 2:
out.println("It\'s Tuesday.");
break;
case 3:
out.println("It\'s Wednesday.");
break;
case 4:
out.println("It\'s Thursday.");
break;
case 5:
out.println("It\'s Friday.");
break;
default:
out.println("It's Saturday.");
}
%>
</body>
循環語句:
<%! int fontSize; %>
<html>
<head><title>FOR LOOP Example</title></head>
<body>
<%for ( fontSize = 1; fontSize <= 3; fontSize++){ %>
<font color="green" size="<%= fontSize %>">
JSP Tutorial
</font><br />
<%}%>
</body>
</html>
十、JSP運算符:
十一、JSP 標準標籤庫(JSTL):
JSP標準標籤庫(JSTL)是一個JSP標籤集合,它封裝了JSP應用的通用核心功能。
JSTL支持通用的、結構化的任務,比如迭代,條件判斷,XML文檔操作,國際化標籤,SQL標籤。 除了這些,它還提供了一個框架來使用集成JSTL的自定義標籤。
在使用時,需要將standard.jar和jstl.jar文件拷貝到web服務器下。
引用語法:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
常用的如下:
十二、自定義標籤:
定義文件格式示例:
<?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">
<description>JSTL 1.1 functions library</description>
<display-name>JSTL functions cms</display-name>
<tlib-version>1.1</tlib-version>
<short-name>fnc</short-name>
<uri>http://java.sun.com/jsp/jstl/functionsc</uri>
<function>
<description>獲取站點</description>
<name>getSite</name>
<function-class>com.thinkgem.jeesite.modules.cms.utils.CmsUtils</function-class>
<function-signature>com.thinkgem.jeesite.modules.cms.entity.Site getSite(java.lang.String)</function-signature>
<example>${fnc:getSite(siteId)}</example>
</function>
</taglib>
引入自定義標籤:
<%@ taglib prefix="fns" uri="/WEB-INF/tlds/fns.tld" %>
使用實例:
<ul>
<c:forEach items="${fnc:getArticleList(site.id, 2, 8, '')}" var="article">
<li><span class="pull-right"><fmt:formatDate value="${article.updateDate}" pattern="yyyy.MM.dd"/></span>
<a href="${article.url}" style="color:${article.color}">${fns:abbr(article.title,28)}</a>
</li>
</c:forEach>
</ul>