作者:Andy(http://blog.xintiantang.com/andy),轉載請先聯(lián)系我
這篇文章于2005/08/30 20:00開(kāi)始,計劃在一個(gè)月內完成,所以將會(huì )人工置頂。內容有點(diǎn)兒亂,先把想的和做的記下來(lái),然后再慢慢整理。同時(shí)歡迎提出你的看法。
對于普通用戶(hù)來(lái)說(shuō),使用傳統的桌面應用程序(可能采用不同語(yǔ)言和工具開(kāi)發(fā)的)可能存在這樣那樣的限制,比如界面風(fēng)格千變萬(wàn)化、操作習慣不統一、學(xué)習難度大、無(wú)法或很難和外部應用通信等。而傳統的服務(wù)器端應用程序或網(wǎng)站也存在許多限制,比如網(wǎng)絡(luò )連通可能出現問(wèn)題、響應速度慢、不能保證服務(wù)器端始終可用、擔心數據安全和個(gè)人隱私問(wèn)題、不夠靈活、使用不方便等。
而基于瀏覽器的桌面應用程序正是綜合桌面應用程序和服務(wù)器端應用程序的功能產(chǎn)生的。它包含以下優(yōu)點(diǎn):
基于瀏覽器的桌面應用程序(Browser-based desktop application)的定義:一個(gè)包含嵌入式網(wǎng)站服務(wù)器(Embedded web server)的能夠在瀏覽器內的客戶(hù)端的獨立運行(Stand alone)的應用程序。
我把基于瀏覽器的桌面應用程序(Browser-based desktop application)簡(jiǎn)稱(chēng)為BBDA。其實(shí)BBDA和AJAX技術(shù)一樣,也是一個(gè)buzzword,而不是什么新技術(shù),只不過(guò)把幾種通用的軟件或技術(shù)組合在一起而已。
其實(shí),BBDA很符合目前熱炒的WebOS(基于網(wǎng)絡(luò )瀏覽器的操作系統)的特性,這方面Google做了個(gè)最好的Demo:Google Desktop, 在GD中,一切內容的表現都是網(wǎng)頁(yè)(雖然隱藏了瀏覽器),并且很容易和Google網(wǎng)站進(jìn)行通信(比如同時(shí)搜索本地和搜索Web,利用RSS或XML-PRC或SOAP之類(lèi)的協(xié)議讀新聞、郵件、天氣預報、股票行情等)?,F在GDS(Google Desktop Search)只是GD的一個(gè)模塊而已,百度的桌面搜索只是單純地模仿了GDS,卻沒(méi)有猜到原來(lái)Google是要做GD,好傻的百度。Google這幾年的收購和挖人活動(dòng)(Google寬帶, Google browser等),看來(lái)一切都是為了WebOS而努力。這里順便說(shuō)一下Yahoo剛收購的Konfabulator,Konfabulator和GD有很大不同,我覺(jué)得它只是包含許多小軟件或和網(wǎng)站交互的工具,只是個(gè)玩具箱而已,要做WebOS靠這個(gè)可以嗎?看來(lái)Yahoo的眼光似乎始終不如Google。推薦看看這篇文章:GoogleOS? YahooOS? MozillaOS? WebOS?
由于我主要做Java開(kāi)發(fā),所以只列出可能涉及的Java軟件包:Browser(IE/FireFox), JDK, Tomcat/Jetty, HSQLDB/Apache Derby, Hibernate, Lucene, Struts/WebWork/JSF/Tapestry/Wicket/Flex&Laszlo(Flash RIA), DWR(AJAX), Apache Web Services(SOAP/XML-RPC), Apache POI(Word/Excel/ PDF), MP3 ID TAG 3 lib ,JPEG EXIF lib...
我的目的是組合幾種通用的JAVA軟件,用來(lái)進(jìn)行快速的BBDA開(kāi)發(fā)。對于開(kāi)發(fā)者而言,只要選好合適的軟件,并合理組合起來(lái),完全可以達到或超過(guò)Ruby on rails的功能和開(kāi)發(fā)效率。同時(shí),對于普通用戶(hù)而言,只要打開(kāi)瀏覽器輸入http://localhost就行了,用戶(hù)可以在瀏覽器里管理日記(blog?)、日歷、通訊錄、照片(flickr?)、音樂(lè )(itunes?)、文件、網(wǎng)摘(delicious?)、閱讀訂閱的RSS(bloglines?)、查看郵件(web mail)、新聞之類(lèi)等,并可以進(jìn)行搜索、共享、發(fā)布、與外部應用或網(wǎng)站同步等,構成一個(gè)完整的個(gè)人門(mén)戶(hù)系統(Personal portal)。
接下來(lái)我會(huì )發(fā)布一個(gè)進(jìn)行BBDA開(kāi)發(fā)的基礎軟件包(將會(huì )包含一個(gè)簡(jiǎn)單的相冊的BBDA),下面是我對基礎軟件包的說(shuō)明。
關(guān)于嵌入式網(wǎng)站服務(wù)器(Embedded web server):
我這幾天試用了Jetty和Tomcat??傄詾镴etty很小呢,最適合做BBDA呢,結果發(fā)現軟件包也很大了,另外很多功能不如Tomcat,Tomcat Embed 5.5由于使用Ecipse JDT,現在已經(jīng)很小了(3M左右),而且標準,所以選了Tomcat Embed(這里下載)。下面的代碼是Tomcat Embed的啟動(dòng)程序。
Start.java:
package com.terac.tomcat;
import java.net.InetAddress;
import java.net.UnknownHostException;
import org.apache.catalina.Context;
import org.apache.catalina.Engine;
import org.apache.catalina.Host;
import org.apache.catalina.LifecycleException;
import org.apache.catalina.connector.Connector;
import org.apache.catalina.startup.Embedded;public class Start {
public static void main(String[] args) {
try {
String path = System.getProperty("SERVER_HOME");
if(path!=null&&!"".equals(path)){
int port = Integer.parseInt(System.getProperty("SERVER_PORT","8080"));
startTomcat(path,port);
}
} catch (Exception e) {
e.printStackTrace();
}
}
private static void startTomcat(String path,int port) throws UnknownHostException,
LifecycleException {
System.setProperty("catalina.home", path);
Embedded embedded = new Embedded();
Engine engine = embedded.createEngine();
engine.setName("Engine");
Host host = embedded.createHost("localhost", "web");
Context rootContext = embedded.createContext("", "");
rootContext.setPrivileged(true);
host.addChild(rootContext);
engine.addChild(host);
engine.setDefaultHost("localhost");
embedded.addEngine(engine);
Connector connector = embedded.createConnector((InetAddress) null,port, false);
embedded.addConnector(connector);
embedded.start();
}
}start.bat:
@set classpath=./lib/所有的jar文件
@java -DSERVER_HOME=%cd% -DSERVER_PORT=80 -classpath %classpath% com.terac.tomcat.Start
關(guān)于嵌入式數據庫(Embeded database):
Apache Derby雖然比HSQLDB強大,但還是太大了,尤其是當用到IBM的JDBC Driver時(shí)。所以只好選HSQLDB。下面的代碼是在Web應用程序啟動(dòng)時(shí)啟動(dòng)HSQLDB服務(wù)器。
HSQLDBServletContextListener.java:
還未整理好
web.xml中需要加入listener:
com.terac.hsqldb.HSQLDBServletContextListener
關(guān)于全文檢索引擎(Full text search engine):
Apache Lucene應用廣泛,也足夠強大,高亮顯示(Highlighting)需要自己實(shí)現,自動(dòng)摘要(autosummarize)需要Classifier4j 。下面是常用類(lèi)的封裝代碼:
Indexer.java:
還未整理好
Searcher.java:
還未整理好 Highlighter.java:
還未整理好
關(guān)于對象關(guān)系映射工具(OR mapping tools):
Hibernate是最常用最強大的工具。下面是Hibernate Session的封裝代碼:
HibernateUtil.java:
import net.sf.hibernate.HibernateException;
import net.sf.hibernate.SessionFactory;
import net.sf.hibernate.Session;
import net.sf.hibernate.cfg.Configuration;
import org.apache.log4j.Logger;public class HibernateUtil {
private static Log log = LogFactory.getLog(HibernateUtil.class);
public static final ThreadLocal threadSession = new ThreadLocal();
private static final SessionFactory sessionFactory;
static {
try {
sessionFactory = new Configuration().configure().buildSessionFactory();
} catch (Throwable ex) {
// We have to catch Throwable, otherwise we will miss
// NoClassDefFoundError and other subclasses of Error
log.error("Building SessionFactory failed.", ex);
throw new ExceptionInInitializerError(ex);
}
}
public static Session currentSession() throws HibernateException {
Session s = (Session) threadSession.get();
if (s == null) {
s = sessionFactory.openSession();
threadSession.set(s);
}
return s;
}
public static void closeSession() throws HibernateException {
Session s = (Session) session.get();
session.set(null);
if (s != null)
s.close();
}
}
關(guān)于模型-視圖-控制框架(MVC framework):
現在的MVC framework太多了,傳統的有Struts/WebWork,新的有JSF/Tapestry/Wicket/Flex&Laszlo(Flash RIA) ,Wicket網(wǎng)站列出了55種之多!我試過(guò)JSF,始終不能另我滿(mǎn)意,正在嘗試這個(gè)Wicket。
今天寫(xiě)到這,待續。。。
Andy 2005/08/31 14:45 | 技術(shù) |
Alan Cooper很牛,但他說(shuō)的話(huà)可不是圣經(jīng)啊,沒(méi)有什么是永遠不變的。
Posted by: Andy www at 2005/08/31 15:41
Browser-based desktop application以前也聽(tīng)說(shuō)過(guò),你說(shuō)GDS我就一下明白了,嚴重關(guān)注中
Posted by: duduwolf www at 2005/08/31 04:02
技術(shù)太深奧了,我看不懂,先學(xué)習兩個(gè)初步的感覺(jué):1、不能說(shuō)瀏覽器就易用,人機交互的看法是,瀏覽器使人機交化工程的發(fā)展倒退了10年,原文記不住了,有時(shí)間找出來(lái),alan copper說(shuō)的2、你的browserbased其實(shí),好像,也可以叫做Web enable application,從這個(gè)角度上看,我理解目前是一種商業(yè)折中方案,即既可以部署在本機也可以部署在BS架構特別聲明,不是拍磚,一點(diǎn)想法,期盼你的文章完成并學(xué)習
聯(lián)系客服