>問題提出:
比如說你要電子商務系統類似淘寶的那玩意兒,
這個系統應該有一個管理系統門戶,還有一系列接口(提供給taobao旺旺客戶端調用的接口,還有淘寶開放平臺的那些api),然后就是一個網站門戶這個是顯然不可少的.
也就是說,大多數系統都不可能只有一個門戶,并且從部署和安全的角度來說,管理門戶都會單獨部署,并且限制能夠訪問的ip.
從邏輯架構來劃分也應該是 業務邏輯層(或者稱為服務層),然后是多個web門戶.或者接口服務門戶
如果是采用ms的doNET的話,可以建一個解決方案,然后再建多個項目,由于doNET的編譯后一個項目是一個dll存在,故doNET來說應該根據分層建立多個項目.doNET
也推薦采用這樣的方式.
下面說一下采用j2ee處理這樣的情況的做法.這兒以myeclipse為例來說.
根據上述情況,顯然我們應該把業務邏輯放到一個項目,其他的門戶根據每一個門戶單獨建立一個項目,以后系統部署的時候,也就將不同的門戶部署到不同的服務器上去.
其實就是各門戶的項目引用業務邏輯項目就可以了,將公用的東東都抽象出來放到一起(比如說 商品相關的邏輯 在網站門戶,管理后臺,接口都會共用的)
下面用一個簡單的例子,說明一下實現步驟. 最后再介紹ssh2項目怎樣實現.
步驟如下:
新建一個java project [注意:]這兒一定要是一個java project ,我試過如果建成一個web projcet的話,可以編譯通過,但是發布的時候,引用的class不會自己動拷貝過去,除非手動拷貝.
起名字為servicecore,名字無所謂的.
然后在src,再建一個folder叫service
隨便寫個類:
package service;
public class OneSrv
{
public String test()
{
return "this is test info";
}
}
然后再建一個java web project
起名字叫serviceweb,名字無所謂的
然后,選中這個項目,屬性,java build path 里面選projects
然后添加servicecore這個項目,
在native library location那兒,選workspace,就指到 servicecore 的src目錄就是了 [這兒就表示發布的時候,會應用的項目的src目錄下的東東全部發布到目標項目]
然后在serviceweb項目的src下面,再建一個folder叫srvproxy
再寫一個類,來調用servicecore項目的的類的方法
package srvproxy;
import service.*;
public class OneSrvProxy
{
public String test()
{
OneSrv oneSrv = new OneSrv();
return oneSrv.test();
}
}
再在jsp頁面上調用這個
<%
srvproxy.OneSrvProxy oneSrvProxy = new srvproxy.OneSrvProxy();
out.println(oneSrvProxy.test());
%>
然后發布這個serviceweb項目到tomcate或者其他的容器,
可以看到在發布的目錄下的serviceweb\WEB-INF\classes\service
下面,也有那個OneSrv.class了
呵呵..,如果沒有問題的話,訪問那個jsp頁面,就能看到調用的情況啦.
也可以在jsp頁面上直接調用,OneSrv.class,
對于web project 來說的話,只要是在\WEB-INF\classes\下面的class都可以調用的.
這樣就把業務邏輯和表示分離了.
但是上述的例子只是一個非常簡單的,實際的系統開發有數據訪問等. 下面就介紹對于一個SSH2 項目如何實現
這兒以一個已經存在的ssh2 的web project 項目為利,講解怎樣吧業務邏輯抽象到一個java project 中.
步驟如下:
一,新建一個java project ,在servicecore里面隨便建一個lib,
這兒分兩種情況,
如果是已經有一個現成的ssh2 的 web project
就想現成的 web projcect 的webroot的web-info下的lib文件甲的那些jar包全部拷貝到 servicecore 這個java project 的lib里面
如果是沒有現成的ssh2 的web project 的話.
可以通過myeclipse添加hibernate和spring的capability指定myeclipse的那些jar包到那個lib下,
完成后,把那個lib下的jar包,拷貝到serviceweb的webroot的web-info下的lib文件甲
這兒保證ssh2的相關的jar包都放到lib下面了.
然后選中servicecore 屬性,java build path -> libraries 選擇Add External JARs,然后指向剛才的那個lib文件夾
這樣項目就能使用那些jar包了. 同時把web project 的 build path 也 添加這些JAR包.
[注意:]我遇到這樣一個問題,就是servicecore這個項目找不到數據庫 的jdbc驅動,明明我吧ojdbc14.jar加到那個buildpath里面了的.
解決辦法是在myeclipse的java類編輯器,報錯的那個不能識別的包名下劃線那兒雙擊,會彈出來一個窗口,里面有一個oracle jdbc的驅動
其實這個是另外的webprojcect里面的jdbc驅動.使用這個也沒關系,只要編譯通過就可以了.反正最總發布的時候,是使用web poject的的webroot的web-info下的lib文件甲里面的jar包.
再將web project 的引用指向servicecore 這個java project ,步驟如前面所說.
二, 相關的文件的處理
1.spring 配置文件的處理.
由于ssh2項目的話,spring配置文件里面會包含 dao,Bo,action等各層的class 故,需要對配置文件進行分割.
這兒將所有的配置文件都放到/WEB-INF/classes/spr-conf/文件夾下面,
[注意:]這個是發布后的位置,解決方案中的classes 就對應src 目錄.
在web.xml里面的spring配置文件路徑就寫成如下
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/classes/spr-conf/*.xml</param-value>
</context-param>
然后在servicecore 的 src 目錄下新建spr-conf目錄,在所有的web project的src目錄下也建spr-conf目錄.
將dao,bo等業務邏輯類的配置放到servicecore的 spring配置文件中,
將action等類配置放到web projcect 的srping配置文件中,
這樣struts的配置文件放到web project 中, hibernate的配置文件放到servicecore中.spring配置文件(action的在web projcect,其他的都放到servicecore).
三 總述
經過這樣的處理,項目就分離了,對于較大的項目,開發人員可以分工,一些人專門做業務邏輯,一些人專門做前端頁面,同時也達到了復用的效果.