Top Banner
JSP 簡簡 張張張 張張張 張張張張張
52

Jsp

Oct 30, 2014

Download

Education

rdandy

 
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Jsp

JSP簡報

張景堯、廖峻鋒應用系統組

Page 2: Jsp

Agenda JSP™ 環境安裝及 Tomcat 介紹 Web Application 介紹 JSP 規格架構與 MVC 樣式 JSP 設計簡介 JSP 及 JavaBeans 之整合與應用 JSP 與 JDBC 定義 JSP 標籤

Page 3: Jsp

安裝 Tomcat 檢查您的系統硬體和軟體規格是否符合 Tomcat的規定 Tomcat 可以安裝在 windows, solaris 和 linux 作業系統 .

必須安裝 Java2 SDK 以上的版本 .

可以從下面所列網站下載 Tomcat: http://jakarta.apache.org

Page 4: Jsp

Tomcat 伺服器 4.0.1 符合 servlet2.3 和 JSP1.2 開發規格 可以使用於獨立伺服器執行 Servlet 和 JSP 也可以整合 Apache WebServer

利用 mod_webapp( 效能較好 ) 利用 Apache 內附的 mod_proxy

佈署描述子定義較嚴謹 (web.xml 比 3.2 版嚴格 ) web.xml 沒寫好可能造成原來程式無法執行。

Tomcat 跟 Apache 一樣是免費的

Page 5: Jsp

環境設定 必須以 Web Application 型式佈署。 將 Web Application 放在 webapps 目錄 :

Tomcat4.0.1: HTML 和 JSP 放置於 TOMCAT_HOME/webapps/

執行 JSP –Tomcat: http//localhost:8080/yourApName/yourPage

Page 6: Jsp

Demo 架設 Tomcat4.0.1 伺服器。 安裝 Web Application 。

Page 7: Jsp

Web Application 是什麼 一群 servlets 、 html pages 、 classes 和其它相關資源的集合。

這些資源在 Web Server 上提供了完整而特定的服務。

好的 Web Application 應該不經改寫就能在各種 Container 上執行。

Page 8: Jsp

為 Web Application 命名 設計 Web Application 時,首先要先幫這個 applic

ation 取個名字,如 testAp 。 到時候使用者利用 http://HostName:port/testAp/ 來執行這個 web application 。

Page 9: Jsp

註冊 Web Application 要在 container 上執行 web application ,首先要註冊。 因為你要告訴 server 「當 URI 包含了 /test 時,去執行位於 c:\tomcat\webapps\test\ 的這一個 web application 。 」

Page 10: Jsp

註冊 Web Application( 續 ) 在 Tomcat4 中,只要你把你的 web application 放在 c:\tomcat\webapps\ 下,重開時它會自動把這個目錄的所有 web application 註冊。

如果不想重開,也可利用 /manager 系列 URL 指令來做登記動作。

Page 11: Jsp

Web Application 的組成份子 Servlets 及 JSPs 公用程式類別檔 (classes 或 jar) 靜態檔案 (html 、圖檔或音樂 ) Applets web.xml( 佈署描述檔 )

Page 12: Jsp

典型的 Web Application 結構 /

放一般可視文件或 JSP /WEB-INF/classes/

放 classes 檔如 Servlet 或 JavaBean /WEB-INF/lib/

放 jar ,也就是壓成一個 .jar 後,的 Servlet 或 Classes 。

/WEB-INF/web.xml WebApplication 設定檔。

Page 13: Jsp

典型的 Web Application 結構 -2 除了 /WEB-INF 對於使用者是不可見之外,其它的和一般的 Web 文件放置結都一樣。

WEB-INF 中有一個必備的佈署描述檔 web.xml ,描述整個應用程式的架構及設定。

lib 中應放置 .jar 檔案,而 classes 中放置未壓成jar 的 servlet 或我們自己寫的一些 utilities 。

Page 14: Jsp

web.xml 在實作 Servlet2.3 及 JSP1.2 的 Web Container 中 w

eb.xml 的重要性大增,如果 web.xml 沒設好,可能造成原有的 web Ap 完全不能運作。

Page 15: Jsp

JSP 架構

Page 16: Jsp

JSP 應用程式設計

Page 17: Jsp

MVC 樣式 (Pattern)

Page 18: Jsp

MVC 樣式 (Pattern) 應用程式層 (Model)

將運算方法和資料封裝並與展示層分離 例如 : 資料庫查詢 , 處理訂單

資料展示層 (View) 收集使用者輸入資料 顯示應用程式處理完成之資料 顯示標籤 : HTML ,XML or Java Applet

商業邏輯控制層 (Control) 應用程式流程處理 決定由展示層傳來之使用者需求並回應

Page 19: Jsp

JSP 是什麼 ? 具備回傳動態文件內容給瀏覽器功能 包含 HTML,XHTML, XML, 程式碼 , 和自訂 JSP 標籤 (HTML and XML tags) 功能並允許存取 Java元件如 : JavaBeans

Page 20: Jsp

JSP 程式設計 JSP 程式包含 :

固定之文字內容 動態資料標籤 :

• Directive

• Scripting element

• Standard action

• Custom tag

Page 21: Jsp

JSP 程式設計方法 JSP 1.2 的規格提供應用程式設計模型

提供 session 的管理 透過 HTTP協定的 request 和 response 與瀏覽器互動交談

使用 Java 當作它的程式語言 使用 JavaBeans 當作它的元件模型

Page 22: Jsp

JSP 好處 顯示內容和程式商業邏輯可透過自己定義標籤將其與畫面分離

簡化開發 JSP JavaBeans 和自訂 JSP 標籤

透過使用軟體元件讓您設計的程式可以重複使用 當 JSP 中程式有變動會自動重新編譯 編輯修改容易 與作業系統平台無關

Page 23: Jsp

JSP 程式如何運作 “JSP page”

混合文字 , Script 和 directives 文字可以是 text/ html, text/ xml 或 text/ plain

“JSP 引擎” 編譯 JSP page 成 servlet 執行 servlet 內的 service() 方法 傳送文字內容回給呼叫者

JSP Page 編譯一次 執行很多次

Page 24: Jsp

JSP 設計方法

Page 25: Jsp

Demo 一個簡單的 JSP Page HelloWorld.jsp

Page 26: Jsp

‘out’變數 屬於 javax.servlet.jsp.JspWriter

被利用來傳送文字資料給客戶端 JspWriter 資料會被緩衝 , 放在伺服器內

因為我們可能傳送或轉送 request 轉送 (redirect) 會因為資料已經傳到客戶端而失效

Page 27: Jsp

輸出製作 JSP page 內任何文字會自動寫入到瀏覽器

out. write("< book name= 'JSP' />"); Scriptlet 可以直接使用‘ out’ 變數

<% out. write(“ Homer Rules”); %> 可以使用下列表示法輸出文字資料

<value> value is <%= b. getValue() %></ value> 產生out. print("< value> value is "+b. getValue() +"</ value

>")

Page 28: Jsp

Scriptlets <% /* code goes here*/ %>

產生 servlet 時會被拷貝到 _jspService 的方法中 範例

<% int j; %><% for (j=0; j<3; j++) {%><value><% out. print(""+ j); %></value><% } %>

輸出結果• <value> 0</ value>• <value> 1</ value>• <value> 2</ value>

Page 29: Jsp

'include' Directive 使用在要包含其他資源時

<%@ include file=“somefile. txt” %>

<%@ include file=“ somefile. jsp” %>

編譯階段就會包含進入程式中 在編譯階段資料實體就會包含進入程式中 也可以在‘ run- time’ 做如使用 RequestDispatcher 將資料轉給其他程式使用

Page 30: Jsp

JSP Page 中的 Actions “JSP engine” 所要完成的工作 系統標準 Action 及自己定義 Action

系統標準 Action 必須由所有“ JSP engine” 實作 自行定義 Action 必須定義 tag libraries

有名稱及屬性<jsp: useBean id=“ someName” class=“ someclass” />

<jsp: setProperty name=“ someName” property=“*” />

Page 31: Jsp

什麼是 JavaBeans? 以 Java ™技術為基礎的元件 具備可攜性與作業平台無關可重複使用之特性 必須有一個不提供參數之 public constructor 屬性一般都不是 public, 必須透過下列 public meth

od存取資料 getXXX() isXXX()- 當讀取 boolean值時 setXXX()

Page 32: Jsp

JSP 與 JavaBeans

Page 33: Jsp

使用 JavaBeans元件- 系統標準 Action 做法 使用 jsp:useBean

<jsp:useBean id="clock" class=“calendar.JspCalendar” /> <%calendar.JspCalendar clock= new calendar.JspCalendar();%>

讀取 Bean 的屬性 <jsp:getProperty name=“customer” property=“name” /> <%=customer.getName() %>

設定 Bean 的屬性 <jsp:setProperty name=“customer” property=“name” param=“na

me” /> <%=customer.setName("username") %>

Page 34: Jsp

Bean 的屬性 Bean 的命名規則依照一般通用法則

屬性名稱必須以小寫開頭String startDate

屬性設定及取得方法取名時開頭必須大寫String getStartDate()

void setStartDate( String)

Page 35: Jsp

在 JSP 內使用“ Java 物件” 使用 script

<% java.util.Date dte =new java.util.Date(); %>

使用 actions<jsp: useBean id="dte" class="java.util.Date" />

useBean 可以指定物件生命週期 <jsp: useBean id="dte" class="java.util.Date" scope

="session" /> 範圍 scope 可為下列其中之一

• page, request, session, application

Page 36: Jsp

jsp: usebean語法 如果 bean 的物件被產生的話 [body] 會被執行

<jsp: useBean id=“Name” class=“classname” scope=“page|request|session|application”>

[body]</ jsp: useBean>

// or – if bean has no body<jsp: useBean id=“Name” class=“classname” scope=“page|request|s

ession|application” /> 範例

<jsp: useBean id=“Diary” class=“com.develop.jsp.DiaryTable” scope=“page” />

Page 37: Jsp

Bean 的執行 <jsp: useBean id="xxx" class="yyy" scope="zzz"/> “JSP 引擎” 會根據屬性值找到 bean 的位置並執行 定義變數名稱 : ‘id’ 如果在系統內已存在物件

直接讀取 Session 或 Request範圍內之物件 如果沒有找到物件

製造產生物件 將變數和物件關聯 將物件儲存於適當的變數範圍 useBean 內程式會被執行

Page 38: Jsp

Page範圍內的 Beans bean 的生命週期範圍 scope=“page”

當每一次存取 page,bean物件就會被製作產生 Bean 可以在先前產生 會儲存於 pageContext 中 範例:

<jsp: useBean id=“logonBean” class=“ewebjava.LogonBean” scope=“page”>

</ jsp: useBean>

Page 39: Jsp

Request範圍內的 Beans bean 的生命週期範圍 scope=“request”

當 request被觸發時 ,bean物件就會被製作產生 Bean 會被儲存於 request 中 (ServletRequest. setAttribute) 當 JSP page 中已有 Bean存在而被重新導向 (forward)新

JSPpage 時此時 Bean 可以被再利用 範例:

<jsp: useBean id=“logonBean” class=“ewebjava.LogonBean” scope=“request”>

</ jsp: useBean>

Page 40: Jsp

Session範圍內的 Beans bean 的生命週期範圍 scope=“session”

當每一次 session 開始後 ,bean物件就會被製作產生 儲存於 session物件 範例:

<jsp: useBean id=“logonBean” class=“ewebjava.LogonBean” scope=“session”>

</ jsp: useBean>

Page 41: Jsp

Application範圍內的 Beans bean 的生命週期範圍 scope=“application”

當 Web 伺服器載入 Bean 時物件就會被製作產生 Bean 可以在先前產生 Bean儲存於 application物件 範例:

<jsp: useBean id=“logonBean” class=“ewebjava.LogonBean” scope=“application”>

</ jsp: useBean>

Page 42: Jsp

Demo 使用 JavaBean儲存表單資料。

Page 43: Jsp

JSP+Bean(JDBC)

Page 44: Jsp

JDBC-指定 JDBC Driver 指定 JDBC Driver

程式碼 :Class.forName(“DRIVER_NAME”).newInstance();

DRIVER_NAME 代表你資料庫的 JDBC 類別全名。如 :” com.informix.jdbc.IfxDriver”

為了使程式有彈性 DRIVER_NAME 可寫在屬性檔中。 newInstance() 最好都加,因為有的 JVM 實作強迫要有

這一行。

Page 45: Jsp

JDBC-建立 Connection 建立 Connection

程式碼 :Connection conn=DriveManager.getConnection(“URL”) ;

URL 在 Informix 上使用的話是” jdbc:informix-sqli://(IP): (PORT)/(DBNAME):INFORMIXSERVER=(SERVERNAME);user=(USERNAME);password=(PASSWORD)”

Page 46: Jsp

JDBC-建立 Statement 建立 Statement

程式碼 :Statement stmt= Connection.createStatement(int resultSetType,int resultSetConcurrency) ;

resultSetType • TYPE_FORWARD_ONLY 告訴系統讀取資料列時只向前捲動。• TYPE_SCROLL_SENSITIVE 修改後馬上反映在 ResultSet 中。• TYPE_SCROLL_INSENSITIVE 修改後不反映在 ResultSet 中,除非重

開 statement 。 resultSetConcurrency

• CONCUR_READ_ONLY 告訴系統將不修改 ResutlSet• CONCUR_UPDATABLE 告訴系統將會修改 ResutlSet• Default

如果不加任何參數,預設是 TYPE_FORWARD_ONLY 及 CONCUR_READ_ONLY 。

Page 47: Jsp

JDBC-下 SQL 下 SQL

程式碼 :stmt.executeQuery(SQL); 或 stmt.executeUpdate(SQL) ;

SQL:代表你要下的 SQL 如果只是查詢,則使用 executeQuery 就好了,傳回 Re

sultSet 。 如果是 Update ,則使用 executeUpdate ,傳回受影響

的行數。

Page 48: Jsp

JDBC- 處理 ResutlSet 處理 ResutlSet afterLast();beforeFirst();first();last();absolute(n);relat

ive(n);isLast();isFirst();getRow();next();previous(); 增加效能

事先告知系統要 fetch 的方向 ResultSet.setFetchDirection(FETCH_FORWARD 或 FETCH_REVERSE); 。

事先告知系統要先抓 n 筆。 ResultSet.setFetchSize(n); 。 要得到行數可以先 last() 再 getRow();

Page 49: Jsp

JDBC-關閉資料庫 關閉資料庫

Conn.close(); 一般加在 finally 中。 範例

if(conn!=null)

{try{conn.close();}

catch(SQLException e)

{e.printStackTrace();}

}

Page 50: Jsp

Tag函式庫簡介 JSP 提供一組事先定義好的標籤

<jsp: useBean …/> 看起來像 XML 標籤 自訂標籤會對應一支 Java 程式 可以定義出新標籤

可以由 JSP page編輯人員所使用 當標籤被使用時“ Java 程式碼”會被執行

能夠將 Java 程式碼跟 JSP 內容分離使用 將畫面資料及程式邏輯分離

Page 51: Jsp

Tag函式庫可以做… 處理 SQL 指令 分析 XML語法及輸出 HTML 每次 request 都會被呼叫來初始化 script變數 將 ResultSet 中資料反覆找出輸出成 HTML 的表格

Page 52: Jsp

總結 透過Web Application觀念部署你的應用軟體 JSP ™技術能夠讓非程式設計人員開發動態網頁內容 JSP ™技術允許程式設計人員及網頁設計人員分工合作製作 Web 應用程式

JSP ™ 使用 Java ™ 程式語言當作它的 scriptlet JSP ™技術鼓勵您整合使用 JavaBeans™元件技術 自定標籤函式 (tag libraries)允許您使用自己定義標籤撰

寫屬於你的標籤 Java 程式以取代複雜的程式邏輯