国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
了解 Apache Click

了解 Apache Click

使用輕量模型快速編寫 Web 應(yīng)用程序,避免使用復(fù)雜的框架

Nathan A. Good, 高級顧問,自由開發(fā)人員, Enterprise Frameworks

簡介: 本文將介紹 Apache Click,這是一個 Java? Platform, Enterprise Edition (Java EE) Web 應(yīng)用程序框架,可以用它創(chuàng)建 Web 應(yīng)用程序,而不需要使用 Model-View-Controller (MVC) 模式或 JavaServer Pages (JSP)。本文通過示例演示如何顯示簡單的網(wǎng)頁并創(chuàng)建 Web 表單,表單提交的數(shù)據(jù)在另一個網(wǎng)頁上顯示。

發(fā)布日期: 2010 年 5 月 06 日
級別: 初級 其他語言版本: 英文
訪問情況 : 4699 次瀏覽
評論: 0 (查看 | 添加評論 - 登錄)

平均分 (9個評分)
為本文評分

本文中的示例要求安裝 Eclipse 和 Web 應(yīng)用服務(wù)器。這些示例使用 Tomcat 6.0,但是使用 WebSphere? Application Server Community Edition、Jetty 或 Tomcat 的老版本等其他 Web 應(yīng)用服務(wù)器應(yīng)該也可以。如果還沒有安裝 Web 應(yīng)用服務(wù)器,可以通過 參考資料 下載并安裝 Apache Tomcat 6.0 或 WebSphere Application Server Community Edition。

Apache Click 概述

Apache Click 是一個 Web 應(yīng)用程序框架,可以用它快速地構(gòu)建 Java Web 應(yīng)用程序。Apache Click 的目標(biāo)是提供一種無須使用 JSP 或 MVC 框架的構(gòu)建 Web 應(yīng)用程序的方法,這可以簡化 Web 應(yīng)用程序的開發(fā)。Apache Click 采用 Apache License 許可協(xié)議(見 參考資料)。

Apache Click 并不使用復(fù)雜的框架,而是使用 HTML 模板和普通舊式 Java 對象 (POJO)。HTML 模板由 Apache Velocity 模板引擎處理(關(guān)于 Apache Velocity 的更多信息見 參考資料),這使模板盡可能接近標(biāo)準(zhǔn)的 HTML,不需要特殊的標(biāo)記。使用 Velocity 模板不需要學(xué)習(xí)復(fù)雜的語法,讓 Web 開發(fā)人員可以發(fā)揮現(xiàn)有的 HTML 技能。

POJO 繼承由 Apache Click 發(fā)行版提供的基類。Apache Click 提供一個 Page 類和組件類,通過編寫它們的子類實(shí)現(xiàn)每個頁面的處理代碼。這些組件提供開箱即用的功能,可以用它們構(gòu)建 HTML 控件并響應(yīng)事件。

Apache Click 還包含一個用于 mock 測試的 API,可以用它改進(jìn)單元測試、連續(xù)集成構(gòu)建和測試驅(qū)動開發(fā) (TDD)。關(guān)于 Mock API 的更多信息見 參考資料。

Apache Click 組件和事件處理

org.apache.click.Page 類是所有頁面組件的基類。可以使用 Page 基類中的方法處理多種事件,比如頁面初始化 (onInit())、頁面顯示 (onRender()) 和頁面安全檢查 (onSecurityCheck())。在擴(kuò)展 Page 的類中,可以通過覆蓋這些方法提供定制的功能。擴(kuò)展 Page 的每個類還可以包含處理頁面事件的方法。

通過實(shí)現(xiàn) java.io.Serializable 接口并在構(gòu)造方法中調(diào)用 Page 基類的 setStateful() 方法,可以創(chuàng)建有狀態(tài)的頁面(見清單 1)。


清單 1. 在構(gòu)造方法中設(shè)置 stateful 屬性
				    public WelcomePage() {        setStateful(true);    }

Apache Click 提供幾個與 HTML 元素對應(yīng)的控件組件。通過動態(tài)地添加這些控件組件,可以以編程方式構(gòu)建表單。通過使用這些控件,可以在 Java 代碼中以編程方式獲取和設(shè)置 HTML 控件數(shù)據(jù)。

通過使用字段控件(即 TextField、Select)的 setEventListener() 方法,可以在擴(kuò)展 Page 的類上定義一個方法,如果字段中的輸入是有效的,在處理表單期間就會執(zhí)行這個方法。

按鈕和鏈接也提供事件處理??梢栽诒韱紊蟿?chuàng)建新的提交按鈕并把它鏈接到 Page 類中的一個方法,使用的聲明見清單 2。


清單 2. 用 onClick 事件處理方法創(chuàng)建提交按鈕
				Submit submitButton = new Submit("Submit Me", this, "onClick");

在單擊按鈕時,事件被分派給定制的 Page 類的 onClick() 方法。執(zhí)行 onClick() 方法中的所有代碼,包括把數(shù)據(jù)保存到數(shù)據(jù)庫中或轉(zhuǎn)發(fā)給另一個頁面的代碼。

關(guān)于這個 API 的更多信息見 參考資料。

Apache Click 模板

在默認(rèn)情況下,Apache Click 使用 Apache Velocity 模板引擎。根據(jù)一些默認(rèn)的映射規(guī)則,模板自動地與應(yīng)用程序中擴(kuò)展 Page 的類匹配。例如,名為 HelloPage 的頁面類自動地與 Web 項(xiàng)目中的 HTML 文件 hello.html 匹配。名為 HelloWorldPage 的頁面類自動地映射到 helloWorld.html 或 hello-world.html 文件。

如果不喜歡默認(rèn)的頁面映射,可以修改 click.xml 文件,添加自己的定制映射。

除了修改 Velocity 使用的頁面映射外,還可以決定不使用 Velocity 作為模板引擎。Apache Click 允許使用 JSP 顯示頁面,這有助于使用現(xiàn)有的 JSP。

下載 Apache Click

從網(wǎng)站下載 Apache Click(見 參考資料)。下載之后,把壓縮 (.zip) 文件解壓到容易記住的位置。

如果想看看 Apache Click 附帶的示例,可以把 dist 文件夾中的 click-examples.war 文件部署到 Web 應(yīng)用服務(wù)器中。示例包括許多不同的場景,比如構(gòu)建表格、使用不同的控件和使用不同的模板。

下載和解壓文件之后,就可以開始創(chuàng)建包含 Apache Click 庫的 Web 應(yīng)用程序了。

導(dǎo)入 Apache Click

把所需的 Java Archive (JAR) 文件放在 Web 項(xiàng)目中就可以安裝 Apache Click。在 Web 項(xiàng)目中包含 Apache Click 之后,把項(xiàng)目部署到 Web 應(yīng)用服務(wù)器中。

在 Eclipse 中,按以下步驟創(chuàng)建使用 Apache Click 的 Web 應(yīng)用程序:

  1. 從菜單中選擇 New > Other
  2. Select a Wizard 中,選擇 Web / Dynamic Web Project 并單擊 Next
  3. 輸入一個名稱作為 Project Name(例如,MyFirstClick)。
  4. 選擇一個 Target Runtime,比如 Apache Tomcat 6.0。關(guān)于為 Eclipse 配置運(yùn)行時的更多信息見 參考資料。
  5. 單擊 Finish — 其他設(shè)置可以保持默認(rèn)值。

完成這些步驟之后,在 Eclipse 中應(yīng)該有一個新的空 Web 項(xiàng)目(見圖 1)。


圖 1. 空的 Web 項(xiàng)目

現(xiàn)在,可以導(dǎo)入 Apache Click 庫。按以下步驟導(dǎo)入庫:

  1. 單擊 File > Import
  2. 從列表中選擇 General / File System 并單擊 Next。
  3. 瀏覽到解壓 Apache Click 文件的目錄并選擇 dist 目錄。
  4. 在文件列表中,選擇 click-{version}.jar 和 click-{version}-extras.jar 文件(見圖 2)。

    圖 2. 導(dǎo)入 JAR 文件


  5. 確認(rèn)在 Into folder 字段中選擇了 WebContent/WEB-INF/lib 文件夾,然后單擊 Finish

在 WEB-INF 目錄中導(dǎo)入 JAR 文件之后,修改 Web 應(yīng)用程序的 web.xml 文件以包含 ClickServlet,Apache Click 使用這個 servlet 分派事件。配置這個 servlet 之后,就不再需要修改 web.xml 文件了。web.xml 的內(nèi)容見清單 3。


清單 3. web.xml 文件
				<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xmlns="http://java.sun.com/xml/ns/javaee" 		xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 		http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"    id="WebApp_ID" version="2.5">    <display-name>MyFirstClick</display-name>    <servlet>        <servlet-name>ClickServlet</servlet-name>        <servlet-class>org.apache.click.ClickServlet</servlet-class>        <load-on-startup>0</load-on-startup>    </servlet>    <servlet-mapping>        <servlet-name>ClickServlet</servlet-name>        <url-pattern>*.html</url-pattern>    </servlet-mapping>    <welcome-file-list>        <welcome-file>welcome.html</welcome-file>    </welcome-file-list></web-app>

現(xiàn)在創(chuàng)建一個包(比如 com.example.myfirstclick.pages),您的頁面類將放在這里。創(chuàng)建包之后,在 Web 項(xiàng)目的 WEB-INF 文件夾中創(chuàng)建新文件 click.xml。在 click.xml 文件中指定剛才創(chuàng)建的包的名稱,見清單 4。


清單 4. click.xml 文件
				<?xml version="1.0" encoding="UTF-8"?><click-app>    <pages package="com.example.myfirstclick.pages" /></click-app> 

構(gòu)建示例應(yīng)用程序

既然項(xiàng)目已經(jīng)設(shè)置好了,就可以開始編寫擴(kuò)展 Apache Click 類的類了。第一個類擴(kuò)展 Page(所有頁面組件的基類)。通過選擇 File > New > Other 并選擇 Java / Class 在包中創(chuàng)建新的類。一定要輸入 org.apache.click.Page 作為 Superclass。

在新類中添加清單 5 所示的內(nèi)容。


清單 5. WelcomePage
				package com.example.myfirstclick.pages;import org.apache.click.Page;public class WelcomePage extends Page {    // Initialize the value to something    protected String theMessage = "Welcome!";    public WelcomePage() {        // Add the value to the map ("message" = "$message")        addModel("message", theMessage);    }}

創(chuàng)建了 WelcomePage 類之后,需要創(chuàng)建一個 HTML 頁面,它是為瀏覽器提供輸出的模板。因?yàn)?Apache Click 的默認(rèn)模板引擎是 Apache Velocity,HTML 文件與一般的靜態(tài) HTML 頁面相似。

在 Web 項(xiàng)目的 WebContent 文件夾中創(chuàng)建新的 HTML 頁面(名為 welcome.html),添加清單 6 所示的內(nèi)容。


清單 6. welcome.html 文件
				<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>MyFirstClick Welcome</title></head><body><p>$message</p></body></html>

注意 HTML 文件中的 $message 變量。在生成頁面時,Velocity 模板引擎會替換這個變量。ClickServletWelcomePage 類與 welcome.html 文件匹配起來。WelcomePage 類把它的 message 字段初始化為一個值 (Welcome),然后在構(gòu)造方法中通過傳遞變量名(message 映射到 $message)和值(theMessage 字段),使用 addModel() 方法把這個值添加到模塊中。分配給這個字段的值顯示在瀏覽器中。

運(yùn)行示例應(yīng)用程序

創(chuàng)建文件之后,可以以 Web Archive (WAR) 的形式把文件導(dǎo)出到 Tomcat webapps 文件夾,從而試用這個應(yīng)用程序。最簡便的方法是在 Eclipse 中執(zhí)行以下步驟:

  1. 單擊這個項(xiàng)目并選擇 File > Export
  2. 選擇 Web / WAR 文件并單擊 Next。
  3. Destination 字段中,瀏覽到 Tomcat webapps 文件夾。
  4. 確保選擇 Overwrite existing files 并單擊 Finish(見圖 3)。

    圖 3. 以 WAR 的形式導(dǎo)出項(xiàng)目


把 WAR 文件導(dǎo)出到 Tomcat webapps 目錄之后,可以通過在瀏覽器中訪問 http://localhost:8080/MyFirstClick/welcome.html 來瀏覽這個新頁面(如果 Web 應(yīng)用服務(wù)器使用不同的端口,或者 Web 應(yīng)用程序使用不同的名稱,URL 可能有變化)。

修改 WelcomePage 中 message 字段的值,然后把它重新部署到 Web 應(yīng)用服務(wù)器中。如果看到修改后的值,就說明應(yīng)用程序運(yùn)行正常,可以研究更動態(tài)的示例了。

構(gòu)建表單

既然已經(jīng)完成了簡單的歡迎頁面,就可以試試更復(fù)雜的功能了。動態(tài)的網(wǎng)站不僅僅包含只讀的數(shù)據(jù),其中大多數(shù)都需要用戶輸入并使用用戶輸入執(zhí)行某些操作。典型的示例是通過表單接收輸入,然后在另一個網(wǎng)頁上顯示輸入。

對于這個示例,創(chuàng)建另一個擴(kuò)展 Page 的類。把這個新類命名為 InputPage(見清單 7)。


清單 7. InputPage
				package com.example.myfirstclick.pages;import org.apache.click.Page;import org.apache.click.control.Form;import org.apache.click.control.Submit;import org.apache.click.control.TextField;public class InputPage extends Page {    public Form form = new Form();    private TextField nameField;    public InputPage() {        form.setLabelsPosition(Form.POSITION_TOP);        nameField = new TextField("Enter your name");        form.add(nameField);        form.add(new Submit("Submit", this, "onSubmitClick"));    }        public boolean onSubmitClick()    {        SayHelloPage nextPage = (SayHelloPage)getContext().createPage("/sayHello.html");        nextPage.setName(nameField.getValue());                setForward(nextPage);                return false;    }}

這個新類在構(gòu)造方法中創(chuàng)建一個 Form 對象,在其中添加一個用于輸入的字段。然后,添加一個 HTML 提交按鈕和處理方法(onSubmitClick() 方法)。當(dāng)單擊提交按鈕時執(zhí)行這個處理方法,所以應(yīng)該在其中創(chuàng)建下一個頁面。在添加下一個頁面(即 SayHelloPage)之前,代碼無法編譯。

現(xiàn)在,在 Web 項(xiàng)目的 WebContent 文件夾中創(chuàng)建一個新的 HTML 文件并命名為 input.html。在這個頁面上添加一個 $form 變量,它將被替換為 InputPage 類中表單字段的 HTML 輸出。完成之后,input.html 文件應(yīng)該像清單 8 這樣。


清單 8. input.html 文件
				<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>MyFirstClick Input Sample</title></head><body>$form</body></html>

現(xiàn)在,添加顯示輸入的頁面,這個類名為 SayHelloPage,它也擴(kuò)展 org.apache.click.Page。這個新類應(yīng)該像清單 9 這樣。


清單 9. SayHelloPage
				package com.example.myfirstclick.pages;import org.apache.click.Page;public class SayHelloPage extends Page {    private String name;        @Override    public void onInit()    {        super.onInit();                if (name != null)        {            addModel("name", name);        }    }        public void setName(String name) {        this.name = name;    }        }

這個類通過覆蓋 Page 基類的 onInit() 方法設(shè)置頁面上顯示的值。應(yīng)該檢查通過 addModel() 方法添加到模塊中的任意值是否為 null — 如果試圖添加 null 值,它會拋出 IllegalArgumentException。這要求您編寫出在值為 null 時以適當(dāng)方式顯示頁面的代碼。

通過一個公共的 getter 方法 setName() 公開 SayHelloPage 類中的 name 字段。InputPage 中的 onSubmitClick() 事件處理方法在獲得頁面的新實(shí)例之后調(diào)用這個 accessor 方法。

“No path configured...” 錯誤

在我初次運(yùn)行代碼時,從 ClickServlet 產(chǎn)生了一個錯誤,錯誤消息是 “No path configured for Page class: com.example.myfirstclick.pages.SayHelloPage”。原因在于我把 SayHelloPage.class 傳遞給 createPage(),但是沒有在 click.xml 中配置這個頁面。把它改為 /sayHello.html 就恢復(fù)正常了。這是因?yàn)樵谀J(rèn)情況下 Apache Click 映射擴(kuò)展名為 .jsp 和 .htm 的文件,而我選用 .html 作為擴(kuò)展名。

onSubmitClick() 方法使用來自 nameField 控件的值 (nameField.getValue()) 設(shè)置名稱。然后使用 setForward() 方法轉(zhuǎn)移到下一個頁面。結(jié)果是 SayHelloPage 上的 name 字段被填入輸入框中的值并把它放在 $name 中。

現(xiàn)在添加 HTML 文件 sayHello.html,它包含 $name 變量。sayHello.html 的內(nèi)容見清單 10。


清單 10. sayHello.html 頁面
				<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Results</title></head><body><p>Hello, $name!</p></body></html>

在 Web 瀏覽器中訪問 http://localhost:8080/MyFirstClick/input.html 以運(yùn)行這個示例。在文本框中輸入一個值并單擊 Submit?,F(xiàn)在瀏覽器中會顯示這個值。

結(jié)束語

通過使用 Apache Click,可以用輕量模型快速編寫 Web 應(yīng)用程序,不需要使用復(fù)雜的框架。Apache Click 的簡單性讓我們能夠使用自己的面向?qū)ο缶幊虒?shí)踐和模式。默認(rèn)的模板引擎 Velocity 不需要定制的標(biāo)記,讓 HTML 代碼更接近 HTML 規(guī)范的要求。

Apache Click 中的組件和事件模型提供了一種構(gòu)建 HTML 控件和處理事件的方法,非常容易掌握。


參考資料

學(xué)習(xí)

獲得產(chǎn)品和技術(shù)

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
《Velocity Web應(yīng)用指南》中文版
雜東西
Web開發(fā)輕平臺-Tomcat--my world
Tomcat 安全配置與性能優(yōu)化
JSP 的技術(shù)原理
web服務(wù)器與http協(xié)議重點(diǎn)學(xué)習(xí)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服