可用等式为:html+java=jsp表示jsp[8]._java jsp
### jsp@3腳本元素
.JSP腳本元素用來插入Java代碼,這些Java代碼將出現在由當前JSP頁面生成的Servlet中。
腳本元素有三種格式:
聲明格式<%! declaration; %>,其作用是把聲明加入到Servlet類(在任何方法之外);
表達式格式<%= expression %>,作用是計算表達式并輸出其結果;
Scriptlet格式<% code %>,作用是把代碼插入到Servlet的service方法。
4.4.1?JSP聲明
JSP聲明用來聲明JSP程序中的變量、實例、方法和類。
聲明是以結尾。在JSP程序中,在使用一個變量或引用一個對象的方法和屬性前,必須先對使用的變量和對象進行聲明。聲明后,你才可以在后面的程序中使用它們。
JSP的聲明可以讓你定義頁面一級的變量以保存信息或定義該JSP頁面可能需要的方法。其內容必須是一個采用page指令所定義的語言編寫和完整有效的聲明。JSP內置對象在聲明元素中不可見,此時聲明的變量作為編譯單元的成員變量處理。
其語法如下:
例如:
注意:
1.編譯JSP時,腳本小程序生成于jspService()方法的內部,而聲明卻生成于jspService()方法之外,與源文件合成一體。使用方式所聲明的變量為全局變量,即表示若同時n個用戶在執行此JSP網頁時將會共享此變量。因此應盡量少用聲明變量,若要使用變量時,請直接在scriptlet之中聲明使用即可。
2.每一個聲明僅在一個頁面中有效,如果你想每個頁面都用到一些聲明,最好把它們寫成一個單獨的JSP頁面或單獨的Java類,然后用或動作元素包含進來。
由于聲明不會有任何輸出,因此它們往往和JSP表達式或腳本小程序結合在一起使用。例如,下面的JSP代碼片斷輸出自從服務器啟動(或Servlet類被改動并重新裝載以來)當前頁面被請求的次數:
自從服務器啟動以來頁面訪問次數為:
4.4.2?JSP表達式
JSP表達式用來計算輸出Java數據,表達式的結果被自動轉換成字符型數據,結果可以作為HTML的內容,顯示在瀏覽器窗口中。JSP表達式包含在“”標記中,不以分號結束,除非在加引號的字符串部分使用分號。開始字符和結束字符之間必須是一個完整合法的Java表達式。可以是復雜的表達式,在處理這個表達式的時候按照從左向右的方式來處理。
其語法如下:
<%= expression %>
例如:
下面的代碼顯示頁面被請求的日期/時間:
當前時間為:<%= new java.util.Date() %>
為簡化這些表達式,JSP預定義了一組可以直接使用的對象變量。內置對象在表達式中可見。對于JSP表達式來說,最重要的幾個內置對象及其類型如下,后面我們將詳細介紹這些內置對象。
(1)request:HttpServletRequest。
(2)response:HttpServletResponse。
(3)session:和request關聯的HttpSession。
(4)out:PrintWriter,用來把輸出發送到客戶端。
例如:
Your hostname: <%= request.getRemoteHost() %>
4.4.3腳本小程序
如果要完成的任務比簡單的表達式復雜時,可以使用JSP腳本小程序(Scriptlet)。腳本小程序中可以包含有效的程序片段,只要是合乎Java本身的標準語法即可。通常我們核心程序都寫在這里,是我們實際編寫的JSP程序的主要部分。
JSP腳本小程序的語法如下:
<% Java Code %>
由于JSP和其他一些嵌入式語言一樣,都會嵌在HTML語言內部使用,所以JSP頁面中是由一段一段的JSP程序嵌在HTML語言里面組成的。腳本小程序能夠包含要用到的變量或方法的聲明和表達式。和JSP表達式一樣,腳本小程序可以訪問所有內置對象,所有的內建對象在小腳本中可見。例如,如果你要向結果頁面輸出內容,可以使用out變量。
String queryData = request.getQueryString();
out.println("Attached GET data: " + queryData);
%>
注意:在程序段中定義的變量是局部變量,且程序段中的“表達式”必須使用“;”作為結束符,程序片段并不局限于一行代碼中。
編譯JSP時,編譯器在jspService()方法中只簡單地不作修改地包含腳本小程序的內容。當Web服務器響應請求時,Java代碼就會運行。在腳本片段周圍可能有純粹的HTML代碼,在這些地方,代碼片段可以使你創建執行代碼的條件,或調用另外的代碼片段。
例如,下面的JSP片斷混合了HTML語言和腳本小程序:
Have a nice day!
Have a lousy day!
上述JSP代碼將被轉換成如下Servlet代碼:
if (Math.random() <0.5) {
out.println("Have a nice day!");
}
Else
{
out.println("Have a lousy day!");
}
### jsp@動作 ?標簽
JSP動作利用XML語法格式的標記來控制Servlet引擎的行為。動作組件用于執行一些標準的常用的JSP頁面。利用JSP動作可以動態地插入文件、重用JavaBean組件、把用戶重定向到另外的頁面、為Java插件生成HTML代碼。
JSP動作元素包括:
jsp:include:當頁面被請求時引入一個文件。
jsp:forward:請求轉到一個新的頁面。
jsp:plugin:根據瀏覽器類型為Java插件生成OBJECT或EMBED標記。
jsp:useBean:尋找或者實例化一個JavaBean。
jsp:setProperty:設置JavaBean的屬性。
jsp:getProperty:輸出某個JavaBean的屬性。
4.5.1?include動作元素
動作元素表示在JSP文件被請求時包含一個靜態的或者動態的文件。
語法:
其中,page="path"表示相對路徑,或者為相對路徑的表達式。flush="true"表示緩沖區滿時會被清空,一般使用flush為true,它默認值是false。
例如:
inc.jsp
test.jsp
Header
Footer
運行結果:4
【例4.5】 下面的JSP頁面把4則新聞摘要插入到 “WhatsNew.jsp”頁面。改變新聞摘要時只需改變new文件夾下的四個具體新聞文件,而主JSP頁面卻可以不作修改:
WhatNews.jsp
What's NewVLINK="#551A8B" ALINK="#FF0000">
What's New at JspNews.com
Here is a summary of our four most recent news stories:
一般而言,不能直接從文件名稱上來判斷一個文件是動態的還是靜態的。但是能夠自行判斷此文件是動態的還是靜態的,于是能同時處理這兩種文件。如果包含的只是靜態文件,那么只是把靜態文件的內容加到JSP網頁中;如果包含的是動態文件,那么把動態文件的輸出加到JSP網頁中。被包含的動態文件和主文件會被JSP Container分別編譯執行。
前面已經介紹過include指令,它是在JSP文件被轉換成Servlet的時候引入文件,而這里的jsp:include動作不同,插入文件的時間是在頁面被請求的時候。jsp:include動作的文件引入時間決定了它的效率要稍微差一點,而且被引用文件不能包含某些JSP代碼(例如不能設置HTTP頭),但它的靈活性卻要好得多。
include指令是在JSP文件執行時被轉換成Servlet的時候,將被包含文件調入到主文件,然后二者一起被JSP容器編譯,產生一個Servlet.
動作是在JSP文件被請求時,被包含文件和主文件分別被JSP容器編譯,產生兩個Servlet,然后將被包含文件的Servlet調入到主文件的Servlet中。因此同樣引入文件,使用include指令要比使用動作的響應速度快。
4.5.2?forword動作元素
將客戶端所發出來的請求,從一個JSP頁面轉交給另一個頁面(可以是一個 HTML文件,JSP 文件,PHP文件,CGI文件,甚至可以是一個Java程序段。
語法:
"}/>
page屬性包含的是一個相對URL。page的值既可以直接給出,也可以在請求的時候動態計算,如下面的例子所示:
有一點要特別注意,標簽之后的程序將不能被執行。
例如
out.println("會被執行!!! ");
%>
out.println("不會執行!!!");
%>
上面這個范例在執行時,會打印出“會被執行!!!”,隨后馬上會轉入到other.jsp的網頁中,至于out.println("不會執行!!! ")將不會被執行。
【例4.6】該實例需要四個文件:login.jsp,test.jsp,ok.htm,no.htm
首先看一下login.jsp
username
password
test.jsp代碼如下:
string username=request.getparameter("username");
if(username.trim().equals("abc"))
{%>
else
{%>
%>
ok.htm和no.htm非常簡單,可以分別寫為:
ok
no
運行效果是當你輸入用戶名為abc時,頁面會自動跳轉到ok.htm頁面,否則跳到no.htm頁面。
4.5.3?plugin動作元素
jsp:plugin動作用來根據瀏覽器的類型,插入通過Java插件運行Java Applet所必需的OBJECT或EMBED元素。
語法:
type="bean|applet"
code="classFileName"
codebase="classFileDirectoryName"
[name="instanceName"]
[align="bottom|top|middle|left|right"]
[height="displsyPixels"]
[width="displsyPixels"]
[hspace="leftRightPixels"]
[vspace="topButtomPixels"]
[jreversion="java的版本"]
[
[]
]
[ 這里是在不能啟動插件的時候,顯示給用戶的文本信息]
Plugin中的各個屬性如下:
(1)type="bean|applet"
插件將執行的對象的類型,必須指定。
(2)code="classFileName"
插件將執行的java類文件的名稱,在名稱中必須包含擴展名,且此文件必須在用"codebase"屬性指明的目錄下。
(3)codebase="classFileDirectoryName"
包含插件將運行的java類的目錄或指相對這個目錄的路徑。
4.5.4. param動作元素
param動作元素用于傳遞參數。我們還可以使用
和一起使用的語法如下:
" flush="true">
jsp:include>
和一起使用的語法如下:
例如:
4.5.5?useBean及setProperty和getProperty動作元素
1.useBean動作元素
動作用來查找或實例化一個JSP頁面使用的JavaBean組件。javaBean是特殊類型的java類,它與普通java類相比主要區別是包含了兩種特殊的方法:setXXX( )(設置屬性值的方法)、getXXX( )(取屬性值的方法)。
在程序中可把邏輯控制、數據庫操作放在javabeans組件中,然后在jsp文件中調用它。這個功能非常有用,因為它使得我們既可以發揮Java組件重用的優勢,同時也避免了損失JSP區別于Servlet的方便性。所以動作幾乎是JSP最重要的用法。
其語法形式:
其中typespec有以下幾種可能的情況:
class="classname" | class="classname" type="typename" | beanname="beanname" type="typename" | type="typename" |
<jsp:useBean id="name" class="package.class" />
注意必須使用class或type,但不能同時使用class和beanname。beanname表示bean的名字,其形式為“a.b.c”。
只有當第一次實例化Bean時才執行Body部分,如果是利用已有的Bean實例則不執行Body部分,jsp:useBean并非總是意味著創建一個新的Bean實例。
獲得Bean實例之后,要修改Bean的屬性既可以通過jsp:setProperty動作進行,也可以在腳本小程序中利用id屬性所命名的對象變量,通過調用該對象的方法顯式地修改其屬性。當說“某個Bean有一個類型為X的屬性foo”時,就意味著“這個類有一個返回值類型為X的getfoo方法,還有一個setfoo方法以X類型的值為參數”。
通過jsp:setProperty和jsp:getProperty修改和提取Bean的屬性。
useBean動作元素屬性如下:
(1)id用來引用Bean實例的變量。如果能夠找到id和scope相同的Bean實例,jsp:useBean動作將使用已有的Bean實例而不是創建新的實例。
(2)class指定Bean的完整包名,表明bean具體是對哪個類的實例化。
(3)scope指定Bean的有效范圍,可取四個值分別為:page,request,session和application。默認值是page,表示該Bean只在當前頁面內可用(保存在當前頁面的PageContext內),有效范圍是當前頁面。request表示該Bean在當前的客戶請求內有效(保存在ServletRequest對象內)。有效范圍在一個單獨客戶請求的生命周期內。session表示該Bean對當前HttpSession內的所有頁面都有效。有效范圍是整個用戶會話的生命周期內。最后,如果取值application,則表示該Bean對所有具有相同ServletContext的頁面都有效。有效范圍是應用的生命周期內。
scope之所以很重要,是因為jsp:useBean只有在不存在具有相同id和scope的對象時才會實例化新的對象;如果已有id和scope都相同的對象則直接使用已有的對象,此時jsp:useBean開始標記和結束標記之間的任何內容都將被忽略。
(4)type指定引用該對象的變量的類型,它必須是Bean類的名字、超類名字、該類所實現的接口名字之一。請記住變量的名字是由id屬性指定的。
(5)beanName指定Bean的名字。如果提供了type屬性和beanName屬性,允許省略class屬性。
2.setProperty動作元素
標簽表示用來設置bean中的屬性值。在JSP表達式或Scriptlet中讀取Bean屬性通過調用相應的getXXX方法實現,或者更一般地,使用jsp:getProperty動作。
可以使用兩種語法實現方式:
(1)在jsp:usebean后使用jsp:setproperty:
在這種方式中,jsp:setproperty將被執行。
(2)jsp:setproperty出現在jsp:usebean標簽內:
在這種方式中,jsp:setproperty只會在新的對象被實例化時才將被執行。
在中的name值應和中的id值相同。我們既可以通過jsp:setProperty動作的value屬性直接提供一個值,也可以通過param屬性聲明Bean的屬性值來指定請求參數,還可以列出Bean屬性表明它的值應該來自請求參數中的同名變量。該動作的含義是使用bean中相應的set()方法設置一個或多個屬性的值,值的來源是通過value屬性明確給出,或者利用request對象中相應的參數。
動作有下面四個屬性:
(1)name用來表明對哪個bean實例執行下面的動作,這個值和動作中定義的id必須對應起來,包括大小寫都必須一致。這個屬性是必須的。
(2)property用來表示要設置哪個屬性。如果property的值是"*",表示用戶在可見的JSP頁面中輸入的全部值,存儲在匹配的bean屬性中。匹配的方法是:bean的屬性名稱必須與輸入框的名字相同。property? property屬性是必需的。它表示要設置哪個屬性。有一個特殊用法:如果property的值是“*”,表示所有名字和Bean屬性名字匹配的請求參數都將被傳遞給相應的屬性set方法。這個屬性也是必須的。
(3)value屬性是可選的。該屬性用來指定Bean屬性的值。字符串數據會在目標類中通過標準的valueOf方法自動轉換成數字、boolean、Boolean、byte、Byte、char、Character。例如,boolean和Boolean類型的屬性值(比如“true”)通過Boolean.valueOf轉換,int和Integer類型的屬性值(比如“42”)通過Integer.valueOf轉換。
value和param不能同時使用,但可以使用其中任意一個。
(4)param屬性是可選的。它指定用哪個請求參數作為Bean屬性的值。如果當前請求沒有參數,則什么事情也不做,系統不會把null傳遞給Bean屬性的set方法。因此,你可以讓Bean自己提供默認屬性值,只有當請求參數明確指定了新值時才修改默認屬性值。
例如,下面的代碼片斷表示:如果存在numItems請求參數的話,把numberOfItems屬性的值設置為請求參數numItems的值;否則什么也不做。
property="numberOfItems"
param="numItems" />
如果同時省略value和param,其效果相當于提供一個param且其值等于property的值。進一步利用這種借助請求參數和屬性名字相同進行自動賦值的思想,你還可以在property(Bean屬性的名字)中指定“*”,然后省略value和param。此時,服務器會查看所有的Bean屬性和請求參數,如果兩者名字相同則自動賦值。
3.getProperty元素
標簽表示獲取bean的屬性的值并將之轉化為一個字符串,然后將其插入到輸出的頁面中。該動作實際是調用了bean的get()方法。
在使用之前,必須用來創建它。不能使用來檢索一個已經被索引了的屬性。
語法如下:
jsp:getProperty有兩個必需的屬性,即:name,表示Bean的名字;property,表示要提取哪個屬性的值。
例如
Number of items:Cost of each:.
.
.
.
.
.
.
### jsp@小結 面試題
本章小結
一個JSP頁面主要由注釋、指令、腳本元素、動作元素的內容組成。
1.注釋包括HTML注釋和JSP隱藏注釋。
2.指令包括:
(1)page:用來定義整個JSP頁面的屬性和相關功能。
(2)include:用來指定JSP文件被編譯時需要插入的資源,可以是文本、代碼、HTML文件或JSP文件。
(3)taglib:頁面使用者用來自定義標簽。
3.腳本元素
(1)聲明:用來定義在程序中使用的實體,它是一段Java代碼,可以聲明變量,也可以聲明方法。格式:? 例如:。
(2)表達式:格式:? 最后是沒有分號的.例如:。
(3)Scriptlet:格式:。
4.在JSP中的動作指令包括:Include、 Forward、 UseBean、 GetProperty、 SetProperty、 Plugin。
(1)include指令:表示包含一個靜態的或者動態的文件。子句能讓你傳遞一個或多個參數給動態文件,也可在一個頁面中使用多個指令來傳遞多個參數給動態文件。
(2)forward指令:表示重定向一個靜態html/jsp的文件,或者是一個程序段。
(3)Plugin指令:用于在瀏覽器中播放或顯示一個對象(典型的就是Applet和Bean),而這種顯示需要瀏覽器的Java插件。一般來說,元素會指定對象是Applet還是Bean,同樣也會指定class的名字和位置,另外還會指定將從哪里下載這個Java插件。
(4)useBean指令:表示用來在JSP頁面中創建一個Bean實例并指定它的名字以及作用范圍。
(5)setProperty指令:用來為一個Bean的屬性賦值。若在jsp:useBean后使用,jsp:setProperty將被執行。若jsp:setProperty出現在jsp:useBean標簽內,jsp:setProperty只會在新的對象被實例化時才將被執行。注意name值應當和useBean中的id值相同。
(6)getProperty指令:表示獲取Bean的屬性的值并將之轉化為一個字符串,然后將其插入到輸出的頁面中。
課后習題
一.填空題
1. JSP文件不需要引入????????????????????類包。
2.一個JSP頁面主要包含?????????????????、???????????????????、????????、???????????????????等成分。
3.三種JSP指令分別是??????????????????、?????????????????????、???。
4.三種腳本元素分別是?????????????????? ??、?????????????????????、?????。
5.jsp:useBean動作指令的作用是?????????。
二.選擇題
1.JSP的默認應用語言是(?? )
A JSP???????????????? B Servlet?????????????? C Java?????????????? D JavaScript
2.下列哪種方式不屬于JSP腳本元素語法(?? )
A ????????????????????????????B
C ????????? D
3.jsp:forward動作的page屬性的作用是(?? )
A 定義JSP文件名??????????????????? ????????B 定義JSP文件的傳入參數
C 定義JSP文件的文件頭信息???????? D 定義JSP文件的相對地址
三.簡答題
1.jsp有哪些頁面成分?作用分別是什么?
2.JSP中動態include與靜態include的區別?
我們都知道在JSP中include有兩種形式,分別是
<%@ include file=” ”%>
<jsp:include page=” ” flush=”true”/>
以下是對include 兩種用法的區別,主要有兩個方面的不同:
1.執行時間上:
<%@ include file=”relativeURI”%> 是在翻譯階段執行
<jsp:include page=”relativeURI” flush=”true” /> 在請求處理階段執行.
2.引入內容的不同:
<%@ include file=”relativeURI”%>引入靜態文本(html,jsp),在JSP頁面被轉化成servlet之前和它融和到一起.
<jsp:include page=”relativeURI” flush=”true” />引入執行頁面或servlet所生成的應答文本.
3.另外在兩種用法中file和page屬性都被解釋為一個相對的URI.如果它以斜杠開頭,那么它就是一個環境相關的路徑.將根據賦給應用程序的URI的前綴進行解釋,如果它不是以斜杠開頭,
那么就是頁面相關的路徑,就根據引入這個文件的頁面所在的路徑進行解釋。
3.jsp有哪些動作元素?作用分別是什么?
4.簡述JSP的幾種注釋方式。
1、jsp有哪些內置對象作用分別是什么
答:JSP共有以下9種基本內置組件(可與ASP的6種內部組件相對應):
request 用戶端請求,此請求會包含來自GET/POST請求的參數
response 網頁傳回用戶端的回應
pageContext 網頁的屬性是在這里管理
session 與請求有關的會話期
application servlet 正在執行的內容
out 用來傳送回應的輸出
config servlet的構架部件
page JSP網頁本身
exception 針對錯誤網頁,未捕捉的例外
2、jsp有哪些動作作用分別是什么答:JSP共有以下6種基本動作
jsp:include:在頁面被請求的時候引入一個文件。
jsp:useBean:尋找或者實例化一個JavaBean。jsp:setProperty:設置JavaBean的屬性。jsp:getProperty:輸出某個JavaBean的屬性。
jsp:forward:把請求轉到一個新的頁面。
jsp:plugin:根據瀏覽器類型為Java插件生成OBJECT或EMBED標記
3、JSP中動態INCLUDE與靜態INCLUDE的區別?
答:動態INCLUDE用jsp:include動作實現
它總是會檢查所含文件中的變化,適合用于包含動態頁面,并且可以帶參數
靜態INCLUDE用include偽碼實現,定不會檢查所含文件的變化,適用于包含靜態頁面
4。JSP的常用指令
isErrorPage(是否能使用Exception對象),isELIgnored(是否忽略表達式)
5、JSP和Servlet有哪些相同點和不同點,他們之間的聯系是什么?答:JSP是Servlet技術的擴展,本質上是Servlet的簡易方式,更強調應用的外表表達。JSP編譯后是"類servlet"。
Servlet和JSP最主要的不同點在于,Servlet的應用邏輯是在Java文件中,并且完全從表示層中的HTML里分離開來。而JSP的情況是Java和HTML可以組合成一個擴展名為.jsp的文件。
JSP側重于視圖,Servlet主要用于控制邏輯。
6。Jsp和Servlet中的請求轉發分別如何實現?
JSP的轉發請求可通過標準動作來完成; Servlet轉發請求可通過forward() 方法來實現。
7.jsp有哪些隱式對象?作用分別是什么?
request request表示HttpServletRequest對象。它包含了有關瀏覽器請求的信息,并且提供了幾個用于獲取cookie, header, 和session數據的有用的方法。
response response表示HttpServletResponse對象,并提供了幾個用于設置送回 瀏覽器的響應的方法(如cookies,頭信息等)
out out 對象是javax.jsp.JspWriter的一個實例,并提供了幾個方法使你能用于向瀏覽器回送輸出結果。
pageContext pageContext表示一個javax.servlet.jsp.PageContext對象。它是用于方便存取各種范圍的名字空間、servlet相關的對象的API,并且包裝了通用的servlet相關功能的方法。
session session表示一個請求的javax.servlet.http.HttpSession對象。Session可以存貯用戶的狀態信息
application applicaton 表示一個javax.servle.ServletContext對象。這有助于查找有關servlet引擎和servlet環境的信息config config表示一個javax.servlet.ServletConfig對象。該對象用于存取servlet實例的初始化參數。
page page表示從該頁面產生的一個servlet實例
exception 表示JSP頁面運行時產生的異常
8.兩種跳轉方式分別是什么?有什么區別?答:有兩種,分別為:
前者頁面不會轉向include所指的頁面,只是顯示該頁的結果,主頁面還是原來的頁面。執行完后還會回來,相當于函數調用。并且可以帶參數.后者完全轉向新頁面,不會再回來。相當于go to 語句。
.
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的可用等式为:html+java=jsp表示jsp[8]._java jsp的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 此安装程序必须使用 java 开发工具包
- 下一篇: 匿名类java的说明_Java8 Lam