169it科技资讯


当前位置:  编程技术>软件工程/软件设计
本页文章导读:
    ▪OSGi:生命周期层       前言 无论是标准的Java还是servlet,JavaEE,他们都有不同的生命周期管理机制,那么为什么我们都需要生命周期管理应用呢? 2 为什么要管理应用的生命周期 由于你构建的应用被模块化为.........
    ▪Javascript/Jquery——简单定时器      第一种方法:<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DT.........
    ▪java代码 发送GET、POST请求           /**      * 发送GET请求      *      * @param url url地址      * @return JSONObject      */     public static String getAjaxDataFro.........

[1]OSGi:生命周期层
    来源: 互联网  发布时间: 2013-11-19
前言

生命周期层在OSGi框架中属于模块层上面的一层,它的运作是建立在模块层的功能之上的。生命周期层一个主要的功能就是让你能够从外部管理应用或者建立能够自我管理的应用(或者两者的结合),并且给了应用本身很大的动态性。 

1 什么是生命周期管理

一般来说,程序(或者程序的一部分)都一定服从某种生命周期。软件的生命周期有4个典型的阶段,如下图:

如果你正在创建一个应用,首先你得安装(install)它;然后当这个应用的所有依赖都满足了,我们就可以执行(execute)这个应用;如果这个应用不需要了,我们可以停止(stop)它;过了一段时间,我们可能需要更新(update)这个应用的版本;最后,我们可能会移除(remove)这个应用,因为再也用不着了。

我们通过在外部或者内部对应用进行这些操作,完成对应用的“生命周期管理”过程。对于非模块化应用,这些操作就是以整个应用为对象的;如果是对于模块化应用,那么我们就可以有更细粒度(针对应用中的某个模块)的生命周期管理了。

无论是标准的Java还是servlet,JavaEE,他们都有不同的生命周期管理机制,那么为什么我们都需要生命周期管理应用呢?

2 为什么要管理应用的生命周期

上一章我们讲解了如何通过加入metadata来完成应用的模块化定义,但是这些元数据中只有对bunlde静态属性的介绍,而并没有提到一个应用的动态特征,比如某个特定的类或者对象在什么时候被需要和使用。

一般情况下,要想管理应用的生命周期,就得通过框架提供的API来完成。一套清晰明确的生命周期API使得你的应用可以对一段代码进行配置、初始化和维护。而OSGi标准就定义了这样的一套API,使得你能在bundle生命周期的各种阶段对其进行多种外部或内部操作,从而达到对bundle进行功能控制的目的。

由于你构建的应用被模块化为若干个部分,并且有了这些API之后你能对其中任意一个部分的去留和动作进行精确和即时的控制,那么你所构建的这个应用的灵活性就大大的提升了。如果没有生命周期管理,别人给你什么样的应用,你就只能使用什么样的应用,可控制性很低;而一旦有了生命周期管理,无论别人给你什么样的应用,你也能通过生命周期管理对这个已经模块化应用的行为(无论是启动、更新还是停止等等)进行精确控制。把应用每个部分都控制在自己的手中,是不是感觉非常棒?

3 OSGi bundle的生命周期

模块层的介绍中我们已经知道如何定义一个bundle,但是要想使用bundle,就得使用生命周期层的API,和OSGi框架的生命周期层进行交互。逐条详细介绍API会显得过于冗长(去看看OSGi标准吧),所以接下来会通过一个例子来大致讲解一下API提供给使用者的一些功能。

需要注意的是,OSGi框架的核心并没有强制使用任何特定的API交互机制(比如命令行,GUI,或者XML配置文件等),只是单纯的Java API而已,所以开发者可以任意创造出自己想要的交互模式,保证了框架的灵活性。

在标准的Java编程中,你会通过将jar包放到classpath中来使用它,而bundle则不是这样。Bundle只有在被安装(install)到一个OSGi框架的运行实例中才能用起来。并且OSGi框架支持对这些bundle完整的生命周期管理,并且支持这些管理操作在应用执行完成,其动态性可见一斑。

3.1 Bundle生命周期的状态转移图

这个图清晰的展现了bundle在生命周期中的各个状态和状态间的转移条件。 
我们可以通过Bundle的getState方法来获得bundle的当前状态。 
在这里需要说明的是Starting和Stopping状态,这两个状态是暂态,也就是说这两个状态在持续一会以后就会自动转移到下一个状态,不需要转移条件。

3.2 框架提供的三个重要接口

生命周期层的API主要是由以下三个核心接口来组成的:BundleActivator,BundleContext和Bundle。

• BundleActivator:让你能够捕捉bundle的start和stop事件,并对这两个事件作出自定义的反应。 
• BundleContext

    
[2]Javascript/Jquery——简单定时器
    来源: 互联网  发布时间: 2013-11-19
第一种方法:
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html>
 <head>
 <title>定时器</title>
 <script language="javascript" src="jquery-1.4.2.js"></script>
 <script language="javascript">
	//使用setInterval间歇调用 (不建议使用该方法)
	$(function(){
	 	setInterval(function(){
			$("#currentTime").text(new Date().toLocaleString());
	 	},1000);
	});
 </script>
 </head>
 <body>
 <div id="currentTime"></div>
 </body>
 </html> 

第二种方法:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <head>
 <title>定时器</title>
 <script language="javascript" src="jquery-1.4.2.js"></script>
 <script language="javascript">
	//使用setTimeout超时调用
	function startTime(){
		 $("#currentTime").text(new Date().toLocaleString());
		 setTimeout('startTime()',1000);
	 }
 </script>
 </head>
 <body onload="startTime()">
 <div id="currentTime"></div>
 </body>
 </html> 


第三种方法:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <head>
 <title>定时器</title>
 <script type="text/javascript">
    var c=0;
	var t;
	function timedCount(){
		document.getElementById('txt').value=c;
		c=c+1;
		t=setTimeout("timedCount()",1000);
	}

	function stopCount(){
		clearTimeout(t);
	}
 </script>
 </head>

 <body>
   <form>
     <input type="button" value="开始计时!" onclick="timedCount()"/>
     <input type="text" id="txt"/>
     <input type="button" value="停止计时!" onclick="stopCount()"/>
   </form>
 </body>
 </html>



 

作者:u010709330 发表于2013-6-21 16:02:26 原文链接
阅读:62 评论:0 查看评论

    
[3]java代码 发送GET、POST请求
    来源: 互联网  发布时间: 2013-11-19

     /**
     * 发送GET请求
     *
     * @param url url地址
     * @return JSONObject
     */

    public static String getAjaxDataFromURLForSMS(String url) {
        long begin = System.currentTimeMillis();
        LOG.info("request:" + url);
        String result = null;
        BufferedReader rd = null;

        try {
            URL u = new URL(url);
            InputStream is = u.openStream();
            rd = new BufferedReader(new InputStreamReader(is, "utf-8"));
            StringBuffer sb = new StringBuffer();

            String line;
            while ((line = rd.readLine()) != null) {
                sb.append(line);
            }

            long end = System.currentTimeMillis();
            LOG.info("response[" + (end - begin) + "]:" + sb.toString());
            result = sb.toString();

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if (rd != null) {
                try {
                    rd.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

        }

        return result;
    }
   


   /**

     * @return XMLData
     */
    public static Document getXMLDataFromURL(String url) {
        long begin = System.currentTimeMillis();
        LOG.info("request:" + url);
        SAXBuilder saxBuilder = new SAXBuilder();
        Document doc = null;
        try {
            URL u = new URL(url);
            InputStream in = u.openStream();

            doc = saxBuilder.build(in);

        } catch (Exception e) {
            e.printStackTrace();
        }
        if (LOG.isInfoEnabled()) {
            long end = System.currentTimeMillis();
            XMLOutputter outp = new XMLOutputter();
            LOG.info("response[" + (end - begin) + "]:" + outp.outputString(doc));
        }

        return doc;
    }



   /**

     * 发送GET请求
     *
     * @param url
     *            url地址
     * @return JSONObject
     */

    public static JSONObject getJSONDataFromURL(String url) {
        long begin = System.currentTimeMillis();
        LOG.info("request:" + url);
        JSONObject jsonObj = null;
        BufferedReader rd = null;

        try {
            URL u = new URL(url);
            InputStream is = u.openStream();
            rd = new BufferedReader(new InputStreamReader(is, "utf-8"));
            StringBuffer sb = new StringBuffer();

            String line;
            while ((line = rd.readLine()) != null) {
                sb.append(line);
            }

            long end = System.currentTimeMillis();
            LOG.info("response[" + (end - begin) + "]:" + sb.toString());
            jsonObj = new JSONObject(sb.toString());

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (JSONException e) {
            e.printStackTrace();
        } finally {
            if (rd != null) {
                try {
                    rd.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

        }

        return jsonObj;
    }







    /**
     * 发送POST请求
     *
     * @param url
     *            url地址 params 参数
     * @return JSONObject
     */

    public static JSONObject getJSONDataFromURL(String url, String params) {
        long begin = System.currentTimeMillis();
        LOG.info("request:" + url);
        JSONObject jsonObj = null;

        HttpURLConnection huc = null;
        BufferedReader in = null;
        InputStreamReader isr = null;
        InputStream is = null;

        StringBuffer sb = new StringBuffer(333);

        try {

            URL u = new URL(url);
            huc = (HttpURLConnection) u.openConnection();
            huc.setRequestMethod("POST");
            huc.setDoOutput(true);
            huc.getOutputStream().write(params.getBytes("utf-8"));
            huc.getOutputStream().flush();
            huc.getOutputStream().close();
            is = huc.getInputStream();
            isr = new InputStreamReader(is, "utf-8");
            in = new BufferedReader(isr);
            String line = null;

            while ((line = i

    
最新技术文章:
▪主-主数据库系统架构    ▪java.lang.UnsupportedClassVersionError: Bad version number i...    ▪eclipse项目出现红色叉叉解决方案
▪Play!framework 项目部署到Tomcat    ▪dedecms如何做中英文网站?    ▪Spring Batch Framework– introduction chapter(上)
▪第三章 AOP 基于@AspectJ的AOP    ▪基于插件的服务集成方式    ▪Online Coding开发模式 (通过在线配置实现一个表...
▪观察者模式(Observer)    ▪工厂模式 - 程序实现(java)    ▪几种web并行化编程实现
▪机器学习理论与实战(二)决策树    ▪Hibernate(四)——全面解析一对多关联映射    ▪我所理解的设计模式(C++实现)——解释器模...
▪利用规则引擎打造轻量级的面向服务编程模式...    ▪google blink的设计计划: Out-of-Progress iframes    ▪FS SIP呼叫的消息线程和状态机线程
▪XML FREESWITCH APPLICATION 实现    ▪Drupal 实战    ▪Blink: Chromium的新渲染引擎
▪(十四)桥接模式详解(都市异能版)    ▪你不知道的Eclipse用法:使用Allocation tracker跟...    ▪Linux内核-进程
▪你不知道的Eclipse用法:使用Metrics 测量复杂度    ▪IT行业为什么没有进度    ▪Exchange Server 2010/2013三种不同的故障转移
▪第二章 IoC Spring自动扫描和管理Bean    ▪CMMI简介    ▪目标检测(Object Detection)原理与实现(六)
▪值班总结(1)——探讨sql语句的执行机制    ▪第二章 IoC Annotation注入    ▪CentOS 6.4下安装Vagrant
▪Java NIO框架Netty1简单发送接受    ▪漫画研发之八:会吃的孩子有奶吃    ▪比较ASP和ASP.NET
▪SPRING中的CONTEXTLOADERLISTENER    ▪在Nginx下对网站进行密码保护    ▪Hibernate从入门到精通(五)一对一单向关联映...
▪.NET领域驱动设计—初尝(三:穿过迷雾走向光...    ▪linux下的块设备驱动(一)    ▪Modem项目工作总结
▪工作流--JBPM简介及开发环境搭建    ▪工作流--JBPM核心服务及表结构    ▪Eclipse:使用JDepend 进行依赖项检查
▪windows下用putty上传文件到远程Linux方法    ▪iBatis和Hibernate的5点区别    ▪基于学习的Indexing算法
▪设计模式11---设计模式之中介者模式(Mediator...    ▪带你走进EJB--JMS编程模型    ▪从抽象谈起(二):观察者模式与回调
▪设计模式09---设计模式之生成器模式(Builder)也...    ▪svn_resin_持续优化中    ▪Bitmap recycle方法与制作Bitmap的内存缓存
▪Hibernate从入门到精通(四)基本映射    ▪设计模式10---设计模式之原型模式(Prototype)    ▪Dreamer 3.0 支持json、xml、文件上传
▪Eclipse:使用PMD预先检测错误    ▪Jspx.net Framework 5.1 发布    ▪从抽象谈起(一):工厂模式与策略模式
▪Eclipse:使用CheckStyle实施编码标准    ▪【论文阅读】《Chain Replication for Supporting High T...    ▪Struts2 Path_路径问题
▪spring 配置文件详解    ▪Struts2第一个工程helloStruts极其基本配置    ▪Python学习入门基础教程(learning Python)--2 Python简...
▪maven springmvc环境配置    ▪基于SCRUM的金融软件开发项目    ▪software quality assurance 常见问题收录
▪Redis集群明细文档    ▪Dreamer 框架 比Struts2 更加灵活    ▪Maven POM入门
▪git 分支篇-----不断更新中    ▪Oracle非主键自增长    ▪php设计模式——UML类图
▪Matlab,Visio等生成的图片的字体嵌入问题解决...    ▪用Darwin和live555实现的直播框架    ▪学习ORM框架—hibernate(二):由hibernate接口谈...
▪(十)装饰器模式详解(与IO不解的情缘)    ▪无锁编程:最简单例子    ▪【虚拟化实战】网络设计之四Teaming
▪OSGi:生命周期层    ▪Javascript/Jquery——简单定时器    ▪java代码 发送GET、POST请求
▪Entity Framework底层操作封装(3)    ▪HttpClient 发送GET、POST请求    ▪使用spring框架,应用启动时,加载数据
▪Linux下Apache网站目录读写权限的设置    ▪单键模式的C++描述    ▪学习ORM框架—hibernate(一):初识hibernate
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2017,169IT.COM,E-mail:www_169it_com#163.com(请将#改为@)

浙ICP备11055608号