溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

JSP基礎(chǔ)知識

發(fā)布時間:2020-07-21 06:45:40 來源:網(wǎng)絡(luò) 閱讀:273 作者:Bighead0829 欄目:開發(fā)技術(shù)

JSP
一、概述
Java Server Pages,中文名叫java服務(wù)器頁面,其根本是一個簡化的Servlet設(shè)計。
二、執(zhí)行過程
JSP基礎(chǔ)知識
三、JSP文件結(jié)構(gòu)及主要標(biāo)簽

<%@ page contentType="text/html;charset=UTF-8" %>
<%@ page import="java.util.*“ %>
...
<HTML>
  <BODY>
其他 HTML 語言
<%
  符合JAVA 語法的 JAVA 語句
%>

  其他 HTML 語言

  </BODY>
</HTML>

四、內(nèi)置對象
1、request
request 對象是 javax.servlet.httpServletRequest類型的對象。 該對象代表了客戶端的請求信息,主要用于接受通過HTTP協(xié)議傳送到服務(wù)器的數(shù)據(jù)。(包括頭信息、系統(tǒng)信息、請求方式以及請求參數(shù)等)。request對象的作用域為一次請求。
2、response
response 代表的是對客戶端的響應(yīng),主要是將JSP容器處理過的對象傳回到客戶端。response對象也具有作用域,它只在JSP頁面內(nèi)有效。
3、session
(1)session:從一個客戶打開瀏覽器并連接到服務(wù)器開始,到客戶關(guān)閉瀏覽器離開這個服務(wù)器結(jié)束,被稱為一個會話。當(dāng)一個客戶訪問一個服務(wù)器時,可能會在這個服務(wù)器的幾個頁面之間反復(fù)連接,反復(fù)刷新一個頁面,服務(wù)器應(yīng)當(dāng)通過某種辦法知道這是同一個客戶,這就需要session對象。
(2)session對象的ID:當(dāng)一個客戶首次訪問服務(wù)器上的一個JSP頁面時,JSP引擎產(chǎn)生一個session對象,同時分配一個String類型的ID號,JSP引擎同時將這個ID號發(fā)送到客戶端,存放在Cookie中,這樣session對象和客戶之間就建立了一一對應(yīng)的關(guān)系。當(dāng)客戶再訪問連接該服務(wù)器的其他頁面時,不再分配給客戶新的session對象,直到客戶關(guān)閉瀏覽器后,服務(wù)器端該客戶的session對象才取消,并且和客戶的會話對應(yīng)關(guān)系消失。當(dāng)客戶重新打開瀏覽器再連接到該服務(wù)器時,服務(wù)器為該客戶再創(chuàng)建一個新的session對象。
(3)session對象存在一定時間過期問題,所以存在session中的名值對會在一定時間后失去,可以通過更改session有效時間來避免這種情況。同時編程時盡量避免將大量有效信息存儲在session中,request是一個不錯的替代對象。
4、application
(1)概述:
服務(wù)器啟動后就產(chǎn)生了這個application對象,當(dāng)客戶在所訪問的網(wǎng)站的各個頁面之間瀏覽時,這個application對象都是同一個,直到服務(wù)器關(guān)閉。但是與session不同的是,所有客戶的application對象都是同一個,即所有客戶共享這個內(nèi)置的application對象。
(2)application對象常用方法:
a、public void setAttribute(String key,Object obj): 將參數(shù)Object指定的對象obj添加到application對象中,并為添加的對象指定一個索引關(guān)鍵字。
b、public Object getAttribute(String key): 獲取application對象中含有關(guān)鍵字的對象。
5、out
out 對象用于在Web瀏覽器內(nèi)輸出信息,并且管理應(yīng)用服務(wù)器上的輸出緩沖區(qū)。在使用 out 對象輸出數(shù)據(jù)時,可以對數(shù)據(jù)緩沖區(qū)進行操作,及時清除緩沖區(qū)中的殘余數(shù)據(jù),為其他的輸出讓出緩沖空間。待數(shù)據(jù)輸出完畢后,要及時關(guān)閉輸出流。
6、page
page 對象代表JSP本身,只有在JSP頁面內(nèi)才是合法的。 page隱含對象本質(zhì)上包含當(dāng)前 Servlet接口引用的變量,類似于Java編程中的 this 指針。
7、config
config 對象的主要作用是取得服務(wù)器的配置信息。通過 pageContext對象的 getServletConfig() 方法可以獲取一個config對象。當(dāng)一個Servlet 初始化時,容器把某些信息通過 config對象傳遞給這個 Servlet。 開發(fā)者可以在web.xml 文件中為應(yīng)用程序環(huán)境中的Servlet程序和JSP頁面提供初始化參數(shù)。
8、exception
java.lang.Throwable 的實例,該實例代表其他頁面中的異常和錯誤。只有當(dāng)頁面是錯誤處理頁面,即編譯指令page 的isErrorPage 屬性為true 時,該對象才可以使用。常用的方法有g(shù)etMessage()和printStackTrace()等。
9、pageContext
pageContext 對象的作用是取得任何范圍的參數(shù),通過它可以獲取 JSP頁面的out、request、reponse、session、application 等對象。pageContext對象的創(chuàng)建和初始化都是由容器來完成的,在JSP頁面中可以直接使用 pageContext對象。

五、JSP語法概述

JSP原始代碼中包含了JSP元素和Template(模板) data兩類 ,
Template data指的是JSP引擎不處理的部分,即標(biāo)記<%……%>以外的部分,例如代碼中的HTML的內(nèi)容等 ,這些數(shù)據(jù)會直接傳送到客戶端的瀏覽器
JSP元素則是指將由JSP引擎直接處理的部分,這一部分必須符合JSP語法,否則會導(dǎo)致編譯錯誤。
JSP語法分為三種不同的類型
1、編譯器指令(DIRECTIVE) 例如: <%@ page import=“java.io.*” %>
編譯器指令包括“包含指令”, “頁指令”和“taglib指令”
它們包含在“<%@ %>”卷標(biāo)里。
兩個主要的指令是page與include。
(1)包含指令
include指令:向當(dāng)前頁中插入一個靜態(tài)文件的內(nèi)容。
JSP 語法格式如下:<%@ include file="relativeURL" %> 或<%@ include file="相對位置" %>
(2)頁指令
“Page”指令用于定義JSP文件中的全局屬性。
JSP 語法格式如下:

<%@ page 
[ language="java" ] 
[ extends="package.class" ] 
[import="{package.class | package.*},..." ] 
[ session="true | false" ] 
[ buffer="none | 8kb | sizekb" ] 
[ autoFlush="true | false" ] 
?[ isThreadSafe="true | false" ] 
?[ info="text" ] 
?[ errorPage="relativeURL" ] 
[ contentType="mimeType 
    [;charset=characterSet]" | "text/html
    ; charset=ISO-8859-1" ] 
[ isErrorPage="true | false" ] 
%> 

屬性:
a.language="java"
聲明腳本語言的種類,目前只能用"java" 。
b.import="{package.class | package. },..."
需要導(dǎo)入的Java包的列表,這些包作用于程序段,表達式,以及聲明。下面的包在JSP編譯時已經(jīng)導(dǎo)入了,所以就不需要再指明了:
java.lang.
javax.servlet. javax.servlet.jsp. javax.servlet.http.*
c.errorPage="relativeURL"
設(shè)置處理異常事件的JSP文件。
d.isErrorPage="true | false"
設(shè)置此頁是否為出錯頁,如果被設(shè)置為true,你就能使用exception對象
“<%@ page %>”指令作用于整個JSP頁面,同樣包括靜態(tài)的包含文件。但是“<%@ page %>”指令不能作用于動態(tài)的包含文件,比如 “<jsp:include>”。
可以在一個頁面中用上多個“<%@ page %>”指令,但是其中的屬性只能用一次,不過也有例外,那就是import屬性。因為import屬性和Java中的import語句類似(參照Java Language,import語句引入得是Java語言中的類),所以此屬性就能多用幾次。
(4)taglib指令
JSP語法
<%@ taglib uri="URIToTagLibrary" prefix="tagPrefix" %>
用于引入定制標(biāo)簽庫
屬性
a.uri="URIToTagLibrary"
Uniform Resource Identifier (URI)根據(jù)標(biāo)簽的前綴對自定義的標(biāo)簽進行唯一的命名,URI可以是以下的內(nèi)容:
Uniform Resource Locator (URL), 由 RFC 2396 定義, 可以從以下位置查看 (http://www.hut.fi/u /jkorpela/rfc/2396/full.html)。
?Uniform Resource Name (URN), 由 RFC 2396定義 一個相對或絕對的路徑 可以是標(biāo)簽庫描述文件。
b.prefix="tagPrefix"
表示標(biāo)簽在JSP中的名稱。
在自定義標(biāo)簽之前的前綴,比如,在<public:loop>中的public,如果這里不寫public,那么這就是不合法的。請不要用jsp, jspx, java, javax, servlet, sun, 和sunw做為你的前綴,這些已被Sun公司聲明保留。
2、腳本語法(SCRIPTING)
(1)“HTML注釋”:<!— comments -->
JSP 語法格式如下:
<!-- comment [ <%= expression %> ] --> 或
<!-- 注釋 [<%= 表達式 %> ] -->
這種注釋發(fā)送到客戶端,但不直接顯示,在源代碼中可以查看到。
(2)“隱藏注釋”:<%-- comments --%>
JSP 語法格式: <%-- 注釋 --%>
?不發(fā)送到客戶端。
(3)“聲明”<%!聲明%>
JSP 語法格式如下:<%! declaration; [ declaration; ] ... %> 或<%! 聲明; [聲明; ] ... %>
(4)“表達式”<%=表達式%>
用于在頁面上輸出信息,語法格式如下:<%= expression %> 或<%= 表達式 %>
(5)“腳本段”<% 代碼 %>
JSP 語法格式如下:<% code fragment %> 或<% 代碼 %>
3、動作語法(ACTION) 例如: <jsp:forward>,<jsp:getProperty>,<jsp:include>
動作語法包括<jsp:forward>,<jsp:include>,<jsp:plugin>, <jsp:getProperty>,<jsp:setProperty>和<jsp:useBean>。
(1)<jsp:forword>
JSP 語法格式如下:
a.<jsp:forward page={"relativeURL" | "<%= expression %>"} />
b.<jsp:forward page={"relativeURL" | "<%= expression %>"} >
<jsp:param name="parameterName" value="{parameterValue | <%= expression %>}" />
[<jsp:param … />]
</jsp:forward>
(“[<jsp:param … />]”指可以有多個“<jsp:param/>”標(biāo)記。)
屬性:
a、page="{relativeURL | <%= expression %>}"
這里是一個表達式或是一個字符串用于說明你將要定向的文件或URL。這個文件可以是JSP,程序段,或者其它能夠處理request對象的文件(如asp,cgi,php)。
b.<jsp:param name="parameterName" value="{parameterValue | <%= expression %>}" />
向一個動態(tài)文件發(fā)送一個或多個參數(shù),這個文件必須是動態(tài)文件。如果想傳遞多個參數(shù),可以在一個JSP文件中使用多個“<jsp:param>”;“name”指定參數(shù)名,“value”指定參數(shù)值。
注意:
“<jsp:forward>”標(biāo)簽從一個JSP文件向另一個文件傳遞一個包含用戶請求的request對象?!?lt;jsp:forward>”標(biāo)簽以后的代碼,將不能執(zhí)行。
(2)<jsp:include>
包含一個靜態(tài)或動態(tài)文件.
?JSP 語法格式如下:
a.<jsp:include page="{relativeURL | <%=expression%>}" ? flush="true" />
b.<jsp:include page="{relativeURL | <%=expression %>}" ? flush="true" >
<jsp:param name="parameterName" value="{parameterValue | <%= expression %>}" />
[<jsp:param …/>]
</jsp:include>
(“[<jsp:param … />]”指可以有多個“<jsp:param/>”標(biāo)記。)
屬性:
a.page="{relativeURL | <%=expression %>}"
參數(shù)為一相對路徑,或者是代表相對路徑的表達式。
b.flush="true"
這里必須使用flush="true",不能使用false值。而缺省值為false 。?
(3)<jsp:useBean>
創(chuàng)建一個Bean實例并指定它的名字和作用范圍。
?JSP 語法格式如下:

<jsp:useBean 
? ? ? ? id="beanInstanceName" 
? ? scope="page | request | session | application" 
? ? ? ? { 
? ? ? ? ? ? class="package.class" | 
? ? ? ? ? ? type="package.class" | 
? ? ? ? ? ? class="package.class" type="package.class" | 
? ? ? ? ? ? beanName="{package.class | <%= expression %>}" 
type="package.class" 
? ? ? ? } 
? ? ? ? { 
? ? ? ? ? ? /> | 
? ? ? ? ? ? > other elements </jsp:useBean>
? ? ? ? } 

屬性
a.id="beanInstanceName"
在所定義的范圍中確認Bean的變量,使之能在后面的程序中使用此變量名來分辨不同的Bean ,這個變量名對大小寫敏感,必須符合所使用的腳本語言的規(guī)定,這個規(guī)定在Java Language 規(guī)范已經(jīng)寫明。如果Bean已經(jīng)在別的“<jsp:useBean>”標(biāo)記中創(chuàng)建,則當(dāng)使用這個已經(jīng)創(chuàng)建過Bean時,id的值必須與原來的那個id值一致;否則則意味著創(chuàng)建了同一個類的兩個不同的對象。?
b.scope="page | request | session | application"
Bean存在的范圍以及id變量名的有效范圍。缺省值是page,以下是詳細說明:
page - 能在包含“<jsp:useBean>”元素的JSP文件以及此文件中的所有靜態(tài)包含文件中使用這個Bean,直到頁面執(zhí)行完畢向客戶端發(fā)回響應(yīng)或轉(zhuǎn)到另一個文件為止。
request - 在任何執(zhí)行相同請求的Jsp文件中使用這個Bean,直到頁面執(zhí)行完畢向客戶端發(fā)回響應(yīng)或轉(zhuǎn)到另一個文件為止。能夠使用Request對象訪問這個Bean,比如request.getAttribute(beanInstanceName)。
session - 從創(chuàng)建Bean開始,就能在任何使用相同session的jsp文件中使用這個Bean。這個Bean存在于整個Session生存周期內(nèi),任何在分享此Session的Jsp文件都能使用同一Bean。注意在創(chuàng)建這個Bean的Jsp文件中“<% @ page %>”指令中必須指定“session="true"”。
application - 從創(chuàng)建Bean開始,就能在任何使用相同application的Jsp文件中使用Bean。這個Bean存在于整個application生存周期內(nèi),任何在分享此application的Jsp文件都能使用同一Bean.
c.beanName="{package.class | <%= expression %>}" type="package.class"
使用java.beans.Beans.instantiate方法來從一個class或串行化的模板中實例化一個Bean,同時指定Bean的類型。 Beans.instantiate方法將檢查此名稱是否表示一個類或一個串行化模板。如果這個Bean是被串行化的,那么Beans.instantiate方法將通過使用一個類裝載器讀取串行化格式(類似package.class.ser)。
beanName可以是package和class,也可以是表達式,它的值會傳給Beans.instantiate方法。type的值可以和Bean相同,也可以是它的基類,或者是它所實現(xiàn)的接口。 ?package和 class 名字區(qū)分大小寫。
(4)<jsp:getProperty>
JSP 語法格式如下:
<jsp:getProperty name="beanInstanceName" property="propertyName" />
?屬性:
a.name="beanInstanceName" bean的名字,由<jsp:useBean>指定。
b.property="propertyName" 所指定的Bean的屬性名。
(5)<jsp:setProperty>
設(shè)置Bean的屬性值.
?JSP 語法格式如下:

<jsp:setProperty 
? ? ? ? name="beanInstanceName" 
? ? ? ? { 
? ? ? ? ? ? property= "*" ? | 
? ? ? ? ? ? property="propertyName" [ param="parameterName" ] ? | 
? ? ? ? ? ? property="propertyName" value="{string | <%= expression %>}" 
? ? ? ? } 

a.name="beanInstanceName"
表示已經(jīng)在“<jsp:useBean>”中創(chuàng)建的Bean實例的名字。
b.property="*"
儲存用戶在jsp輸入的所有值,用于匹配Bean中的屬性。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI