前面文章中介绍了如何在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. js缓存问题,修改js后代码不生效

    问题描述 最近在上线新版本项目的时候,发现有的用户的操作还是调用的老版本JS里面的内容,这样就造成原来新的JS里面加上的限制不能限制用户的操作,从而导致用户可以重复操作. 问题产生原因 如果在用户之前 ...

  2. Python网络练习题

    练习题 什么是C/S架构? C/S架构客户端.服务端架构,C/S端软件主要有网络游戏,QQ等 互联网协议是什么?分别介绍五层协议中每一层的功能? 互联网协议:计算机之间的通信标准 物理层:主要是基于电 ...

  3. dubbo管控台安装

    1. jdk安装 #  cp installpkgs/jdk-7u67-linux-x64_tar_gz /usr/local #  tar -zxf jdk-7u67-linux-x64_tar_g ...

  4. 06-01 Java 二维数组格式、二维数组内存图解、二维数组操作

    二维数组格式1 /* 二维数组:就是元素为一维数组的一个数组. 格式1: 数据类型[][] 数组名 = new 数据类型[m][n]; m:表示这个二维数组有多少个一维数组. n:表示每一个一维数组的 ...

  5. Ubuntu 16.04 服务器上配置使用 Docker

    Docker基础概念 在使用Docker之前,我们先了解下几个Docker的核心概念 Docker Daemon Docker引擎,就是运行在后台的一个守护进程,在我们启动它之后,我们就可以通过Doc ...

  6. 最大子数组问题/Maximum Subarray

    问题描述: Find the contiguous subarray within an array (containing at least one number) which has the la ...

  7. 理解 Generator 的执行

    Generator & yield 开局官宣:sec-generatoryield,这是对yield的介绍. 同样巴拉巴拉列了9条,将以上链接中的说明简化成3条: 1. 在GeneratorF ...

  8. spring boot 与 thymeleaf (4): 基本对象、工具类对象

    如果在前台, 我需要获取session中的信息, 或者需要获取url中的参数信息, 是不是需要在后台手动处理好, 然后放到Model中去, 在前台通过${}来取呢? 当然, 这种方式, 是可以的, 但 ...

  9. 【Vue.js实战案例】- Vue.js递归组件实现组织架构树和选人功能

    大家好!先上图看看本次案例的整体效果. 浪奔,浪流,万里涛涛江水永不休.如果在jq时代来实这个功能简直有些噩梦了,但是自从前端思想发展到现在的以MVVM为主流的大背景下,来实现一个这样繁杂的功能简直不 ...

  10. set集合容器(常用的使用方法总结)

     关于C++STL中set集合容器的学习,看别人的代码一百遍,不如自己动手写一遍. 构造set集合容器的目的是为了去重+排序+快速搜索.由于set集合容器实现了红黑树多的平衡二叉检索树的数据结构,在插 ...