WebSphere快速入門(13)
發表于:2007-07-01來源:作者:點擊數:
標簽:
第五章 JSP技術 5.1 JSP簡介 JSP(JavaServer Pages)是一種基于Java的腳本技術。在JSP 的眾多優點之中,其中之一是它能將 HTML 編碼從 Web 頁面的業務邏輯中有效地分離出來。用 JSP 訪問可重用的組件,如 Servlet、JavaBean 和基于 Java 的 Web 應用程序。JS
第五章 JSP技術
5.1 JSP簡介
JSP(JavaServer Pages)是一種基于Java的腳本技術。在JSP 的眾多優點之中,其中之一是它能將 HTML 編碼從 Web 頁面的業務邏輯中有效地分離出來。用 JSP 訪問可重用的組件,如 Servlet、JavaBean 和基于 Java 的 Web 應用程序。JSP 還支持在 Web 頁面中直接嵌入 Java 代碼??捎脙煞N方法訪問 JSP 文件:瀏覽器發送 JSP 文件請求、發送至 Servlet 的請求。
1. JSP 文件訪問 Bean 或其它能將生成的動態內容發送到瀏覽器的組件。圖5-1說明了該 JSP 訪問模型。當 Web
服務器接收到一個 JSP 文件請求時,服務器將請求發送至
WebSphere應用服務器。WebSphere應用服務器 對 JSP 文件進行語法分析并生成 Java 源文件(被編譯和執行為 Servlet)。Java 源文件的生成和編譯僅在初次調用 Servlet 時發生,除非已經更新了原始的 JSP 文件。在這種情況下,WebSphere應用服務器 將檢測所做的更新,并在執行它之前重新生成和編譯 Servlet。
圖5-1:瀏覽器發送 JSP 文件請求
2. 發送至 Servlet 的請求生成動態內容,并調用 JSP 文件將內容發送到瀏覽器。圖5-2說明了該訪問模型。該訪問模型使得將內容生成從內容顯示中分離出來更為方便。WebSphere應用服務器 支持 HttpServiceRequest 對象和 HttpServiceResponse 對象的一套新方法。這些方法允許調用的 Servlet 將一個對象放入(通常是一個 Bean)請求對象中,并將該請求傳遞到另一個頁面(通常是一個 JSP 文件)以供顯示。調用的頁面從請求對象中檢索 Bean, 并用 JSP 來生成客戶機端的 HTML。
圖5-2:發送至 Servlet 的請求
5.2 JSP示例
瀏覽器通過一個Web 頁面中的HTML表單請求一個servlet(PopulateBeanServlet),該servlet創建一個名為 dataBean 的DataBean 實例,并調用 JSP 文件將內容發送到瀏覽器。Servlet 示例和 JSP 文件示例說明了啟用內容分離的 JSP 訪問模型。
A. Servlet 是由下列Web 頁面中的 HTML 表單來調用的。
<HTML>
<BODY>
<H1>運行 PopulateBeanServlet</H1>
<P>您是否希望運行 PopulateBeanServlet?
<FORM action="/servlet/PopulateBeanServlet" method="GET">
<INPUT type="SUB
MIT" value="Yes">
<INPUT type="SUBMIT" value="No">
</FORM>
</BODY>
</HTML>
B. 被請求的servlet為PopulateBeanServlet, 其源代碼如下:
/******************************************************************
*Servlet 示例:PopulateBeanServlet.
java
*這個servlet創建一個名為 dataBean 的DataBean 實例,設置dataBean的若干個屬性,
*將dataBean放置在當前“請求”對象中,
*調用 JSP 文件(DisplayData.jsp)來格式化并顯示dataBean的數據
********************************************************************/
import java.io.*;
import java.beans.Beans;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.ejb.CreateException;
public class PopulateBeanServlet extends HttpServlet {
public void Service(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
try {
dataBean = (DataBean) Beans.inst
antiate(this.getClass().getClassLoader(), "DataBean");
}
catch (Exception ex) {
throw new ServletException("Can@#t create BEAN of class DataBean: "
metaData.set
SQL(getSQLString());
}
// Set some Bean properties (content generation)
dataBean.setProp1("Value1");
dataBean.setProp2("Value2");
dataBean.setProp3("Value3");
// To send the Bean to a JSP file for content formatting and display
// 1) 將dataBean放置在當前“請求”對象中,
((com.sun.server.http.HttpServiceRequest) req).setAttribute("dataBean", dataBean);
// 2) 使用callPage 方法調用JSP文件,文件名為DisplayData.jsp,并把請求對象傳遞給JSP。
((com.sun.server.http.HttpServiceResponse) res).callPage("/DisplayData.jsp", req);
} //end of service mehtod
} /* end of class PopulateBeanServlet */
C. 被調用的JSP文件為DisplayData.jsp,其內容如下:
<!-- 該 JSP 文件獲得在請求對象中傳遞的 dataBean,并顯示該 Bean 的屬性。 -->
<html>
<head>
<title>Bean Data Display</title>
</head>
<!-- Get the Bean using the BEAN tag -->
<bean name="dataBean" type="DataBean" introspect="no" create="no" scope="request">
</bean>
<body>
<!-- There are three ways to a
clearcase/" target="_blank" >ccess Bean properties -->
<!-- Using a JSP scriptlet -->
<% out.println("The value of Bean property 1 is " + dataBeans.getProp1());
%>
<!-- Using a JSP expression -->
<p>The value of Bean property 2 is
<%= dataBean.getProp2() %> </p>
<!--Using the INSERT tag -->
<p>The value of Bean property 3 is
<insert bean=dataBean property=prop3 default="No property value" >
</insert></p>
</body>
</html>
原文轉自:http://www.anti-gravitydesign.com