基于OSGi和Spring开发Web应用.docx
《基于OSGi和Spring开发Web应用.docx》由会员分享,可在线阅读,更多相关《基于OSGi和Spring开发Web应用.docx(17页珍藏版)》请在冰豆网上搜索。
![基于OSGi和Spring开发Web应用.docx](https://file1.bdocx.com/fileroot1/2023-1/9/5694d5f9-1e91-4855-b795-3640cb04d73b/5694d5f9-1e91-4855-b795-3640cb04d73b1.gif)
基于OSGi和Spring开发Web应用
基于OSGi和Spring开发Web应用
作为一个新的事实上的工业标准,OSGi已经受到了广泛的关注,其面向服务(接口)的基本思想和动态模块部署的能力,是企业级应用长期以来一直追求的目标。
Spring是一个著名的轻量级J2EE开发框架,其特点是面向接口编程和非侵入式的依赖注入。
将OSGi和Spring结合能充分发挥二者各自的特长,更好地满足企业级应用开发的需求。
Spring开发组织在2008年发布了将OSGi和Spring结合的第一个版本:
Spring-DM。
dmServer是一个完全模块化部署的,基于OSGi的Java服务器,为运行企业Java应用和Spring应用提供更加强大的灵活性和可靠性。
SpringSource应用平台是构建在Spring、OSGi和ApacheTomcat之上的应用服务器,这个新的应用服务器摒弃了原有的JavaEE服务器标准,自然而然地将Spring编程模型展现其中,随之而来的还有一套基于OSGi内核构建的全新部署和打包系统。
本文通过一个简单实例,介绍如何利用Spring-DM开发基于OSGi和Spring架构的Web应用,同时探讨其中用到的关键技术及其基本思想。
实例教程:
一、.指定TargetPlatform到所用到的所有的bundle包的目录中。
二、创建一个Service接口bundle
新建一个接口类:
mon.ShowMsgInfo
同时新加一个接口方法:
publicStringGetMsgInfo();
打开这个接口bundle工程的MANIFEST.MS文件,在Runtime/ExprotedPackages中添加刚刚新建的接口类,使之对外提供这个服务。
三、创建一个接口bundle的实现bundle
打开这个接口bundle工程的MANIFEST.MS文件,在Dependencies/ImportedPackages中添加上面新建的接口类
新建一个接口实现类:
ShowMsgInfo
在这个类中,实现接口中的方法:
packagecom.infotech.test.service;
importmon.IShowMsgInfo;
publicclassShowMsgInfoimplementsIShowMsgInfo{
@Override
publicStringGetMsgInfo(){
return"HelloWord!
!
!
";
}
}
接下来,我需要将这个实现类发布成为一个OSGI服务:
在工程新一个目录OSGI-INF,并新建一个components.xml文档。
xmlversion="1.0"encoding="UTF-8"?
>
打开这个接口bundle工程的MANIFEST.MS文件,添加一行
Service-Component:
OSGI-INF/components.xml
四、接下来,我们创建一个WEB应用bundle:
.1.新建一个网页bundle工程:
2.在工程目录中创建WEB-INF/lib、WEB-INF/classes两个目录
并在WEB-INF目录中,创建Spring、jsf、及web配置文件:
3.在MANIFEST.MF文件中的配置项:
Runtime/Classpath中添加刚才创建的两个目录。
4.点击Add添加我们将要使用的jar包
5.新建一个网页就的Bean类TestBean
packagecom.infotech.test.bean;
importcom.infotech.test.control.TestBeanControl;
publicclassTestBean{
privateTestBeanControltestControl;
publicStringgetShowMsg(){
returntestControl.getShowMsg();
}
publicTestBeanControlgetTestControl(){
returntestControl;
}
publicvoidsetTestControl(TestBeanControltestControl){
this.testControl=testControl;
}
}
6.创建一下控制类TestBeanControl
packagecom.infotech.test.control;
importmon.IShowMsgInfo;
publicclassTestBeanControl{
privatestaticIShowMsgInfomsginfoService;
publicStringgetShowMsg(){
returnmsginfoService.GetMsgInfo();
}
publicvoidsetMsginfoService(IShowMsgInfomsginfoService){
this.msginfoService=msginfoService;
}
publicvoidunsetMsginfoService(IShowMsgInfomsginfoService){
if(this.msginfoService==msginfoService)
this.msginfoService=null;
}
}
7.打开这个接口bundle工程的MANIFEST.MS文件,在Dependencies/ImportedPackages中添加上面新建的接口服务类及WEB服务类
8.新建一个OSGI-INF/components.xm文件,我们来引用上面发布出来的OSGI服务
xmlversion="1.0"encoding="UTF-8"?
>
bind="setMsginfoService"unbind="unsetMsginfoService"
cardinality="0..1"policy="dynamic"/>
9.打开这个接口bundle工程的MANIFEST.MS文件,添加一行
Service-Component:
OSGI-INF/components.xml
10.
修改Application-test.xml
xmlversion="1.0"encoding="UTF-8"?
>
DOCTYPEbeansPUBLIC"-//SPRING//DTDBEAN//EN""http:
//www.springframework.org/dtd/spring-beans.dtd">
修改faces-config.xml
xmlversion="1.0"encoding="UTF-8"?
>
DOCTYPEfaces-configPUBLIC
"-//SunMicrosystems,Inc.//DTDJavaServerFacesConfig1.1//EN"
"
xmanager_web_resources
zh_CN
org.springframework.web.jsf.DelegatingVariableResolver
TestBean
com.infotech.test.bean.TestBean
session
testControl
#{TestControl}
index
*
index
/index.jsp
修改web.xml
xmlversion="1.0"encoding="UTF-8"?
>
xmlns="
xmlns:
xsi="http:
//www.w3.org/2001/XMLSchema-instance"
xsi:
schemaLocation="
XmanagerWeb
javax.faces.CONFIG_FILES
/WEB-INF/faces-config.xml
org.apache.myfaces.DETECT_JAVASCRIPT
false
org.apache.myfaces.PRETTY_HTML
true
org.apache.myfaces.AUTO_SCROLL
true
contextConfigLocation
/WEB-INF/Application*.xml
org.springframework.web.context.ContextLoaderListener
MyFacesExtensionsFilter
org.apache.myfaces.webapp.filter.ExtensionsFilter
maxFileSize
100m
MyFacesExtensionsFilter
FacesServlet
MyFacesExtensionsFilter
/faces/myFacesExtensionResource/*
SetCharacterEncoding
org.springframework.web.filter.CharacterEncodingFilter
encoding
UTF-8
SetCharacterEncoding
*.jsf
FacesServlet
javax.faces.webapp.FacesServlet
1
FacesServlet
*.jsf
index.jsf
index.jsp
11.导入三个工程:
Catalina.config
Server.config
Org.springframework.osgi.log4j.config
12.好了,写一个测试页:
index.jsp
<%@pagelanguage="java"contentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%>
<%@taglibprefix="f"uri="%>
<%@taglibprefix="h"uri="%>
<%@taglibprefix="x"uri="http:
//myfaces.apache.org/tomahawk"%>
<%@taglibprefix="c"uri="
<%@taglibprefix="t"uri="
view>
outputTextvalue="#{TestBean.showMsg}">
outputText>
view>
13.最后我创建一个Debug环境
运行结果:
定时下载任务:
下载文件,设置超时,若长时间下载不成功,则取消下载
下载文件后,对其进行解压缩,
判断解压缩后的文件是否为XML文件,若是,则先删除老文件,将其移到至新文件夹,并存储文件信息到数据库。
若不是,则直接删除整个文件夹不予更新。
上传文件
判断文件是为XML文件还是ZIP文件,
若为XML文件则转移到新文件夹,记录到数据库
若为ZIP文件,则解压缩,则解压缩后的文件
读取XML文件,将相关信息读取出来存储