因此在某種程度上來講,一個 JSP 頁面只是用另外一種方式來寫 servlet,而不須要成爲一個 Java 編程奇才。除了翻譯階段,處理 JSP 頁面徹底就像處理一個普通的 servlet 同樣。php
能夠認爲是一個語法糖,能夠類比react之中的jsx,實際上就是一個js函數。html
理解 JSP 的低級功能的關鍵是理解它們遵循的簡單的生命週期。前端
JSP 生命週期能夠被定義爲從建立到銷燬的整個過程,這相似於一個 servlet 的生命週期與一個額外的步驟,該步驟將一個 JSP 編譯成 servlet。vue
當瀏覽器請求一個 JSP,JSP 引擎首先檢查是否須要編譯頁面。若是頁面從未被編譯,或者 JSP 自上次編譯後被修改了,那麼 JSP 引擎就會編譯頁面。java
scriptlet 能夠包含任意數量的 JAVA語言語句,變量或方法聲明,或者咋頁面的腳本語言中有效的表達式。下面是scriptlet的語法。react
<% code fragment %> <jsp:scriptlet> code fragment <jsp:scriptlet>
任何文本、html標籤或編寫的jsp元素必須在scriptlet以外。下面是jsp的第一個簡單的例子:web
<html> <head><title> Hello world </title></head> <body> Hello world ! <br/> <% out.printIn("your IP address is " + request.getRemoteAddr()) %> </body> </html>
在JSP文件中使用變量或方法以前,必須聲明。jsp聲明能夠同時聲明一個或多個,方法以下:express
<%! declaration;[ declaration; ]+ ... %> <jsp:declaration> code fragment </jsp:declaration>
如下是JSP聲明的一些簡單的例子:編程
<%! int i = 0 ; %> <%! int a , b , c; %> <%! Circle a = new Circle(2.0); %>
JSP 表達式元素包含一個腳本語言表達式,該表達式被賦值,轉換成一個字符串,並插入到表達式出如今JSP文件中的位置。
由於表達式的值轉換爲一個字符串,你能夠在JSP文件中的文本的一行使用一個表達式,不管該文本是不是HTML標籤標記。
根據JAVA語言規範,表達式元素能夠包含任何有效的表達式,但你不能使用分號來結束一個表達式。
JSP表達式的語法以下:瀏覽器
<%= expression %> <jsp:expression> expression </jsp:expression>
例子:
<html> <head><title> A comment Test </title></head> <body> <p> Today's data: <%= (new java.util.Date()).toLocaleString() %> </p> </body> </html>
JSP 註釋指的式 JSP容器應該忽略的文本或語句。當你想要隱藏或註釋掉JSP頁面的一份分時,JSP註釋很是有用。語法以下:
<%-- This is a JSP commnet --%>
JSP指令影響servlet類的整體結構。一般形式以下:
<%@ directive attribute="value" %>
JSP指令爲容器提供方向和指導,告訴它如何處理JSP過程的某些方面。
三種指令標籤:
指令 | 描述 |
---|---|
<%@ page ... %> | 定義page-dependent屬性,好比腳本語言,錯誤頁面和緩衝要求。 |
<%@ include ... %> | 包含轉換階段的一個文件。 |
<%@ taglib ... %> | 聲明一個在頁面中使用的標籤庫,包含自定義操做。 |
頁面指令用於爲屬於當前JSP頁面的容器提供指示。你能夠在JSP頁面的任何地方編寫頁面指令代碼。能夠將整個頁面當成一個對象,page指令就是設置當前頁面的一些屬性。
按照慣例,一般在JSP頁面的頂部編寫頁面指令代碼。下面是頁面指令的基本語法:
<%@ page attribute="value" %> <jsp:directive.page attribute="value" />
包含指令用於在轉換階段包含一個文件。這個指令告訴容器在轉換階段將其餘外部文件的內容與當前JSP合併。可在JSP頁面中的任何位置編寫include指令。
功能相似於模塊化。
通常使用這個指令的形式以下:
<%@ include file="relative url" %> <jsp:directive.include file="relative url" />
JSP API 允許用戶定義自定義的JSP標籤,看起來像HTML或XML標籤,且標籤庫是一組用戶定義的標籤,可以實現自定義的行爲。
很是相似於react、vue中的組件封裝。
uri 屬性值解析爲容器理解的一個位置,prefix 屬性通知容器什麼標記是自定義操做。語法以下:
<%@ taglib uri ="uri" prefix="prefixOfTag"%> <jsp:directive.taglib uri="uri" prefix="preOfTag">
用例以下:
<%@ taglib uri="http://www.jspcentral.com/tags" prefix="public" %> <public:loop> </public:loop>
JSP 操做 使用XML 語法結構來控制servlet引擎的行爲。能夠動態地插入一個文件,重用javabean組件,將用戶轉到另外一個頁面,或爲java插件生成HTML。
語法:
<jsp:action_name attribute="value" />
操做元素基本上是預約義的函數。
JSP支持9個自動定義的變量,這也成爲隱式對象,相似於php之中的魔術變量。目前JSP只涉及v部分,不考慮這些。
JSP 提供了強有力的 Java 工具來嵌入到你的 web 應用程序中。你能夠在 JSP 編程中使用全部的 API 和 Jave 構建塊,包括決策語句、循環等。(就是流程、循環等模板語法)
if...else 像普通的scriptlet 同樣開始,但scriptlet結束於scriptlet標籤間的html文本每一行。
<%! int day = 3; %> <html> <head><title>IF ...ELSE ...</title></head> <body> <% if(day ==1 | day == 7) { %> <p> Today is weekend </p> <% }else{ %> <p> Today is not weekend </p> <% } %> </body> </html>
switch ...case
<%! int day = 3; %> <html> <head><title>switch ...case ...</title></head> <body> <% switch(day){ case 0: out.printIn("It\'s Sunday."); break; case 1: out.printIn("It\'s Sunday."); break; case 1: out.printIn("It\'s Sunday."); break; } %> </body> </html>
三種基本類型來實現JSP編程:for,while和do...while
<%! int fontSize; %> <html> <head><title>FOR LOOP Example</title></head> <body> <% for(fontSize = 1; fontSize <= 3; fontSize++ >){ %> <font color="green" size="<%= fontSize %>"> 字體逐漸增長 </font><br/> <% } %> </body> </html>
<%! int fontSize; %> <html> <head><title>WHILE LOOP Example</title></head> <body> <%while ( fontSize <= 3){ %> <font color="green" size="<%= fontSize %>"> 字體逐漸增長 </font><br /> <%fontSize++;%> <%}%> </body> </html>
JSP支持全部的java支持的邏輯和算術運算符。