前面文章中介绍了如何在OSGI应用中整合Spring和Mybatis框架,本篇文章开始介绍如何使用OSGI技术开发Web应用。对于传统的Java EE应用,应用中涉及到的Web元素无非就是Servlet、JSP、静态资源等,其中静态资源包括HTML页面、CSS、图片等等。当然还有Portlet、Filter、Listener等,由于不太常用,本文就不涉及这方面的内容了。

一、OSGI Web应用两种开发模式介绍

看过OSGI相关书籍的朋友应该都知道,OSGI Web应用开发有两种模式,第一种模式是在MANIFEST.MF文件中,通过一些元数据头,例如Web-ContextPath、Bundle-ClassPath等將Bundle定义为Web Application Bundle,简称WAB,然后在WAB中,可以像普通Java EE应用一样,在web.xml文件中配置Web应用的信息,然后將项目中所有的Bundle部署到应用服务器即可。由于这种方式依赖于外部的应用服务器,开发调试需要重新部署,和传统的Java EE项目相比,并没有什么特别的优势,这种开发模式本文就不做过多介绍,读者可以在网上找一些相关的资料,笔者后续如果有时间,会专门写篇文章详细介绍。

OSGI Web应用的另外一种开发模式是將Web应用服务器以Bundle的形式集成到OSGI容器(例如Equinox、Felix等)中。这种方式是笔者比较推崇的,下面会有一个小节介绍如何將Jetty服务器集成到Equinox容器中。传统的Java EE应用,除了Servlet需要在web.xml文件中声明外,JSP与静态资源只需要放在war包中,然后部署到应用服务器中,就可以在浏览器中访问(WEB-INF目录除外)。但是使用这种方式搭建Web应用环境,Servlet、JSP、静态资源统统都需要注册,相对来讲还是比较麻烦的,下面就来介绍如何將Jetty应用服务器整合到Equinox容器中。

二、將Jetty应用服务器整合到Equinox容器中

笔者选择Jetty应用服务器其实是有原因的,如果选择Tomcat或者Jboss,我们还需要另外从网上下载应用服务器的Bundle,但是Equinox框架本身就支持Jetty,下载Equinox框架,解压后如下图,它们即为Jetty应用服务器相关的Bundle。



將Jetty应用服务器整合到Equinox容器中非常简单,单击Run=>Debug Configurations菜单,进入Bundle管理工具界面,如下图:



勾选Jetty相关的Bundle,然后单击面板上的Validate Bundle按钮,如果发现有依赖问题,单击Add Required Bundles按钮即可。

接下来还需要配置应用服务器监听的端口,单击面板上的Arguments选项卡,在VM arguments输入框中增加如下参数:

-Dorg.osgi.service.http.port=8080

如下图所示:

然后单击Debug按钮,启动Equinox容器,这样Jetty应用服务器就整合到Equinox容器中了,很简单吧,我们可以打开浏览器访问http://localhost:8080/,如下图所示:

报404错误,表示找不到服务器端资源,纯属正常,本篇文章暂时介绍这么多,下篇文章继续介绍如何注册Servlet、JSP、静态资源等等。

转载请注明原文地址:http://blog.csdn.net/rongbo_j/article/details/54620177

注意:本文环境在上篇文章基础上搭建,前面部分文章提供了博文源码下载。

OSGI企业应用开发(十二)OSGI Web应用开发(一)的更多相关文章

  1. 十款让 Web 前端开发人员更轻松的实用工具

    这篇文章介绍十款让 Web 前端开发人员生活更轻松的实用工具.每个 Web 开发人员都有自己的工具箱,这样工作中碰到的每个问题都有一个好的解决方案供选择. 对于每一项工作,开发人员需要特定的辅助工具, ...

  2. 【转】十款让 Web 前端开发人员更轻松的实用工具

    这篇文章介绍十款让 Web 前端开发人员生活更轻松的实用工具.每个 Web 开发人员都有自己的工具箱,这样工作中碰到的每个问题都有一个好的解决方案供选择. 对于每一项工作,开发人员需要特定的辅助工具, ...

  3. 专题开发十二:JEECG微云高速开发平台-基础用户权限

      专题开发十二:JEECG微云高速开发平台-基础用户权限 11.3.4自己定义button权限 Jeecg中.眼下button权限设置,是通过对平台自己封装的button标签(<t:dgFun ...

  4. 敏捷宣言(Agile Manifesto)和敏捷开发十二原则

    敏捷宣言 The Agile Manifesto Individuals and interactions over Process and tools 个体与交互 重于 过程和工具 Working ...

  5. STC8H开发(十二): I2C驱动AT24C08,AT24C32系列EEPROM存储

    目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...

  6. 《Flask Web开发——基于Python的Web应用开发实践》一字一句上机实践(上)

    目录 前言 第1章 安装 第2章 程序的基本结构 第3章 模板 第4章 Web表单 第5章 数据库 第6章 电子邮件 第7章 大型程序的结构   前言 学习Python也有一个半月时间了,学到现在感觉 ...

  7. 十二、Android UI开发专题(转)

    http://dev.10086.cn/cmdn/bbs/viewthread.php?tid=18736&page=1#pid89255Android UI开发专题(一) 之界面设计 近期很 ...

  8. SpringBoot(二)Web整合开发

    Spring Boot (二):Web 综合开发 本篇文章接着上篇内容继续为大家介绍spring boot的其它特性(有些未必是spring boot体系桟的功能,但是是spring特别推荐的一些开源 ...

  9. 第十四章 web前端开发小白学爬虫

    老猿从事IT开发快三十年了,接触互联网也很久了,但自己没有做过web前端开发,只知道与前端开发相关的一些基本概念,如B/S架构.html标签.js脚本.css样式.xml解析.cookies.http ...

  10. ireport5.6+jasperreport6.3开发(二)--web开发的配置

    ireport5.6只能编译出*.jasper的报表包,最终报表需要被输出为一个doc html pdf excel等文件,这时就需要jasperreport6.5的库进行配合了. jasperrep ...

随机推荐

  1. [工具]渗透神器CobaltStrike 3.1.2 K8去后门破解版 & Windows版TeamServer

    CS简介 Cobalt Strike(简称CS)是全球黑客公认一款非常优秀的渗透测试神器,以metasploit为基础的GUI的框架式渗透工具,集成了传统远控功能(远程桌面VNC.键盘记录.CmdSh ...

  2. 关于AOP的PIAB

    AOP:面向切面编程,也就是在运行过程中,按照需要动态加载功能块 PIAB:含义可以从下面提取 Microsoft Patterns & Practices团队在2007年发布的Enterpr ...

  3. MySQL高可用架构-MMM安装教程

    安装指南: 一.架构以及服务器信息 基本安装包含至少2个数据库服务器和1个监视服务器.本例中使用2个监视服务器和5个数据库服务器(服务器系统为CentOS 7) 用途 IP 主机名 Server-id ...

  4. 10-01 Java 类,抽象类,接口的综合小练习--运动员和教练

    运动员和教练的案例分析 运动运和教练的案例 代码实现 /* 教练和运动员案例 乒乓球运动员和篮球运动员. 乒乓球教练和篮球教练. 为了出国交流,跟乒乓球相关的人员都需要学习英语. 请用所学知识: 分析 ...

  5. 学习推荐-Postgresql学习手册

    Postgresql之旅: http://www.cnblogs.com/stephen-liu74/archive/2012/06/08/2315679.html postgresql逻辑结构+权限 ...

  6. MySQL笔记(4)---表

    1.前言 上一章记录了MySQL中的一些文件组成,以及相关作用和参数配置,本章开始记录深层次的存储结构,以便更好理解MySQL的设计. 2.索引组织表 InnoDB中,表都是根据主键顺序组织存放的,这 ...

  7. Android使用bindService作为中间人对象开启服务

    Android使用bindService作为中间人对象开启服务 项目结构如下: MyService: package com.demo.secondservice; import android.ap ...

  8. linux下安装lnmp环境

    安装nginx   1 检查是否安装该程序: which nginx           #查看nginx是否存在 which php             #查看php是否存在 which mys ...

  9. 遍历 JSON JavaScript 对象树中的所有节点

    我想要遍历 JSON 对象树中,但为何找不到任何一间图书馆.这似乎是不难,但感觉就像重新发明轮子. 在 XML 中有很多教程演示如何遍历 XML DOM 树:( 解决方法 1: 如果你认为 jQuer ...

  10. window对象方法之setTimeout(),setInterval()

    window中的这两个方法是比较重要的,在许多的设计中会使用到这两个方法.比如使用在倒计时抢购中. 首先来说说这两个方法的用法吧! 一:window.setTimeout(); setTimeout( ...