欧美三级国产三级日韩三级_亚洲熟妇丰满大屁股熟妇_欧美亚洲成人一区二区三区_国产精品久久久久久模特

OSGi技術(shù)在Java Web開發(fā)中的應(yīng)用 - 新聞資訊 - 云南小程序開發(fā)|云南軟件開發(fā)|云南網(wǎng)站建設(shè)-昆明葵宇信息科技有限公司

159-8711-8523

云南網(wǎng)建設(shè)/小程序開發(fā)/軟件開發(fā)

知識

不管是網(wǎng)站,軟件還是小程序,都要直接或間接能為您產(chǎn)生價值,我們在追求其視覺表現(xiàn)的同時,更側(cè)重于功能的便捷,營銷的便利,運營的高效,讓網(wǎng)站成為營銷工具,讓軟件能切實提升企業(yè)內(nèi)部管理水平和效率。優(yōu)秀的程序為后期升級提供便捷的支持!

您當(dāng)前位置>首頁 » 新聞資訊 » 網(wǎng)站建設(shè) >

OSGi技術(shù)在Java Web開發(fā)中的應(yīng)用

發(fā)表時間:2016-8-23

發(fā)布人:葵宇科技

瀏覽次數(shù):57

隨著Java SE對模塊化功能原生支持的一再推遲(據(jù)最新的消息,Jigsaw項目——Java SE中的標(biāo)準(zhǔn)模塊系統(tǒng)——的開發(fā)工作相對滯后,已經(jīng)延期到了Java 9中,Java 9到2015年才有希望發(fā)布),OSGi作為事實標(biāo)準(zhǔn)的Java模塊化實現(xiàn)得到了長足的發(fā)展,尤其是隨著云計算和分布式技術(shù)的興起,OSGi這種模塊化、動態(tài)部署的核心功能將會受到越來越多的重視。

目前OSGi規(guī)范的主流實現(xiàn)框架是Eclipse Equinox以及Apache Felix,其實際的應(yīng)用場景也早就從起初的嵌入式設(shè)備擴(kuò)展到桌面應(yīng)用甚至Java企業(yè)級開發(fā)領(lǐng)域。最為大家所熟知的OSGi應(yīng)用是Eclipse IDE,其實像Sun GlassFish、IBM WebSphere Application Server、JBoss Application Server以及Apache的大量開源項目如Camel、Sling、ServiceMix、Kafaf等都使用了OSGi技術(shù),隨著其應(yīng)用的日益廣泛,技術(shù)的可用性和成熟度經(jīng)受了充分的考驗,實踐證明OSGi是一項可靠的技術(shù),完全可以應(yīng)用于企業(yè)級應(yīng)用的開發(fā)。尤其值得一提的是,隨著OSGi Core Release 5和OSGi Enterprise Release 5版本的發(fā)布,預(yù)計OSGi技術(shù)將會受到更多的關(guān)注,國內(nèi)外已經(jīng)有將OSGi應(yīng)用于云計算和分布式計算的案例。

本文將選取OSGi應(yīng)用于傳統(tǒng)Java Web開發(fā)的場景,介紹借助于OSGi技術(shù),怎樣實現(xiàn)將Web應(yīng)用拆分成滿足OSGi規(guī)范的bundle,實現(xiàn)組件的動態(tài)部署。目前,為了實現(xiàn)在bundle中支持JSP、Servlet等Java Web開發(fā)技術(shù)和規(guī)范,有兩種主要的開發(fā)部署方式,本文都將進(jìn)行介紹,但是這兩種方案在實現(xiàn)上與傳統(tǒng)的Java Web應(yīng)用開發(fā)模式有較大的不同,且對JEE規(guī)范的支持尚不完整。

按照Eclipse Equinox的習(xí)慣,會將bundle稱為插件,在后文中會根據(jù)具體的應(yīng)用場景穿插使用這兩個名詞,但其本質(zhì)是相同的。

1.1 將Web容器作為bundle置于Equinox中進(jìn)行開發(fā)

在這種模式下,我們需要將支持JEE規(guī)范的容器也以bundle形式發(fā)布到OSGi容器中,而包含JSP、Servlet的bundle將會使用該容器接受對請求的訪問,這種方式的好處在于OSGi容器管理整個運行環(huán)境,是個純粹的可熱插拔運行環(huán)境,其缺點在于需要Web容器支持以bundle的形式進(jìn)行發(fā)布,對運行環(huán)境有一定的限制,目前支持該要求的Web容器有Tomcat和Jetty,但是主流的企業(yè)級應(yīng)用服務(wù)器尚不支持這種部署方式。

鑒于Eclipse開發(fā)環(huán)境中已經(jīng)包含了Jetty服務(wù)器,所以我們將會使用該服務(wù)器進(jìn)行Web應(yīng)用的開發(fā)。

首先我們需要使用Eclipse的工程向?qū)?chuàng)建一個插件工程。根據(jù)工程的需要,我們不生成啟動類(activator),不使用任何模版,創(chuàng)建過程如下:

新建一個插件工程:

輸入工程的基本信息:

此處我們不使用任何模版,因為我們不會用到Eclipse的UI功能:

新建完成的項目結(jié)構(gòu)如下所示:

為了測試進(jìn)行Web開發(fā),我們新建目錄結(jié)構(gòu)/WebRoot/jsp(該目錄名稱是任意的,只需在后續(xù)定義擴(kuò)展點時進(jìn)行匹配即可)并在該目錄下創(chuàng)建一個JSP文件,此時的工程結(jié)構(gòu)如下:

JSP的代碼如下:

復(fù)制代碼
<%@pagelanguage="java"contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>

<!DOCTYPEhtmlPUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<metahttp-equiv="Content-Type"content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
Hello,world!
</body>
</html>
復(fù)制代碼

為了使用JSP和Servlet,我們需要使用一個擴(kuò)展點,該擴(kuò)展的名稱為org.eclipse.equinox.http.registry.servlets,我們需要使用該擴(kuò)展點進(jìn)行JSP目錄和訪問地址的匹配,在這個樣例中我們匹配了/WebRoot/jsp目錄,其訪問地址的前綴將會是/jsp/:

除此以外,我們還需要添加對org.eclipse.equinox.jsp.jasper.registry插件的依賴,以實現(xiàn)JSP的編譯功能。

最后,我們在運行時配置里將testweb和Jetty所依賴的插件全部選中,如下:

點擊“Run”按鈕,此時就會啟動OSGi運行環(huán)境,我們可以在控制臺通過使用“ss”命令來查看運行插件的狀態(tài)情況:

此時,可以在瀏覽器中輸入http://localhost/jsp/index.jsp(Jetty的默認(rèn)端口是80,可進(jìn)行配置),就會看到我們所編寫的JSP的代碼了:

要實現(xiàn)訪問Servlet和靜態(tài)資源(CSS、圖片等),也需要類似的配置,下圖是一個包含靜態(tài)資源和Servlet的配置樣例所對應(yīng)的plugin.xml文件內(nèi)容:

復(fù)制代碼
<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.4"?>
<plugin>
<extension
    point="org.eclipse.equinox.http.registry.servlets">
    <servlet
        alias="/servlet/myfirstservlet"
        class="testjsp.LoginServlet"
        load-on-startup="true">    
    </servlet>
    <servlet
        alias="/jsp/*.jsp"
        class="org.eclipse.equinox.jsp.jasper.registry.JSPFactory:/WebRoot/jsp/">
    </servlet>
</extension>
<extension
point="org.eclipse.equinox.http.registry.resources">
<resource
alias="/web"
base-name="/WebRoot/images"/>
</extension>
</plugin>
復(fù)制代碼

以上就實現(xiàn)了訪問JSP和Servlet等Java Web技術(shù)的功能,如果要將其用在實際的運行環(huán)境中,可以將這個插件打成jar包的形式,將該jar包和其依賴的插件放在Equinox指定目錄下,通過命令行來啟動bundle并進(jìn)行訪問。

1.2 將Equinox置于web容器中進(jìn)行開發(fā)

以上的開發(fā)模式對于習(xí)慣于傳統(tǒng)JEE開發(fā)模式的開發(fā)人員在接受上有一定的難度,直接使用Equinox作為運行環(huán)境在解決集群部署方面也有一定的難度,除此以外,主流的應(yīng)用服務(wù)器并不提供bundle形式的jar以運行在OSGi容器中。所以,開發(fā)人員摸索出了另一種開發(fā)和部署模式。

在這種模式中,會將Equinox和我們開發(fā)的插件都打成一個標(biāo)準(zhǔn)的war包的格式,因此可以運行在任意支持JEE的容器中。Equinox的生命周期是通過Servlet來進(jìn)行控制。這種模式被稱為橋接模式。Equinox官方提供了該模式的實現(xiàn),后來的社區(qū)貢獻(xiàn)者基于此進(jìn)行了功能的完善。

將下載后的代碼導(dǎo)入到Eclipse中,工程目錄如下所示:

從該目錄可以看出,這是一個典型JEE工程,可以運行在任意的支持規(guī)范的Web容器或應(yīng)用服務(wù)器中,查看web.xml,我們可以看到這樣的配置:

復(fù)制代碼
<servlet id="bridge">
        <servlet-name>equinoxbridgeservlet</servlet-name>
        <display-name>Equinox Bridge Servlet</display-name>
        <description>Equinox Bridge Servlet</description>
        <servlet-class>org.eclipse.equinox.servletbridge.BridgeServlet</servlet-class>
        <init-param>
            <param-name>commandline</param-name>
            <param-value>-console</param-value>            
        </init-param>        
        <init-param>
            <param-name>enableFrameworkControls</param-name>
            <param-value>true</param-value>            
        </init-param>
        <init-param>
            <param-name>extendedFrameworkExports</param-name>
            <param-value></param-value>            
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>equinoxbridgeservlet</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>equinoxbridgeservlet</servlet-name>
        <url-pattern>*.jsp</url-pattern>
    </servlet-mapping>    
復(fù)制代碼

我們可以看到這個Servlet攔截了所有的請求,由該Servlet代理所有的請求。

在部署階段,可以把插件打成jar包,放到/WEB-INF/eclipse/plugins目錄下即可。如將我們上例中的testweb導(dǎo)出為jar包后,置于指定目錄下。然后在Tomcat中運行該應(yīng)用。訪問http://localhost:8080/bridge/jsp/index.jsp就可以看到我們編寫的JSP頁面了。

使用以上的模式進(jìn)行開發(fā),對原有的開發(fā)和部署模式?jīng)_擊較小而且支持所有的應(yīng)用服務(wù)器。

參考資料:

http://www.ibm.com/developerworks/cn/web/0907_osgiweb_liuqing/

相關(guān)案例查看更多