摘要:下面我們再打開對應(yīng)的文件,我們會看到如下部分內(nèi)容靜態(tài)測試調(diào)用我是文件,我被文件調(diào)用了我們發(fā)現(xiàn),在該包含文件被引入處那條語句被執(zhí)行了。
在上一節(jié)中我們學(xué)習(xí)了如何搭建一個簡單的Web應(yīng)用,并且已經(jīng)知曉了一個JSP頁面主要由靜態(tài)的HTML內(nèi)容和動態(tài)的Java腳本共同組成。JSP的基本語法共有JSP注釋、JSP聲明、輸出JSP表達(dá)式與JSP程序片段四種,用來控制動態(tài)向頁面輸出內(nèi)容的。現(xiàn)在我們就一起來學(xué)習(xí)JSP的這幾種基本語法。
(一)JSP的基本語法 1.JSP注釋語句JSP注釋用于標(biāo)注在程序開發(fā)過程中的開發(fā)提示,不會輸出到客戶端。
JSP注釋的格式如下:
<%--我是JSP注釋的內(nèi)容--%>
其實(shí)我們可以發(fā)現(xiàn)JSP的注釋與HTML的注釋十分類似,下面是HTML的注釋格式:
下面我們通過一個例子來體會一下這二者在JSP頁面中的區(qū)別:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>注釋實(shí)例 下面的是JSP注釋:
<%--我是JSP注釋--%>
下面的是HTML注釋:
在瀏覽器中瀏覽該頁面,并且右擊查看網(wǎng)頁源代碼,我們會看到JSP注釋消失了,如下圖所示:
這表明JSP注釋只在服務(wù)器端有效,但是并不會作為HTML代碼的一部分發(fā)送到客戶端。
2.JSP腳本語句 (1)JSP聲明JSP聲明用于聲明Servlet類的成員變量和方法
JSP的聲明格式如下:
<%! 聲明內(nèi)容 %>
下面來看一個使用JSP聲明的示例頁面:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>JSP聲明 <%! public int count; public String sayHello(){ return "hello"; } %> <% //這行代碼的意思是向屏幕輸出count的值后再加1 out.println(count++); %>
<% //這行代碼的意思是輸出sayHello方法的返回值 out.println(sayHello()); %>
當(dāng)我們在瀏覽器中查看時,可以看到count的值與字符hello的輸出。
對于JSP聲明有下列三點(diǎn)需要注意:
可以一次性聲明多個變量和方法,前提是符合Java語法。
一個聲明僅在一個頁面中有效
聲明的變量為全局變量,所有執(zhí)行此JSP頁面的用戶會共享此變量。
在JSP聲明中聲明方法似乎不需要任何類作為載體而獨(dú)立存在,事實(shí)上并不是這樣。根據(jù)我們學(xué)過的知識我們知道JSP實(shí)質(zhì) 就是Servlet,JSP會被轉(zhuǎn)化為一個Servlet實(shí)例。而我們在JSP頁面中聲明的內(nèi)容會被轉(zhuǎn)換為對應(yīng)Servlet實(shí)例的成員變量和成員方法。
下面我們打開F:TomcatworkCatalinalocalhostmyThreeProjectorgapachejsp下的.java文件,我們會看到如下的java代碼:
* generation to assist with modification tracking. */ package org.apache.jsp; import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.jsp.*; public final class index_jsp extends org.apache.jasper.runtime.HttpJspBase implements org.apache.jasper.runtime.JspSourceDependent, org.apache.jasper.runtime.JspSourceImports { public int count; public String sayHello(){ return "hello"; } ... }
以上就是由JSP頁面轉(zhuǎn)換成的的Servlet類,我們可以看到count變量與sayHello方法是這個類的成員。
由于JSP聲明的變量與方法會轉(zhuǎn)換為對應(yīng)Servlet實(shí)例的成員變量與成員方法,所以我們可以對JSP聲明部分定義的變量和方法使用private和public等訪問控制符,也可以使用static,但是不能使用abstract修飾聲明部分的方法,因為抽象方法將導(dǎo)致JSP對應(yīng)的Servlet變成抽象類,從而導(dǎo)致無法實(shí)例化。
(2)輸出JSP表達(dá)式JSP提供了如下方式的輸出表達(dá)式語法:
<%=JSP表達(dá)式%>
值得注意的是JSP表達(dá)式后面不能有分號。
下面來看一個實(shí)例:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>輸出JSP表達(dá)式 <%! public int count; public String sayHello(){ return "hello"; } %> <%=count++%>
<%=sayHello()%>
可以看到這個頁面與前一個頁面的區(qū)別僅僅是把out.println輸出語句替換成了"=",這兩個頁面的執(zhí)行效果是一致的。其實(shí),JSP/Servlet引擎在解釋執(zhí)行JSP頁面時會把"="替換成Servlet實(shí)例類中的out輸出語句。
(3)JSP程序片段JSP腳本中可以包含任何可執(zhí)行性代碼
JSP程序片段簡稱Scriptlet,就是腳本小部件的意思。我們可以通過Scriptlet把代碼嵌入到靜態(tài)HTML頁面中去,JSP的核心代碼也都是寫在這里面的。同樣,它的內(nèi)容也是包裹在"<%%>"中,如下所示:
<% 代碼 %>
下面我們來看一個例子:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>JSP腳本 <% String name = "Jom"; if (name.equals("Jom")){ %> He is Jom. <% } else { %> He is not Jom. <% } %>
輸出結(jié)果為:
He is Jom.
下面我們打開此項目生成的.java文件
public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response) throws java.io.IOException, javax.servlet.ServletException { ... try { ... out.write(" "); out.write(" "); out.write(" "); out.write(" "); out.write("JSP腳本 "); out.write(" "); String name = "Jom"; if (name.equals("Jom")){ out.write(" "); out.write(" He is Jom. "); out.write(" "); } else { out.write(" "); out.write(" He is not Jom. "); out.write(" "); } out.write(" "); out.write(" "); out.write(""); } ... }"); out.write(" "); out.write(" "); out.write("
我們可以看出,JSP腳本與靜態(tài)的HTML內(nèi)容已經(jīng)全部被轉(zhuǎn)換為_jspService方法的可執(zhí)行代碼。由此我們可以得出兩個結(jié)論:
我們可以在JSP腳本中聲明變量,只是聲明的只是局部變量。
JSP腳本中不能定義方法,因為按照java語法,方法中不能定義方法。
(二)JSP編譯指令JSP編譯指令用于提供整個JSP網(wǎng)頁的相關(guān)信息、設(shè)定JSP網(wǎng)頁的相關(guān)屬性,例如網(wǎng)頁的編碼方式、語法等。JSP編譯指令語法如下:
<%@ 指令名 屬性1="屬性值1" 屬性2="屬性值2" ... %>
編譯指令都有默認(rèn)值,所以我們無需為每個指令設(shè)置值。常見的編譯指令有page、include、taglib三個,下面主要介紹page、include兩個指令,關(guān)于taglib指令在后續(xù)章節(jié)中會詳細(xì)學(xué)習(xí)。
1.page指令page指令定義了JSP文件的全局屬性,可以指定所使用的的腳本語言、JSP對應(yīng)的Servlet所實(shí)現(xiàn)的接口等。
page指令的語法格式如下:
<%@ page 屬性1="屬性值1" 屬性2="屬性值2" ... %>
page指令常用的屬性見下圖(圖片來源于網(wǎng)絡(luò)):
值得注意的是,contentType的charset屬性和pageEncoding屬性都涉及JSP網(wǎng)頁的編碼方式,但是兩者有所區(qū)別。contentType的charset屬性是指服務(wù)器發(fā)送給客戶端時的內(nèi)容編碼方式,pageEncoding是JSP文件本身的編碼方式。另外,errorPage屬性實(shí)質(zhì)是JSP的異常處理機(jī)制,JSP腳本不要求強(qiáng)制處理異常,包括checked異常。
使用page指令需要注意一下幾點(diǎn):
page指令作用于整個頁面,包括靜態(tài)的包含文件,不包括動態(tài)的包含文件。
page指令在一個頁面中可以出現(xiàn)多次,除了import屬性外,其他屬性只能出現(xiàn)一次。
為了JSP程序的可讀性,我們一般將page指令置于頂部
2.include指令使用include指令可以將外部文件包含進(jìn)當(dāng)前JSP頁面,這個外部文件可以是JSP文件、HTML文件或者文本文件。
include指令的語法格式如下:
<%@ include 屬性1="屬性值1" 屬性2="屬性值2" ... %>
這種包含是靜態(tài)包含,即將被包含文件插入到JSP指定的位置,解析這個頁面,同時把目標(biāo)文件的其他編譯指令也包含進(jìn)來。
下面來看一個使用靜態(tài)導(dǎo)入的示例:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>靜態(tài)include測試 <%@include file="text.jsp" %>
在這個JSP頁面里包含了當(dāng)前路徑下的text.jsp文件,該文件里只有一條JSP輸出語句:
<% out.println("我是text.jsp文件,我被index.jsp文件調(diào)用了!"); %>
下面我們啟動這個項目,在瀏覽器中我們會看到如下的輸出:
我們發(fā)現(xiàn)text.jsp文件里的內(nèi)容在index.jsp文件里被成功執(zhí)行了。下面我們再打開對應(yīng)的.java文件,我們會看到如下部分內(nèi)容:
out.write(" "); out.write(" "); out.write(" "); out.write("靜態(tài)include測試itle> "); out.write(" "); out.write(" "); out.write(" "); out.write(" "); out.write(" "); out.write(" "); out.write(" "); out.write("JSP-include調(diào)用 "); out.write(" "); out.write(" "); out.write(" "); out.write(" "); out.write(" "); out.println("我是text.jsp文件,我被index.jsp文件調(diào)用了!"); out.write(" "); out.write(" "); out.write(""); out.write(" "); out.write(" "); out.write("");
我們發(fā)現(xiàn),在該包含文件被引入處那條語句被執(zhí)行了。所以,我們得出結(jié)論:include指令將包含的頁面與本頁面融合成一個了頁面。
鑒于此,如果多數(shù)JSP網(wǎng)頁包含相同的內(nèi)容,我們可以將這些相同的內(nèi)容多帶帶放在一個文件中,其他JSP頁面通過include指令將這個文件包含。這樣做不僅可以提高開發(fā)效率還有利于網(wǎng)站的維護(hù)。
下面以下圖總結(jié)本次學(xué)習(xí)內(nèi)容(圖片來源于網(wǎng)絡(luò)):
以上就是本次學(xué)習(xí)內(nèi)容,下次我們將學(xué)習(xí)JSP的動作指令。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/66818.html
摘要:當(dāng)后繼請求相同的頁面時,容器加載之前生成的類,并且通知去執(zhí)行已經(jīng)存在的字節(jié)碼,從而省去了轉(zhuǎn)換的過程,這也是第一次執(zhí)行頁面時間較長的原因。 以往學(xué)習(xí)的時候大多是看完書或者看完視頻,動手實(shí)踐一下就OK了。然而過了一段時間我發(fā)現(xiàn)東西都忘差不多了,需要復(fù)習(xí)才能重新掌握。現(xiàn)在開始學(xué)習(xí)JavaWeb了,我將在這里記錄自己的學(xué)習(xí)的一點(diǎn)一滴,不僅便于自己以后回顧知識點(diǎn),也希望能對JavaWeb初學(xué)者有...
摘要:系列文章請查看超詳細(xì)的面試題總結(jié)一之基礎(chǔ)知識篇超詳細(xì)的面試題總結(jié)二之基礎(chǔ)知識篇超詳細(xì)的面試題總結(jié)三之集合篇常見問題下面的都是自己之前在學(xué)習(xí)的時候總結(jié)的,對于鞏固的基礎(chǔ)知識應(yīng)該有很大幫助。注意多線程的并發(fā)的讀寫類屬性會導(dǎo)致數(shù)據(jù)不同步。 系列文章請查看: 超詳細(xì)的Java面試題總結(jié)(一)之Java基礎(chǔ)知識篇 超詳細(xì)的Java面試題總結(jié)(二)之Java基礎(chǔ)知識篇 超詳細(xì)的Java面試題總結(jié)(...
摘要:在頁面中執(zhí)行的表達(dá)式語法表達(dá)式注意表達(dá)式不以分號結(jié)束示例張學(xué)友聲明一個字符串變量聲明一個返回整型值的函數(shù)單行注釋多行注釋這里是腳本代碼測試哈哈你好四頁面生命周期問答題當(dāng)用戶第一次請求一個頁面時,首先被執(zhí)行的方法是構(gòu)造方法答案選。 java web開發(fā)學(xué)習(xí)筆記。 一、jsp簡介 JSP與 PHP、ASP、ASP.NET 等語言類似,運(yùn)行在服務(wù)端的語言。 JSP(全稱Java Server...
摘要:出現(xiàn)的目的同一樣也是要提到頁面中的腳本代碼。標(biāo)準(zhǔn)標(biāo)準(zhǔn)標(biāo)簽庫有個子庫,但隨著發(fā)展,目前常使用的是他的核心庫標(biāo)簽庫標(biāo)簽庫的前綴下載與導(dǎo)入下載從的網(wǎng)站下載的包。 一、JSP技術(shù)1.jsp腳本和注釋jsp腳本:1) ----- 內(nèi)部的java代碼翻譯到service方法的內(nèi)部2) ----- 會被翻譯成service方法內(nèi)部out.print()3) ---- 會被翻譯成servlet的成員的...
閱讀 3933·2021-09-22 10:02
閱讀 3365·2019-08-30 15:52
閱讀 3060·2019-08-30 12:51
閱讀 753·2019-08-30 11:08
閱讀 2064·2019-08-29 15:18
閱讀 3105·2019-08-29 12:13
閱讀 3591·2019-08-29 11:29
閱讀 1872·2019-08-29 11:13