自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

基于OSGi和Spring開發(fā)企業(yè)級(jí)Web應(yīng)用

開發(fā) 后端
目前OSGi和Spring已經(jīng)受到了廣泛的關(guān)注,如果我們將OSGi和Spring結(jié)合,更能充分發(fā)揮二者各自的特長(zhǎng),同時(shí)更好地滿足企業(yè)級(jí)應(yīng)用開發(fā)的需求。

作為一個(gè)新的事實(shí)上的工業(yè)標(biāo)準(zhǔn),OSGi已經(jīng)受到了廣泛的關(guān)注,就在不久前EclipseCon也發(fā)布企業(yè)級(jí)OSGi標(biāo)準(zhǔn),而IBM以及Eclipse也宣稱將大力發(fā)展Java模塊化。Spring是一個(gè)著名的輕量級(jí)Java EE開發(fā)框架,其特點(diǎn)是面向接口編程和非侵入式的依賴注入。

51CTO編輯推薦:OSGi入門與實(shí)踐全攻略 Spring開源框架技術(shù)

將OSGi和Spring結(jié)合能充分發(fā)揮二者各自的特長(zhǎng),更好地滿足企業(yè)級(jí)應(yīng)用開發(fā)的需求。Spring開發(fā)組織在2008年發(fā)布了將OSGi和Spring結(jié)合的第一個(gè)版本:Spring-DM。

dmServer是一個(gè)完全模塊化部署的,基于OSGi的Java服務(wù)器,為運(yùn)行企業(yè)Java應(yīng)用和Spring應(yīng)用提供更加強(qiáng)大的靈活性和可靠性。SpringSource應(yīng)用平臺(tái)是構(gòu)建在Spring、OSGi和ApacheTomcat之上的應(yīng)用服務(wù)器,這個(gè)新的應(yīng)用服務(wù)器摒棄了原有的JavaEE服務(wù)器標(biāo)準(zhǔn),自然而然地將Spring編程模型展現(xiàn)其中,隨之而來的還有一套基于OSGi內(nèi)核構(gòu)建的全新部署和打包系統(tǒng)。

Spring編程模型

實(shí)例教程:

一、.指定TargetPlatform到所用到的所有的bundle包的目錄中。

bundle包的目錄

二、創(chuàng)建一個(gè)Service接口bundle

新建一個(gè)接口類:com.infotech.test.common.ShowMsgInfo;

創(chuàng)建一個(gè)Service接口bundle

同時(shí)新加一個(gè)接口方法:publicStringGetMsgInfo();

打開這個(gè)接口bundle工程的MANIFEST.MS文件,在Runtime/ExprotedPackages中添加剛剛新建的接口類,使之對(duì)外提供這個(gè)服務(wù)。

打開這個(gè)接口bundle工程

三、創(chuàng)建一個(gè)接口bundle的實(shí)現(xiàn)bundle

打開這個(gè)接口bundle工程的MANIFEST.MS文件,在Dependencies/ImportedPackages中添加上面新建的接口類:

創(chuàng)建一個(gè)接口bundle 

在Dependencies/ImportedPackages中添加上面新建的接口類

新建一個(gè)接口實(shí)現(xiàn)類:ShowMsgInfo:

ShowMsgInfo

在這個(gè)類中,實(shí)現(xiàn)接口中的方法:

  1. packagecom.infotech.test.service;  
  2. importcom.infotech.test.common.IShowMsgInfo;  
  3. publicclassShowMsgInfoimplementsIShowMsgInfo{  
  4.  @Override  
  5.  publicStringGetMsgInfo(){  
  6.   return"HelloWord!!!";  
  7.  }  

接下來,我需要將這個(gè)實(shí)現(xiàn)類發(fā)布成為一個(gè)OSGI服務(wù):在工程新一個(gè)目錄OSGI-INF,并新建一個(gè)components.xml文檔。

  1. <?xmlversionxmlversion="1.0"encoding="UTF-8"?> 
  2. <componentnamecomponentname="ShowMsgInfo"immediate="true"> 
  3.  <implementationclassimplementationclass="com.infotech.test.service.ShowMsgInfo"/> 
  4.  <service> 
  5.   <provideinterfaceprovideinterface="com.infotech.test.common.IShowMsgInfo"/> 
  6.  </service> 
  7. </component> 

打開這個(gè)接口bundle工程的MANIFEST.MS文件,添加一行:

  1. Service-Component:OSGI-INF/components.xml
  2.  

#p#
四、接下來,我們創(chuàng)建一個(gè)WEB應(yīng)用bundle:

1.新建一個(gè)網(wǎng)頁bundle工程:

新建一個(gè)網(wǎng)頁bundle工程

2.在工程目錄中創(chuàng)建WEB-INF/lib、WEB-INF/classes兩個(gè)目錄。

創(chuàng)建WEB-INF/lib、WEB-INF/classes兩個(gè)目錄

并在WEB-INF目錄中,創(chuàng)建Spring、jsf、及web配置文件:

創(chuàng)建Spring、jsf、及web配置文件

3.在MANIFEST.MF文件中的配置項(xiàng):Runtime/Classpath中添加剛才創(chuàng)建的兩個(gè)目錄。

在Runtime/Classpath中添加剛才創(chuàng)建的兩個(gè)目錄

4.點(diǎn)擊Add添加我們將要使用的jar包。

點(diǎn)擊Add添加我們將要使用的jar包

5.新建一個(gè)網(wǎng)頁就的Bean類TestBean。

  1. packagecom.infotech.test.bean;  
  2. importcom.infotech.test.control.TestBeanControl;  
  3. publicclassTestBean{  
  4.  privateTestBeanControltestControl;  
  5.  publicStringgetShowMsg(){  
  6.   returntestControl.getShowMsg();  
  7.  }  
  8.  
  9.  publicTestBeanControlgetTestControl(){  
  10.   returntestControl;  
  11.  }  
  12.  publicvoidsetTestControl(TestBeanControltestControl){  
  13.   this.testControl=testControl;  
  14.  }  

6.創(chuàng)建一下控制類TestBeanControl

  1. packagecom.infotech.test.control;  
  2. importcom.infotech.test.common.IShowMsgInfo;  
  3. publicclassTestBeanControl{  
  4.  privatestaticIShowMsgInfomsginfoService;  
  5.  
  6.  publicStringgetShowMsg(){  
  7.   returnmsginfoService.GetMsgInfo();  
  8.  }  
  9.  
  10.  publicvoidsetMsginfoService(IShowMsgInfomsginfoService){  
  11.   this.msginfoService=msginfoService;  
  12.  }  
  13.  publicvoidunsetMsginfoService(IShowMsgInfomsginfoService){  
  14.   if(this.msginfoService==msginfoService)  
  15.    this.msginfoService=null;  
  16.  }  

7.打開這個(gè)接口bundle工程的MANIFEST.MS文件,在Dependencies/ImportedPackages中添加上面新建的接口服務(wù)類及WEB服務(wù)類。

添加上面新建的接口服務(wù)類及WEB服務(wù)類

8.新建一個(gè)OSGI-INF/components.xm文件,我們來引用上面發(fā)布出來的OSGI服務(wù)。

  1. <?xmlversionxmlversion="1.0"encoding="UTF-8"?> 
  2. <componentnamecomponentname="TestBean"immediate="true"> 
  3.  <implementationclassimplementationclass="com.infotech.test.control.TestBeanControl"/> 
  4.  <referencenamereferencename="msginfoService"interface="com.infotech.test.common.IShowMsgInfo"  
  5.   bind="setMsginfoService"unbind="unsetMsginfoService"  
  6.   cardinality="0..1"policy="dynamic"/> 
  7. </component> 

9.打開這個(gè)接口bundle工程的MANIFEST.MS文件,添加一行。

  1. Service-Component:OSGI-INF/components.xml 
  2.  

10.修改Application-test.xml。

  1. <?xmlversionxmlversion="1.0"encoding="UTF-8"?> 
  2. <!DOCTYPEbeansPUBLIC"-//SPRING//DTDBEAN//EN""http://www.springframework.org/dtd/spring-beans.dtd"> 
  3. <beans> 
  4.  <beanidbeanid="TestControl"class="com.infotech.test.control.TestBeanControl"></bean> 
  5. </beans> 
  6. 修改faces-config.xml  
  7. <?xmlversionxmlversion="1.0"encoding="UTF-8"?> 
  8. <!DOCTYPEfaces-configPUBLIC  
  9. "-//SunMicrosystems,Inc.//DTDJavaServerFacesConfig1.1//EN"  
  10. "http://java.sun.com/dtd/web-facesconfig_1_1.dtd"> 
  11.  
  12. <faces-config> 
  13.  
  14.  <application> 
  15.   <message-bundle>xmanager_web_resources</message-bundle> 
  16.   <locale-config> 
  17.    <default-locale>zh_CN</default-locale> 
  18.   </locale-config> 
  19.   <variable-resolver> 
  20.    org.springframework.web.jsf.DelegatingVariableResolver  
  21.   </variable-resolver> 
  22.  </application> 
  23.    
  24.  <managed-bean> 
  25.   <managed-bean-name>TestBean</managed-bean-name> 
  26.   <managed-bean-class>com.infotech.test.bean.TestBean</managed-bean-class> 
  27.   <managed-bean-scope>session</managed-bean-scope> 
  28.   <managed-property> 
  29.    <property-name>testControl</property-name> 
  30.    <value>#{TestControl}</value> 
  31.   </managed-property> 
  32.  </managed-bean> 
  33.  
  34. <navigation-rule> 
  35. <description>index</description> 
  36. <from-view-id>*</from-view-id> 
  37. <navigation-case> 
  38.  
  39. <from-outcome>index</from-outcome> 
  40. <to-view-id>/index.jsp</to-view-id> 
  41. <redirect/>     
  42. </navigation-case> 
  43. </navigation-rule> 
  44. </faces-config> 

修改web.xml。

  1. <?xmlversionxmlversion="1.0"encoding="UTF-8"?> 
  2. <web-appidweb-appid="WebApp_ID"version="2.4"  
  3.  xmlns="http://java.sun.com/xml/ns/j2ee" 
  4.  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  5.  xsi:schemaLocation="http://java.sun.com/xml/ns/j2eehttp://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> 
  6.  <display-name>XmanagerWeb</display-name> 
  7.  
  8.  <context-param> 
  9.   <param-name>javax.faces.CONFIG_FILES</param-name> 
  10.   <param-value>/WEB-INF/faces-config.xml</param-value> 
  11.  </context-param> 
  12.  
  13.  <context-param> 
  14.   <param-name>org.apache.myfaces.DETECT_JAVASCRIPT</param-name> 
  15.   <param-value>false</param-value> 
  16.  </context-param> 
  17.  
  18.  <context-param> 
  19.   <param-name>org.apache.myfaces.PRETTY_HTML</param-name> 
  20.   <param-value>true</param-value> 
  21.  </context-param> 
  22.  
  23.  <context-param> 
  24.   <param-name>org.apache.myfaces.AUTO_SCROLL</param-name> 
  25.   <param-value>true</param-value> 
  26.  </context-param> 
  27.  
  28.  <context-param> 
  29.   <param-name>contextConfigLocation</param-name> 
  30.   <param-value>/WEB-INF/Application*.xml</param-value> 
  31.  </context-param> 
  32.  
  33.  <listener> 
  34.   <listener-class> 
  35.    org.springframework.web.context.ContextLoaderListener  
  36.   </listener-class> 
  37.  </listener> 
  38.  
  39.  <filter> 
  40.   <filter-name>MyFacesExtensionsFilter</filter-name> 
  41.   <filter-class> 
  42.    org.apache.myfaces.webapp.filter.ExtensionsFilter  
  43.   </filter-class> 
  44.   <init-param> 
  45.    <param-name>maxFileSize</param-name> 
  46.    <param-value>100m</param-value> 
  47.   </init-param> 
  48.  </filter> 
  49.  
  50.  <filter-mapping> 
  51.   <filter-name>MyFacesExtensionsFilter</filter-name> 
  52.   <servlet-name>FacesServlet</servlet-name> 
  53.  </filter-mapping> 
  54.  
  55.  <filter-mapping> 
  56.   <filter-name>MyFacesExtensionsFilter</filter-name> 
  57.   <url-pattern>/faces/myFacesExtensionResource/*</url-pattern> 
  58.  </filter-mapping> 
  59.  
  60.  <filter> 
  61.   <filter-name>SetCharacterEncoding</filter-name> 
  62.   <filter-class> 
  63.    org.springframework.web.filter.CharacterEncodingFilter  
  64.   </filter-class> 
  65.   <init-param> 
  66.    <param-name>encoding</param-name> 
  67.    <param-value>UTF-8</param-value> 
  68.   </init-param> 
  69.  </filter> 
  70.  
  71.  <filter-mapping> 
  72.   <filter-name>SetCharacterEncoding</filter-name> 
  73.   <url-pattern>*.jsf</url-pattern> 
  74.  </filter-mapping> 
  75.  <servlet> 
  76.   <servlet-name>FacesServlet</servlet-name> 
  77.   <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 
  78.   <load-on-startup>1</load-on-startup> 
  79.  </servlet> 
  80.  
  81.  <servlet-mapping> 
  82.   <servlet-name>FacesServlet</servlet-name> 
  83.   <url-pattern>*.jsf</url-pattern> 
  84.  </servlet-mapping> 
  85.  
  86.  <welcome-file-list> 
  87.   <welcome-file>index.jsf</welcome-file> 
  88.   <welcome-file>index.jsp</welcome-file> 
  89.  </welcome-file-list> 
  90. </web-app> 

11.導(dǎo)入三個(gè)工程:

  1. Catalina.config  
  2. Server.config  
  3. Org.springframework.osgi.log4j.config 

12.好了,寫一個(gè)測(cè)試頁:index.jsp。

  1. <%@pagelanguage="java"contentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%> 
  2. <%@taglibprefix="f"uri="http://java.sun.com/jsf/core"%> 
  3. <%@taglibprefix="h"uri="http://java.sun.com/jsf/html"%> 
  4. <%@taglibprefix="x"uri="http://myfaces.apache.org/tomahawk"%> 
  5. <%@taglibprefix="c"uri="http://java.sun.com/jstl/core"%> 
  6. <%@taglibprefix="t"uri="http://jsftutorials.net/htmLib"%> 
  7. <html> 
  8. <head> 
  9. <metahttp-equivmetahttp-equiv="Content-Type"content="text/html;charset=utf-8"> 
  10. <title></title> 
  11. </head> 
  12. <body> 
  13. <f:view> 
  14.  <h:outputTextvalueh:outputTextvalue="#{TestBean.showMsg}"></h:outputText> 
  15. </f:view>   
  16. </body> 
  17. </html> 

13.最后創(chuàng)建一個(gè)Debug環(huán)境。

最后創(chuàng)建一個(gè)Debug環(huán)境

運(yùn)行結(jié)果:

運(yùn)行結(jié)果

【編輯推薦】

  1. Spring事務(wù)管理高級(jí)應(yīng)用難點(diǎn)剖析
  2. Java知識(shí)拾遺:三大框架的技術(shù)起源
  3. Spring 3.0正式發(fā)布 采用全新組件模型
  4. Hibernate批量更新與刪除實(shí)例淺析
  5. 剖析Hibernate Synchronizer配置文件
責(zé)任編輯:王曉東 來源: IBM
相關(guān)推薦

2009-03-03 10:06:00

IBMJavaOSGi

2009-03-30 09:42:28

OSGiJavaJCP

2010-03-29 17:05:07

OSGi

2009-03-02 09:22:39

OSGiJ2EEEclipse

2009-11-23 20:16:25

ibmdwRational

2012-05-15 15:21:29

企業(yè)級(jí)

2009-12-14 20:13:57

IBM

2009-01-13 09:05:45

tomcatSpring框架Web服務(wù)器

2012-06-14 13:26:22

2010-08-04 15:20:15

Flex企業(yè)級(jí)開發(fā)

2013-05-20 10:38:02

Quartz企業(yè)級(jí)開發(fā)任務(wù)調(diào)度

2009-06-23 14:55:43

AJAX和JSF

2012-12-18 17:11:58

2009-06-23 15:02:56

JSF和AJAX

2013-01-25 16:54:42

富士通HTML5企業(yè)級(jí)

2010-01-04 16:38:07

企業(yè)級(jí)Silverli

2021-10-11 14:28:25

TypeScript企業(yè)級(jí)應(yīng)用

2015-10-15 17:17:33

云應(yīng)用平臺(tái)系統(tǒng)構(gòu)建實(shí)踐

2011-12-06 14:02:27

企業(yè)級(jí)移動(dòng)開發(fā)

2024-11-14 08:10:00

Python開發(fā)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)