前面文章中介绍了如何在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. [原创]K8_C段旁注查询工具5.0 30款国外主流CMS识别+智能识别未知CMS

    8_C段旁注查询工具V5.0 20161214作者:K8拉登哥哥 唯一QQ:396890445平台: Windows + .NET Framework 4.0 简介:K8_C段 提供4种方式查询子域名 ...

  2. rabbitmq系列五 之远程过程调用(RPC)

    1.远程过程调用(RPC) 在第二篇教程中我们介绍了如何使用工作队列(work queue)在多个工作者(woker)中间分发耗时的任务. 可是如果我们需要将一个函数运行在远程计算机上并且等待从那儿获 ...

  3. Oracle死锁查询及批量处理

    一.数据库死锁的现象程序在执行的过程中,点击确定或保存按钮,程序没有响应,也没有出现报错. 二.死锁的原理当对于数据库某个表的某一列做更新或删除等操作,执行完毕后该条语句不提交,另一条对于这一列数据做 ...

  4. (转) lsof 一切皆文件

    原文:https://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/lsof.html lsof(list open files)是一个查看当前系统文 ...

  5. 关于C++11中的std::move和std::forward

    std::move是一个用于提示优化的函数,过去的c++98中,由于无法将作为右值的临时变量从左值当中区别出来,所以程序运行时有大量临时变量白白的创建后又立刻销毁,其中又尤其是返回字符串std::st ...

  6. OSRM笔记

    OSRM OSRM(OpenStreetMap Routeing Machine)可用于路线规划.作为高性能的路线规划引擎,OSRM使用C++14编写,基于开源的OpenStreetMap数据实现. ...

  7. Percona XtraDB Cluster

    简介 Percona XtraDB Cluster是MySQL高可用性和可扩展性的解决方案,Percona XtraDB Cluster提供的特性如下: 1.同步复制,事务要么在所有节点提交或不提交. ...

  8. Java反射机制二 获取方法的返回值或参数的泛型信息

    在使用反射机制时,我们经常需要知道方法的参数和返回值类型,很简单  ,下面上示例,示例中的两个方法非常相似 package deadLockThread; import java.lang.refle ...

  9. Spring MVC - MultipartFile实现文件上传(单文件与多文件上传)

    准备工作: 需要先搭建一个spirngmvc的maven项目 1.加入jar包 <dependency> <groupId>commons-fileupload</gro ...

  10. deque双端队列(常用方法总结)

    /*关于C++ STL中deque的学习*/ #include<cstdio> #include<iostream> #include<deque> using n ...