一、JSP概覽
a、動態內容模版
b、使用定製的Java代碼擴充HTML
c、被編譯成Servlets
d、可將工作劃分為內容製作和程式開發
(1)JSP請求處理
JSP請求由名為JSPServlet的WebLogic Server Servlet處理,包括:
a、將JSP轉化為Servlet
b、將轉化後的Servlet編譯為class檔案
c、執行JSP
(2)應用設計模型
A、JSP規範描述了一些應用設計模型
B、這四個模型是:
a、Simple Model(簡單模型)
b、Forward Delegation Model
c、Include Delegation Model
d、Decouple Model
二、JSP文法
有兩種JSP文法形式:
(1)標準文法
(2)XML文法
三、JSP Scriptlets
(1) 使用<%和%>添加包含可執行Java代碼的scriptlets
(2)Sciptlets可以使用流量控制
(3)在給定JSP中所有的Sciptlets結合起來必須是一個完整的Java代碼邏輯塊
我們看一下兩個樣本:
if語句使用的樣本:
<% if (userIsLogged){%> <H1>Welcome</H1>you are logged in <%}else{%> <H1>Waring</H1>you must log in<%}%>
瀏覽器輸出:
JSP將根據使用者是否登入問候使用者
For迴圈語句使用的樣本:
<% for(int j=3;j<=3;j<=1;j--){ %> <H<%=j%>>jsps are great!!! </H<%=j%>><%}%>
瀏覽器輸出:
Jsps are great!!!
Jsps are great!!!
Jsps are great!!!
四、JSP Expressions (運算式)
(1)使用<%=和%>執行Java運算式
(2)任何一個Java運算式都是有效
(3)Expressions的內容通常返回到用戶端
Expressions引用變數,方法和對象:
五、JSP Declarations (聲明)
(1) 使用<%!和%>聲明類級的變數和方法
(2)這能夠被整個JSP代碼引用
聲明變數和方法的樣本:
<%! double[] price={12.3,23.4,34.5}; //聲明一個double的數組和返回doubles的方法 double getTotal(){ double total=0.0; for(int j=0;j<prices.length;j++){ total+=prices[j]; //這能夠從expressions,scriptlets和其它聲明中引用 return total;}}%>
五、JSP Actions
(1)Action是在請求時執行的JSP命令
(2)下表列出擴充JSP功能的六個Action標籤
使用useBean action執行個體化一個JavaBean的樣本:
<jsp:useBean id="shoppingCart" class="com.bea.Shoopingcart"/><% shoppingCart.addItem(new CD("U2"));%><%=shoppingCart.getCount()%>
六、JSP Directives
(1)Directives是在編譯時間執行的JSP命令
(2)下面這三個directives能夠改變JSP的行為
Directives使用的樣本:
<%@page import="mypackge.myClassA"%> 引用一個類<%@page errorPage="myErrowPage.jsp"%> 當異常時調用該JSP頁<%page extends="myJSPSuperclass"%> 所要繼承的類<%@include file="myHeaderFile.html"%>包含一個標頭檔<%@taglib uri=myCustomTags.tld prefix=custom%> 載入自己定製的標籤
(3)八個內建對象:
a、Request 對象封裝了用戶端到伺服器的資料。這些資料有客戶提交的資料,也有用戶端的一些配置資訊。比如客戶的IP,主機名稱等。通過getAttribute方法和setAttribute方法頁面獲得伺服器的資料和向request添加資料。可以利用getParameter查看請求參數。也可以查看請求類型,請求的HTTP頭等。
b、Respose 對象從伺服器到用戶端的響應封裝。用來將伺服器的內容寫入用戶端。常用的是getWriter方法。在用戶端列印資料。
c、Out 對象 用來向用戶端列印資料。它就像是response的一支筆。執行具體的列印動作。
d、Session 對象提供伺服器和用戶端的會話。一個session就像是一次對話。對話的內容是使用者的狀態和一些認證資訊。
e、Application 對象。就是一個公用的會話。與session相對。session是每個使用者專屬的。Application 是這些使用者共用的一些資料。
f、Config 提供servlet的一些配置資訊。僅在當前頁有效。
g、pageContext 提供存取所有關於JSP程式執行時所需的屬性和方法。如session application config out。有效範圍為當前頁。這個就像是這些對象的一個大容器。
h、Page 相當於java類中的this。用處不大。表示當前頁面。
(4)使用內建對象
a、HttpServletRequest
<% String account=request.getParameter("accountNumber");%>Your account number is<%=account%>
b、ServletContext
<% String table=application.getInitParameter(tableName); String sql="SELECT * FROM"+tableName; ResultSet rs=Statement.executeQuery(sql);%>
c、ServletConfig
<p> This Web Application requires Version<%=config.getInitParameter("WLS-Version")%>To run correctly.<p>
(5)對象作用範圍
a、pageContext,request,session和application對象都提供了方法,用於在其作用範圍記憶體儲對象。
b、範圍定義了它們的存貨周期和JSPs之間的訪問性
對象
|
生存周期
|
在哪可訪問
|
pageContext
|
到將response返回到使用者或將request傳遞到一個新頁面為止 |
當前頁面 |
request |
到將response返回到使用者為止 |
當前頁面和所有被包含或被傳遞的頁面 |
session |
與使用者的會話相同 |
當前請求和任何來自瀏覽器後續請求(在session存留時間內) |
application |
Web應用生存周期 |
當前和所有後續向同一個Web應用發出的請求 |
(6)在作用範圍記憶體取對象
A、在對象作用範圍內提供以下方法存取對象:
a、setAttribute(String,Object)將一個對象關聯到一個字串,之後可以讀取
b、Object getAttribute(String)通過名字讀取該對象
c、Enumeration getAttributeNames()取得在作用範圍中所有對象的名字
d、void removeAttribute(String)刪除一個屬性
(7) 在JSP頁之間共用request
A、幾個JSP頁能通過使用request對象在JSP頁之間共用對象,從而處理一個請求。
在request上下文中儲存物件的樣本jsp1.jsp:
<% Employee employee1=new Employee(); employee1.setName("John Doe"); request.setAttribute("John",employee);%> <jsp:forward page="jsp2.jsp"/>
從request上下文中取回對象的樣本jsp2.jsp:
<%=((Employee)request.getAttribute("John").getName())%>
(8)、在JSP中使用JavaBeans
A、在商務邏輯或模型資料能夠在JSP之外以JavaBean實現
B、JavaBeans遵循以下這些規則
a、一個無變數的構造方法
b、每個屬性都有ser和get方法
c、應該可序列化
構造Employee的JavaBean簡單樣本:
public class EmployeeJavaBean implementsSerializable{String name;double salary;public EmployeeJavaBean(){name=null;salary=0.0}public void setName(String n){name=n;}public String getName(){return name;}public void setSalary(double s){salary=s;}public double getSalary(){return salary;}}
C、在JSP中使用useBean建立JavaBean執行個體
D、通過使用serProperty和getProperty訪問JavaBean的變數:
執行個體化,初始化和使用JavaBean標籤的樣本:
<jsp:useBean id="employee" class="mypack.EmployeeJavaBean"> <jsp:setProperty name="employee" property="name" value="John Doe"/></jsp:useBean><jsp:setProperty name="employee" property="salary" value="20000"/>Employee:<jsp:getProperty name="employee" property="name">
也可以像下面這樣使用get和set方法:
<% employee.setSalary(employee.getSalary()+10000);%>salary<%=employee.getSalary()%>
E、在預設情況下,你的JavaBean在page作用範圍記憶體放
F、可以使用scope屬性設定它的範圍為page,request,session或application
儲存物件在request上下文中的樣本jsp1.jsp:
<jsp:useBean id="employee" class="myPack.EmployeeJavaBean" scope="request"/><jsp:forward page="jsp2.jsp"/>
從request上下文中取回對象的樣本jsp2.jsp:
<jsp:useBean id="employee"class="mypack.EmployeeJavaBean"scope="request"/>
JSP的另外內容,我們在接下來的部落格中,繼續完善。