530 likes | 815 Views
JSP 簡報. 張景堯、廖峻鋒 應用系統組. Agenda. JSP™ 環境安裝及 Tomcat 介紹 Web Application 介紹 JSP 規格架構與 MVC 樣式 JSP 設計簡介 JSP 及 JavaBeans 之整合與應用 JSP 與 JDBC 定義 JSP 標籤. 安裝 Tomcat. 檢查您的系統硬體和軟體規格是否符合 Tomcat 的規定 Tomcat 可以安裝在 windows, solaris 和 linux 作業系統 . 必須安裝 Java2 SDK 以上的版本 . 可以從下面所列網站下載 Tomcat:
E N D
JSP簡報 張景堯、廖峻鋒 應用系統組
Agenda • JSP™環境安裝及Tomcat介紹 • Web Application介紹 • JSP規格架構與MVC樣式 • JSP設計簡介 • JSP及JavaBeans之整合與應用 • JSP與JDBC • 定義JSP標籤
安裝Tomcat • 檢查您的系統硬體和軟體規格是否符合Tomcat的規定 • Tomcat 可以安裝在windows, solaris 和linux 作業系統. • 必須安裝Java2 SDK 以上的版本. • 可以從下面所列網站下載Tomcat: • http://jakarta.apache.org
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一樣是免費的
環境設定 • 必須以Web Application型式佈署。 • 將Web Application放在webapps 目錄: • Tomcat4.0.1: HTML 和JSP 放置於TOMCAT_HOME/webapps/ • 執行JSP –Tomcat: • http//localhost:8080/yourApName/yourPage
Demo • 架設Tomcat4.0.1伺服器。 • 安裝Web Application。
Web Application是什麼 • 一群servlets、html pages、classes和其它相關資源的集合。 • 這些資源在Web Server上提供了完整而特定的服務。 • 好的Web Application應該不經改寫就能在各種Container上執行。
為Web Application命名 • 設計Web Application時,首先要先幫這個application取個名字,如testAp。 • 到時候使用者利用http://HostName:port/testAp/來執行這個web application。
註冊Web Application • 要在container上執行web application,首先要註冊。 • 因為你要告訴server「當URI包含了/test時,去執行位於c:\tomcat\webapps\test\的這一個web application。 」
註冊Web Application(續) • 在Tomcat4中,只要你把你的web application放在c:\tomcat\webapps\下,重開時它會自動把這個目錄的所有web application註冊。 • 如果不想重開,也可利用/manager系列URL指令來做登記動作。
Web Application的組成份子 • Servlets及JSPs • 公用程式類別檔(classes或jar) • 靜態檔案(html、圖檔或音樂) • Applets • web.xml(佈署描述檔)
典型的Web Application結構 • / • 放一般可視文件或JSP • /WEB-INF/classes/ • 放classes檔如Servlet或JavaBean • /WEB-INF/lib/ • 放jar,也就是壓成一個.jar後,的Servlet或Classes。 • /WEB-INF/web.xml • WebApplication設定檔。
典型的Web Application結構-2 • 除了/WEB-INF 對於使用者是不可見之外,其它的和一般的Web 文件放置結都一樣。 • WEB-INF 中有一個必備的佈署描述檔web.xml,描述整個應用程式的架構及設定。 • lib 中應放置.jar 檔案,而classes 中放置未壓成jar 的servlet 或我們自己寫的一些utilities。
web.xml • 在實作Servlet2.3及JSP1.2的Web Container中web.xml的重要性大增,如果web.xml沒設好,可能造成原有的web Ap完全不能運作。
MVC 樣式(Pattern) • 應用程式層(Model) • 將運算方法和資料封裝並與展示層分離 • 例如:資料庫查詢,處理訂單 • 資料展示層(View) • 收集使用者輸入資料 • 顯示應用程式處理完成之資料 • 顯示標籤: HTML ,XML or Java Applet • 商業邏輯控制層(Control) • 應用程式流程處理 • 決定由展示層傳來之使用者需求並回應
JSP 是什麼? • 具備回傳動態文件內容給瀏覽器功能 • 包含HTML,XHTML, XML, 程式碼, 和自訂JSP 標籤(HTML and XML tags) 功能並允許存取Java元件如: JavaBeans
JSP程式設計 • JSP程式包含: • 固定之文字內容 • 動態資料標籤: • Directive • Scripting element • Standard action • Custom tag
JSP 程式設計方法 • JSP 1.2 的規格提供應用程式設計模型 • 提供session的管理 • 透過HTTP協定的request和response與瀏覽器互動交談 • 使用Java 當作它的程式語言 • 使用JavaBeans當作它的元件模型
JSP 好處 • 顯示內容和程式商業邏輯可透過自己定義標籤將其與畫面分離 • 簡化開發JSP • JavaBeans 和自訂JSP 標籤 • 透過使用軟體元件讓您設計的程式可以重複使用 • 當JSP中程式有變動會自動重新編譯 • 編輯修改容易 • 與作業系統平台無關
JSP程式如何運作 • “JSP page” • 混合文字, Script 和directives • 文字可以是text/ html, text/ xml 或text/ plain • “JSP 引擎” • 編譯 JSP page 成servlet • 執行servlet 內的service() 方法 • 傳送文字內容回給呼叫者 • JSP Page • 編譯一次 • 執行很多次
Demo • 一個簡單的JSP Page HelloWorld.jsp
‘out’變數 • 屬於javax.servlet.jsp.JspWriter • 被利用來傳送文字資料給客戶端 • JspWriter 資料會被緩衝,放在伺服器內 • 因為我們可能傳送或轉送request • 轉送(redirect)會因為資料已經傳到客戶端而失效
輸出製作 • 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>")
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>
'include' Directive • 使用在要包含其他資源時 <%@ include file=“somefile. txt” %> <%@ include file=“ somefile. jsp” %> • 編譯階段就會包含進入程式中 • 在編譯階段資料實體就會包含進入程式中 • 也可以在‘run- time’做如使用RequestDispatcher 將資料轉給其他程式使用
JSP Page 中的Actions • “JSP engine”所要完成的工作 • 系統標準Action及自己定義Action • 系統標準Action必須由所有“JSP engine” 實作 • 自行定義Action 必須定義tag libraries • 有名稱及屬性 <jsp: useBean id=“ someName” class=“ someclass” /> <jsp: setProperty name=“ someName” property=“*” />
什麼是JavaBeans? • 以Java ™技術為基礎的元件 • 具備可攜性與作業平台無關可重複使用之特性 • 必須有一個不提供參數之public constructor • 屬性一般都不是public,必須透過下列public method存取資料 • getXXX() • isXXX()-當讀取boolean值時 • setXXX()
使用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=“name” /> • <%=customer.setName("username") %>
Bean的屬性 • Bean的命名規則依照一般通用法則 • 屬性名稱必須以小寫開頭 String startDate • 屬性設定及取得方法取名時開頭必須大寫 String getStartDate() void setStartDate( String)
在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
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|session|application” /> • 範例 <jsp: useBean id=“Diary” class=“com.develop.jsp.DiaryTable” scope=“page” />
Bean的執行 • <jsp: useBean id="xxx" class="yyy" scope="zzz"/> • “JSP 引擎” 會根據屬性值找到bean的位置並執行 • 定義變數名稱: ‘id’ • 如果在系統內已存在物件 • 直接讀取Session或Request範圍內之物件 • 如果沒有找到物件 • 製造產生物件 • 將變數和物件關聯 • 將物件儲存於適當的變數範圍 • useBean內程式會被執行
Page範圍內的Beans • bean的生命週期範圍scope=“page” • 當每一次存取page,bean物件就會被製作產生 • Bean可以在先前產生 • 會儲存於pageContext 中 • 範例: <jsp: useBean id=“logonBean” class=“ewebjava.LogonBean” scope=“page”> … </ jsp: useBean>
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>
Session範圍內的Beans • bean的生命週期範圍scope=“session” • 當每一次session開始後,bean物件就會被製作產生 • 儲存於session物件 • 範例: <jsp: useBean id=“logonBean” class=“ewebjava.LogonBean” scope=“session”> … </ jsp: useBean>
Application範圍內的Beans • bean的生命週期範圍scope=“application” • 當Web伺服器載入Bean時物件就會被製作產生 • Bean 可以在先前產生 • Bean儲存於application物件 • 範例: <jsp: useBean id=“logonBean” class=“ewebjava.LogonBean” scope=“application”> … </ jsp: useBean>
Demo • 使用JavaBean儲存表單資料。
JDBC-指定JDBC Driver • 指定JDBC Driver • 程式碼:Class.forName(“DRIVER_NAME”).newInstance(); • DRIVER_NAME代表你資料庫的JDBC類別全名。如:” com.informix.jdbc.IfxDriver” • 為了使程式有彈性DRIVER_NAME可寫在屬性檔中。 • newInstance()最好都加,因為有的JVM實作強迫要有這一行。
JDBC-建立Connection • 建立Connection • 程式碼:Connection conn=DriveManager.getConnection(“URL”) ; • URL在Informix上使用的話是” jdbc:informix-sqli://(IP): (PORT)/(DBNAME):INFORMIXSERVER=(SERVERNAME);user=(USERNAME);password=(PASSWORD)”
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。
JDBC-下SQL • 下SQL • 程式碼:stmt.executeQuery(SQL);或stmt.executeUpdate(SQL) ; • SQL:代表你要下的SQL • 如果只是查詢,則使用executeQuery就好了,傳回ResultSet。 • 如果是Update,則使用executeUpdate,傳回受影響的行數。
JDBC-處理ResutlSet • 處理ResutlSet • afterLast();beforeFirst();first();last();absolute(n);relative(n);isLast();isFirst();getRow();next();previous(); • 增加效能 • 事先告知系統要fetch的方向ResultSet.setFetchDirection(FETCH_FORWARD或FETCH_REVERSE);。 • 事先告知系統要先抓n筆。ResultSet.setFetchSize(n);。 • 要得到行數可以先last()再getRow();
JDBC-關閉資料庫 • 關閉資料庫 • Conn.close(); • 一般加在finally中。 • 範例 if(conn!=null) { try{conn.close();} catch(SQLException e) {e.printStackTrace();} }
Tag函式庫簡介 • JSP 提供一組事先定義好的標籤 • <jsp: useBean …/> • 看起來像XML標籤 • 自訂標籤會對應一支Java程式 • 可以定義出新標籤 • 可以由JSP page編輯人員所使用 • 當標籤被使用時“Java 程式碼”會被執行 • 能夠將Java程式碼跟JSP內容分離使用 • 將畫面資料及程式邏輯分離