程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 基於Spring DM的WEB應用開發

基於Spring DM的WEB應用開發

編輯:關於JAVA

Spring DM 1.1.x的最大特性便是它可以支持在其中部署WEB應用,我使用後感覺這是個很酷的特性,我甚至覺得用這種方式開發基於OSGi WEB應用比使用Spring DM Server更好,至少目前你可以獲得更好的便攜性(可以在多個Spring DM支持的OSGi平台上運行),並且Spring DM Server並沒有提供更多的企業應用支持。

不過對於剛使用Spring DM進行WEB應用開發的人來說,成功地配置卻不是一件容易的事。以下詳細的講解一下相關配置。

1 運行環境所需的Bundles:

0       ACTIVE   system.bundle_3.2.2.R32x_v20070118
   1       ACTIVE   com.springsource.slf4j.api_1.5.0
   2       RESOLVED  org.springframework.osgi.jetty.web.extender.fragment.osgi_1.0.0
         Master=46
   3       ACTIVE   org.springframework.bundle.osgi.extender_1.0.1.v200803070100
   4       ACTIVE   org.springframework.bundle.spring.core_2.5.5
   5       ACTIVE   org.springframework.bundle.spring.web_2.5.5
   6       ACTIVE   com.springsource.org.objectweb.asm_2.2.3
   7       RESOLVED  osgi_log_config_1.0.0
          Master=36
   8       ACTIVE   org.springframework.bundle.osgi.core_1.0.1.v200803070100
   9       ACTIVE   com.springsource.slf4j.log4j_1.5.0
   10      ACTIVE   org.springframework.bundle.spring_2.5.2.v200803070100
   11      ACTIVE   org.springframework.bundle.spring.context_2.5.5
   12      ACTIVE   javax.servlet_2.4.0.v200706111738
   13      ACTIVE   org.springframework.osgi.servlet-api.osgi_2.5.0.SNAPSHOT
   14      ACTIVE   com.springsource.net.sf.cglib_2.1.3
   15      ACTIVE   org.springframework.bundle.spring.beans_2.5.5
   16      ACTIVE   javax.servlet.jsp_2.0.0.v200706191603
   18      ACTIVE   org.springframework.osgi.jetty.start.osgi_1.0.0
   19      ACTIVE   org.springframework.bundle.osgi.io_1.0.1.v200803070100
   20      ACTIVE   org.aopalliance_1.0.0
   21      ACTIVE   org.springframework.bundle.spring.context.support_2.5.5
   23      ACTIVE   com.springsource.org.aopalliance_1.0.0
   24      ACTIVE   org.springframework.bundle.spring.aop_2.5.5
   25      ACTIVE   com.springsource.slf4j.org.apache.commons.logging_1.5.0
   30      ACTIVE  org.objectweb.asm_2.2.3
   33      ACTIVE   org.mortbay.jetty.server_6.1.9
   35      ACTIVE   org.mortbay.jetty.util_6.1.9
   36      ACTIVE   org.springframework.osgi.log4j.osgi_1.2.15.SNAPSHOT
         Fragments=7
   37      ACTIVE   org.mortbay.jetty_5.1.11.v200706111724
   43      ACTIVE   org.springframework.bundle.osgi.extender_1.1.2
   44      ACTIVE   org.springframework.bundle.osgi.io_1.1.2
   45      ACTIVE   org.springframework.bundle.osgi.web_1.1.2
   46      ACTIVE   org.springframework.bundle.osgi.web.extender_1.1.2
         Fragments=2
   47      ACTIVE   org.springframework.bundle.osgi.core_1.1.2

以上這些Bundles可以在spring dm 1.1.2的發布包中找到,以上Bundles的start level設置為2.

2 加入Log4j日志配置Bundles

這個Bundles的目的在於提供log4j.properties,詳細做法可以參考本人的“spring osgi快速入門”

3 開發WEB應用

WEB應用的開發方式和普通的WEB基本上一樣,只是加入一些OSGi的配置。

大致結構如下:

META-INF
   MANIFEST.MF
   WEB-INF
   Classes
   Lib
   Web.xml
   applicationContext.xml

1 MANIFEST.MF配置參考:

Manifest-Version: 1.0
   Bundle-ManifestVersion: 2
   Bundle-Name: Osgi_web_app Plug-in
   Bundle-SymbolicName: osgi_web_app
   Bundle-Version: 1.0.0
   Bundle-Vendor: ccsoft
   Import-Package: javax.servlet,
   javax.servlet.http,
   javax.servlet.resources;version="2.4.0",
   org.ccsoft.service,
   org.springframework.osgi.web.context.support;version="1.1.2",
   org.springframework.web.context,
   org.springframework.web.context.support
   Bundle-ClassPath: WEB-INF/classes/,
   .
   Require-Bundle: org.springframework.bundle.osgi.core,
   org.springframework.bundle.osgi.io,
   org.springframework.bundle.spring.beans,
   org.springframework.bundle.spring.context,
   org.springframework.bundle.spring.core

2 為了在web應用中使用spring dm的IoC功能,web.xml中需要加入一些特定配置,類似於使用Spring時的配置,web.xml配置參考如下:

<?xml version="1.0" encoding="ISO-8859-1"?>
   <web-app xmlns="http://java.sun.com/xml/ns/j2ee"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
   version="2.4">
   <display-name>Simple Osgi WebApp Bundle</display-name>
   <description>Simple OSGi War</description>
   <context-param>
   <param-name>contextClass</param-name>
   <param-value>org.springframework.osgi.web.context.support.OsgiBundleXmlWebApplicationContext</param-value>
   </context-param>
   <listener>
   <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
   </listener>
   <servlet>
   <servlet-name>MyServlet</servlet-name>
   <servlet-class>org.ccsoft.web.MyServlet</servlet-class>
   </servlet>
   <servlet-mapping>
   <servlet-name>MyServlet</servlet-name>
   <url-pattern>/servlet</url-pattern>
   </servlet-mapping>
   </web-app>

至於applicationContext.xml則是標准的spring dm配置文件形式,只是沒有放在我們所熟悉的位置(META-INF/spring)

 

配置示例:

<?xml version="1.0" encoding="UTF-8"?>
   <beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:osgi="http://www.springframework.org/schema/osgi"
   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
   http://www.springframework.org/schema/osgi http://www.springframework.org/schema/osgi/spring-osgi.xsd">
   <osgi:reference id="HelloServiceOsgi" interface="org.ccsoft.service.SpeakService"/>
   </beans>

在你的WEB應用中可以使用如下代碼來訪問別的Bundle提供的服務:

WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(req.getSession().getServletContext());
   SpeakService ss=(SpeakService)ctx.getBean("HelloServiceOsgi");

與你使用Spring開發WEB應用的寫法是完全一致的。

好了現在你可以利用spring dm開發你的web應用了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved