看看現存的Java web應用程序框架,無一例外的要求花費大量的時間與精力后才可投入生產。對于大多數開發人員來說想要的東西很簡單:友好,易于學習并且還具有生產力。因此我們開發了JSPX。
JSPX的主要目標就是打造成為一個“友好的開發者”框架。因為JSPX只基于標準的HTML標簽和簡單的Java POJO:
1. JSPX易于學習。我們已經做到讓一些只有HTML和Java基礎,而對其它框架一無所知的開發新手在很短的時間內就上手投入生產。
2. 開箱即用(out of the box)的組件比如說DataTable,ListTable,Validators和Capatcha已經非常強大的,對于一般的需求綽綽有余。
3. 通過Java API來利用聲明好的代碼來與HTML上那些聲明好的控件進行交互,是JSPX框架的核心。
聲明代碼是如何使得JSPX與眾不同呢?
JSPX已經足夠智能——你無需告訴它怎么做,它就已經知道了你的意圖。原因就在于你只需要在HTML的頁面上聲明一些屬性,從而來改變行為結果。比如說吧,有一個DataTable組件,你把它的“AutoBind”屬性設置為“True”后,它會自動的連上數據庫去獲取數據填充表格,不需要任何Java代碼。
下面的就是DataTable的實例:

現在我們來個關于HelloWorld的QuickStart。用JSPX開發“HelloWorld”非常簡單。只需要三步:
1. 配置web.xml文件。我們得注冊兩個servlets并且選擇你的URL pattern:
Xml代碼

- <servlet>
- <display-name>JspxHandler</display-name>
- <servlet-name>JspxHandler</servlet-name>
- <servlet-class>eg.java.net.web.jspx.engine.RequestHandler</servlet-class>
- </servlet>
-
- <servlet>
- <display-name>ResourceHandler</display-name>
- <servlet-name>ResourceHandler</servlet-name>
- <servlet-class>eg.java.net.web.jspx.engine.ResourceHandler</servlet-class>
- </servlet>
-
- <servlet-mapping>
- <servlet-name>JspxHandler</servlet-name>
- <url-pattern>*.jspx</url-pattern>
- </servlet-mapping>
-
- <servlet-mapping>
- <servlet-name>ResourceHandler</servlet-name>
- <url-pattern>/jspxEmbededResources/*</url-pattern>
- </servlet-mapping>
<servlet>
<display-name>JspxHandler</display-name>
<servlet-name>JspxHandler</servlet-name>
<servlet-class>eg.java.net.web.jspx.engine.RequestHandler</servlet-class>
</servlet>
<servlet>
<display-name>ResourceHandler</display-name>
<servlet-name>ResourceHandler</servlet-name>
<servlet-class>eg.java.net.web.jspx.engine.ResourceHandler</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>JspxHandler</servlet-name>
<url-pattern>*.jspx</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>ResourceHandler</servlet-name>
<url-pattern>/jspxEmbededResources/*</url-pattern>
</servlet-mapping>
2. 創建的HTML文件的擴展名就是你剛才選擇的URL pattern。比如說,現在咱們在WebRoot文件夾下創建一個叫FirstPage.jspx的HTML文件:
Html代碼

- <page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:noNamespaceSchemaLocation="http://jspx-bay.sourceforge.net/jspx.xsd"
- controller="FirstPage" >
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
- <title>jspx demo</title>
- </head>
- <body>
- <form method="post" enctype="multipart/form-data" >
- <label id="resultLabel"></label>
- </form>
- </body>
- </html>
- </page>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://jspx-bay.sourceforge.net/jspx.xsd"
controller="FirstPage" >
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>jspx demo</title>
</head>
<body>
<form method="post" enctype="multipart/form-data" >
<label id="resultLabel"></label>
</form>
</body>
</html>
</page>
<!--[if !supportLists]-->
3. 創建一個Java類,該類必須與定義在HTML頁面上的page標簽“jspx.demo.web.controller.FirstPage”一致。(注:上面頁面配置的“FirstPage”可能有誤,應該是jspx.demo.web.controller.FirstPage)
Java代碼

- public class FirstPage extends Page {
-
- protected void pageLoaded() {
- resultLabel.setValue("Hello Web in JSPX");
-
- }
-
- public Label resultLabel = new Label();
-
- public Label getResultLabel() {
- return resultLabel;
- }
-
- public void setResultLabel(Label result) {
- this.resultLabel = result;
- }
-
- }
public class FirstPage extends Page {
protected void pageLoaded() {
resultLabel.setValue("Hello Web in JSPX");
}
public Label resultLabel = new Label();
public Label getResultLabel() {
return resultLabel;
}
public void setResultLabel(Label result) {
this.resultLabel = result;
}
}
現在你可以啟動servlet容器,訪問http://localhost/jspx-demo/pages/FirstPage.jspx.看看結果。(注:真實的URL與你實際配置有關。而且目前版本,所有的頁面貌似只能放在“pages”下)
FAQ
在JSPX中的HTML文件與普通HTML文件有什么區別?
看到上面的實例,除了根元素<page>外,我們可以看到頁面用的其實還是標準的HTML標簽。這也是JSPX最重要的特性之一:將一個已經設計好的普通HTML頁面包裝成JSPX頁面,而且僅僅使用<page>標簽即可。雖然JSPX是構建于標準HTML標簽的,但是當遇到一些稍微復雜點的業務(比如說查找數據庫的記錄集),我們也可以使用一些非標準的JSPX標簽來解決(上文提到的DataTable,ListTable,Validators和Capatcha等等都是)。
POJO中到底定義的是什么?他們是如何綁定上(hook )HTML文件的?
所謂的Controller (控制器)其實就是一個簡單的POJO類,它表示了在HTML頁面那。在上面的頁面中,你可以在<page>標簽中,看到“Controller”屬性。它與你在后臺定義的那個Controller類的完全限定名是完全一致的。而在這個Controller類中,你又可以定義其它web控件,然后在相應的HTML頁面中添加相應的標簽,并且令其id與Controller中定義的組件變量名一致即可。除此以外,通過使用JspxBean控件,還有更高級的綁定技術,很像JSF的backing beans哦。
配置文件如何配置,像struts-config.xml嗎?
配置方法也是JSPX最重要的優點之一。我們從一開始就想把煩人的配置文件給干掉。不像JSF和Struts,除了標準的web.xml外,JSPX并不需要任何配置文件。因此,你可以認為JSPX也是一個“Zero Configurations Framework”
該框架有啥缺點嗎?
對于某些人來說,使用一個相對較新的框架被為是一種冒險。對于JSPX來說,我們已經考察過其它框架,知道哪些東西應該取舍。對于已經采用了像JSF和JSP這些技術開發的項目,JSPX也可以融入其中進行開發。對于已有的JSP頁面,我們支持將其轉成JSPX頁面。
你們在實際工作中使用了此框架嗎?結果如何?
自JSPX第一次公布以來,已經過去的5個多月了,它已經至少付諸于5個我們的企業項目。有些已經完全遷徙到JSPX上去了。其它的由于已經用的是別的開發技術,JSPX目前用于開發新的需求。所有的項目中,JSPX都表現出了驚人的生產力。對于我們的開發周期,高層管理都非常滿意。實際上,我們已經可以將原本計劃數天干完的活,結果不到一小時就搞定了。
這個框架將來打算怎么發展?
JSPX的第一次發布是在2009年的1月1號,但我們并不會因此而止步不前。我們的計劃是每月都發布一次,除把一些bug給修復掉,還會添加新的特性。我們計劃在下一個版本添加對AJAX的支持。當然,推出基于NetBeans的插件也會為此框架增色不少哦。
其實最主要的是我們還得依靠用戶的不斷反饋來驅動框架變得更有活力,同時還產生出更多的成功商業案例。
如何開始使用?
我們的站點是http://jspx-bay.sourceforge.net,里面有很多教你如何開始使用JSPX的內容。當然我們也提供了一個demo來演示框架的一些特性。當然我們非常樂意的支持有關JSPX的任何請求,我們的郵箱是:support.jspx@gmail.com