ivaneeo's blog

自由的力量,自由的生活。

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  669 Posts :: 0 Stories :: 64 Comments :: 0 Trackbacks

#

Linux
一旦内核加载完成,内核会启动 init 进程,然后运行 rc6 脚本,之后运行所有属于其运行级别的命令脚本。这
些脚本都储存在 /etc/rc.d/rcN.d 中(N代表运行级别),并且都建立着到 /etc/init.d 子目录中命令脚本程序
的符号链接。
默认运行级别配置在 /etc/inittab 中。它通常为 3 或 5:

 # grep default: /etc/inittab
 id:3:initdefault:

可以使用 init 来改变当前运行级别。举个例子:

 # init 5                       # 进入运行级别 5

运行级别列表如下:
0 系统停止
1 进入单用户模式(也可以是 S)
2 没有 NFS 特性的多用户模式
3 完全多用户模式(正常操作模式)
4 未使用
5 类似于级别3,但提供 XWindow 系统登录环境
6 重新启动系统
使用 chkconfig 工具控制程序在一个运行级别启动和停止。

 # chkconfig --list             # 列出所有 init 脚本
 # chkconfig --list sshd        # 查看 sshd 在各个运行级别中的启动配置
 # chkconfig sshd --level 35 on # 对 sshd 在级别 3 和 5 下创建启动项
 # chkconfig sshd off           # 在所有的运行级别下禁用 sshd

Debian 和基于Debian 发行版像 Ubuntu 或 Knoppix 使用命令 update-rc.d 来管理运行级别脚本。默认启动为
2,3,4 和 5,停止为 0,1 和 6。

 # update-rc.d  sshd defaults          # 设置 sshd 为默认启动级别
 # update-rc.d  sshd start 20 2 3 4 5 . stop 20 0 1 6 . # 用显示参数
 # update-rc.d  -f sshd remove         # 在所有的运行级别下禁用 sshd
 # shutdown -h  now (或者 # poweroff)    # 关闭停止系统

FreeBSD
BSD 启动步骤不同于 SysV, 她没有运行级别。她的启动状态(单用户,有或没有 XWindow)被配置在 /etc/
ttys中。所有的系统脚本都位于 /etc/rc.d/中,第三方应用程序位于 /usr/local/etc/rc.d/中。service 的启
动顺序被配置在 /etc/rc.conf 和/etc/rc.conf.local中。默认行为可在 /etc/defaults/rc.conf 中进行配
置。 这些脚本至少响应 start|stop|status.

 # /etc/rc.d/sshd status
 sshd is running as pid 552.
 # shutdown now                        # 进入单用户模式
 # exit                                # 返回到多用户模式
 # shutdown -p now                     # 关闭停止系统
 # shutdown -r now                     # 重新启动系统

同样可以使用进程 init 进入下列状态级别。举个例子: # init 6 为重启。
0 停止系统并关闭电源 (信号 USR2)
1 进入单用户模式 (信号 TERM)
6 重新启动 (信号 INT)
c 阻止进一步登录 (信号 TSTP)
q 重新检查 ttys(5) 文件 (信号 HUP)

在FreeBSD下,查看系统的内核安全级别可以用命令:

sysctl -a |grep securelevel

 

posted @ 2011-10-20 14:51 ivaneeo 阅读(295) | 评论 (0)编辑 收藏

用ssh登录一个机器(换过ip地址),提示输入yes后,屏幕不断出现y,只有按ctrl + c结束

 

错误是:The authenticity of host 192.168.0.xxx can't be established.

 

以前和同事碰到过这个问题,解决了,没有记录,这次又碰到了不知道怎么处理,还好有QQ聊天记录,查找到一下,找到解决方案:

 

执行ssh  -o StrictHostKeyChecking=no  192.168.0.xxx 就OK

posted @ 2011-10-10 18:30 ivaneeo 阅读(1363) | 评论 (0)编辑 收藏

先说flash as3吧,可以用root.loaderInfo.parameters

AS3类 GSPManager.as 代码:   

package
{
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.text.TextField;    
    public class GSPManager extends Sprite
    {
        public 
function GSPManager()
        {
            
this.addEventListener(Event.ADDED_TO_STAGE,addedToStageHandler);
        }
        
        private 
function addedToStageHandler(e:Event):void
        {
            
this.removeEventListener(Event.ADDED_TO_STAGE,addedToStageHandler);
            
            init();
        }
        private 
function init():void
        {            
            
var out_txt:TextField = new TextField();
            
//边框
            out_txt.border = true;
            
//边框颜色
            out_txt.borderColor = 0x80FF3300;
            
//大小
            out_txt.width = 100;
            out_txt.height 
= 20;
            
//位置
            out_txt.x = (stage.stageWidth - out_txt.width)/2;
            out_txt.y = (stage.stageHeight - out_txt.height)/2;
            //添加到舞台
            addChild(out_txt);
            
            
//获得参数对象
            var param:Object = root.loaderInfo.parameters;
              
if (param["name"]!=null
            {
                      out_txt.text 
= param["name"+ param["num"];
                      trace(
"value:"+param["name"]);
                              
//判断
              } 
            
else 
            {
                    out_txt.text 
= "null";
                    trace(
"value:null");
              }
        }        
    }
}

GetSwfParam.fla 绑定的文档类为GSPManager.as ,在文档类绑定框里写GSPManager这个就可以了

之后编译出来的GetSwfParam.swf 就可以添加到页面了

Java web页面代码:  

<%@ page language="java" import="java.util.*" contentType="text/html;charset=GBK"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  
<head>
  
</head>
  
  
<body>
    
<object id="g" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/_cabs/flash/swflash.cab#version=6,0,29,0" width="300" height="200">
      
<param name="movie" value="GetSwfParam.swf?name=sange&num=66" />
    <param name="quality" value="high" />
    <param name="allowScriptAccess" value="sameDomain" />    
    <param name="scale" value="exactfit" />
    <embed name="g" src="GetSwfParam.swf" quality="high" scale="exactfit" align="middle" play="true" loop="false" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="300" height="200" ></embed>
  </object>
  </body>
</html>

 

 这里要说的是swf后有很多参数就用&符号 , 比如GetSwfParam.swf?name=sange&num=66&id=1

 

现在说Flex了,因为让同事也做了这样的东西,但他只会Flex,他没弄出来,所以我试下,发现用root没反映,但我很肯定Flex应该也可以弄出来,发现跟flash as3确实不同,不能用root,因为Flex中没有root这个概念。问了群里的人,收获大了,原来就Application,哈哈,不就是根节点么,也就相当于root,就是名称不一样。

Flex就用Application.application.parameters

GetSwfParam.mxml 代码: 

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" backgroundColor="#ffffff" layout="absolute" creationComplete="init()">
    
<mx:Script>
        
<![CDATA[
            private 
function init():void
            {
                
//获得参数对象                
                var param:Object = Application.application.parameters;
                
if(param["name"!= null)
                {
                    mytxt.text 
= param["name"];
                }
                
else
                {
                    mytxt.text 
= "null";
                }
            }
        ]]
>
    
</mx:Script>
    <mx:TextInput id="mytxt" x="60" y="47"/>
</mx:Application>

 

把编译好的swf添加到页面就可以了。同上,Java web页面代码不变。

posted @ 2011-09-27 14:53 ivaneeo 阅读(323) | 评论 (0)编辑 收藏

Flex页面跳转的五种实现方式

2010-08-13 13:25 Dboyqiao javaeye.com 我要评论() 字号:T | T
一键收藏,随时查看,分享好友!

Flex页面跳转有很多值得学习的地方,本文向大家介绍一下Flex页面跳转的几种方式,主要包括五种方式,这里为大家一一介绍。

AD:

在学习Flex的过程中,你可能会遇到Flex页面跳转的概念,这里和大家分享一下Flex中实现Flex页面跳转以下几种方式,相信本文介绍一定会让你有所收获。

Flex页面跳转

Flex中实现Flex页面跳转以下几种方式:

Flex页面跳转方式一:使用ViewStack组件,把要跳转的页新建成MXMLComponent,然后通过ViewStack组件把这些页包含进来,然后再通过改变ViewStack的selectedItem或者selectedChild来切换这些页。

  1. <mx:ViewStackidmx:ViewStackid="storeViews"width="100%"height="550" 
  2. creationPolicy="all"> 
  3. <shouyeidshouyeid="homeView"label="首页"showEffect="WipeDown"hideEffect="WipeUp"/> 
  4. <leixingidleixingid="pView"label="模板类型"showEffect="WipeDown"hideEffect="WipeUp"/> 
  5. <makeidmakeid="supportView"label="立即制作"showEffect="WipeDown"hideEffect="WipeUp"/> 
  6. </mx:ViewStack> 
  7. <mx:Buttonclickmx:Buttonclick="storeViews.selectedChild=homeView;"/> 
  8.  

Flex页面跳转方式二:使用navigateToURL,主要方式如下:

  1. varurl:String="http://localhost:8080/Flex_Java_Demo/  
  2. welcome.html";  
  3. varrequest:URLRequest=newURLRequest(url);  
  4. navigateToURL(request,"_blank");  
  5.  

这个方法实现Flex页面切换时会弹出新的页面,而不是只变换url

Flex页面跳转方式三:引用flash中的importflash.external.ExternalInterface这个接口,它能提供像jsp中window.location.href方法一样方便,主要代码为:
 

  1. ExternalInterface.call("function(){window.location.  
  2. href='http://localhost:8080/Flex_J2eeDemo  
  3. /bin/Welcome.html';}");  

Flex页面跳转方式四:使用组件技术,把不同的页面做成component,然后通过TabNavigator等进行切换,通过使用state实现跳转。

Flex页面跳转方式五:把不同的页面做成Module,然后使用ModuleLoder来进行加载切换。

【编辑推荐】

  1. 实现Flex页面跳转行之有效的办法
  2. 四种方式实现Flex页面跳转
  3. 全面认识Flex应用程序的六大元素
  4. 揭开Flex正则表达式的神秘面纱
  5. Flex数据绑定及其使用频繁的几种情况 


 

【责任编辑:程华权 TEL:(010)68476606】

网友评论TOP5

查看所有评论(

提交评论
通行证: 密码:   注册通行证


验证码: 请点击后输入验证码 匿名发表

posted @ 2011-09-27 14:47 ivaneeo 阅读(1486) | 评论 (0)编辑 收藏

flash builder 4.5注册方法
2011-06-30 12:53

先在C:\Windows\System32\drivers\etc的hosts文件中添加以下内容,(用记事本打开就行):

127.0.0.1 activate.adobe.com
127.0.0.1 practivate.adobe.com
127.0.0.1 ereg.adobe.com
127.0.0.1 activate.wip3.adobe.com
127.0.0.1 wip3.adobe.com
127.0.0.1 3dns-3.adobe.com
127.0.0.1 3dns-2.adobe.com
127.0.0.1 adobe-dns.adobe.com
127.0.0.1 adobe-dns-2.adobe.com
127.0.0.1 adobe-dns-3.adobe.com
127.0.0.1 ereg.wip3.adobe.com
127.0.0.1 activate-sea.adobe.com
127.0.0.1 wwis-dubc1-vip60.adobe.com
127.0.0.1 activate-sjc0.ado


这是注册:
1424-4938-3077-5736-3940-5640
1424-4827-8874-7387-0243-7331

posted @ 2011-09-26 17:28 ivaneeo 阅读(474) | 评论 (0)编辑 收藏

Flash Builder 4.5高级版试用版免费高速下载

Company: Adobe

vcr.cover

官方下载地址:http://trials3.adobe.com/AdobeProducts/FLBR/4_5/win32/FlashBuilder_4_5_LS10.exe

1424-4827-8874-7387-0243-7331
1424-4938-3077-5736-3940-5640
 

FB4.5 序列号 Flex4.5   5月17日发布,本人的用第一个已经激活成功,大家看看还能用不。

Adobe Flash Builder 4.5 软件(曾为 Adobe Flex Builder)是基于 Eclipse的开发工具,使用 ActionScript 和开源 Flex 框架快速构建具有表现力的移动、Web 和桌面应用程序。

最具表现力的体验

创建更直观和更具吸引力的 Web 应用程序,帮助人们理解并使用数据以支持重要的业务活动,从而提高生产力和工作效率。

用于 Android、iOS 和 RIM 的移动应程序

受益于对移动应用程序开发和测试的新支持,可以使用通用代码库构建用于 Android、Apple iOS和 Blackberry Tablet OS的应用程序,同时共享 Web 应用程序的代码。

更具生产力,功能更强大

使用广泛新工具功能和改进的工具功能加速 Flex 和 ActionScript 项目的代码编写和测试过程。

新集成的 PHP 工具支持

使用 Flash Builder 4.5 for PHP 中的 Zend Studio 8 软件完整副本,获得最佳的 Flex/PHP 开发体验。

Adobe官方下载(本地服务器)

Adobe官方下载(国外服务器)

本文件大小为581.2M,Adobe独家提供本地高速下载,您可以通过浏览器直接点击下载或者通过下载加速器(如迅雷、QQ旋风)下载,实际的下载速度和您的实际网络环境相关。考虑到文件较大,我们推荐您使用具有断点续传功能的下载加速器辅助下载。

官方下载地址:http://trials3.adobe.com/AdobeProducts/FLBR/4_5/win32/FlashBuilder_4_5_LS10.exe

1424-4827-8874-7387-0243-7331
1424-4938-3077-5736-3940-5640
 

FB4.5 序列号 Flex4.5   5月17日发布,本人的用第一个已经激活成功,大家看看还能用不。

posted @ 2011-09-26 16:58 ivaneeo 阅读(1139) | 评论 (1)编辑 收藏

引言

Apache Axis2(主要的开源 Web 服务平台之一)提供了一系列新功能,最为可贵的是,其中的很多功能都对向开发人员提供更为用户友好的方法起到了促进作用。在之前的 Axis 版本中,并不十分重视用户友好性。例如,在 Axis1 中,用户必须手动调用管理客户机并更新服务器类路径,然后重新启动服务器以应用更改。这个有点麻烦的部署模型对新手肯定是一道障碍。因此,Axis2 经过了精心的设计,能够克服此缺点,并提供更为灵活、可方便进行配置的部署模型。

Axis2 部署新功能

Axis2 部署模型将一系列新功能引入了 Apache Web 服务堆栈中(其中一些功能对于 Web 服务范式并非新事物)。以下列出了最为重要的主要更改和新功能:

  • 类似于 Java™ 2 Platform Enterprise Edition (J2EE) 的部署机制(基于存档)
  • 热部署和热更新
  • 存储库(可以在其中放置服务和模块)
  • 处理程序(模块)部署的更改
  • 新部署描述符
  • 多个部署选项

在下面的内容中,我们将逐个对每个方面进行详细讨论。

回页首

类似于 J2EE 的部署机制

在任何 J2EE 应用服务器中,都可以将应用程序作为自包含包部署,可以将所有的资源、配置文件和二进制文件打包为一个文件并进行部署。这显然非常实用,而也正是因为如此,Axis2 也引入了相同的机制来更方便地部署服务(和模块)。

考虑这样的情况,假如您有一个存在多个第三方依赖关系和一组属性文件的服务,同时假定没有类似于 J2EE 的部署机制。必须手动将所有这些依赖 JAR 文件和属性文件放入类路径中。如果有一个或两个服务器,这项工作的量将翻倍!在存在数百副本的集群环境中,将依赖 JAR 文件和其他资源添加到类路径中的做法并不实际。有了类似于 J2EE 的部署机制后,就没有这些问题了,只需要将服务放入副本中,而不需要进行任何其他工作了。

Axis2 自包含包(或存档文件)的内部结构如图 1 中所示。两种 Axis2 服务(存档和模块存档)非常相似。二者之间的细微差别包括:

  • 对于 Axis 服务,描述符文件是 services.xml;而对于 Axis 模块,描述符文件是 module.xml。
  • Axis2 服务的文件扩展名是 .aar(服务的文件名将为 foo.aar),模块的文件扩展名为 .mar(模块的文件名将为 foo.mar)。

图 1. 存档文件的结构
存档文件的结构 

回页首

热部署和热更新

对于企业级应用程序,可用性是一个大问题。即使短时间的停机都可能带来很大损失,因此重新启动服务器并不是一个较好的做法。需要在不用关闭系统的情况下对其进行更新。而这就是热部署和热更新的用武之地。热部署和热更新是 Apache Web 服务堆栈(如 Axis 和 Axis2)中的新功能。这两个新功能如下所述:

  • 热部署是指在系统启动并运行的情况下部署新服务的能力。例如,假定您有两个服务——service1 和 service2——已启动并运行,现在要在不用关闭系统的情况下部署名为 service3 的新服务。部署 service3 就是一个热部署场景。作为系统管理员,如果不喜欢服务的热部署,则可以通过更改名为 axis2.xml 的 Axis2 全局配置文件,将全局配置参数更改为以下所示,从而关闭此功能:<parameter name="hotdeployment">false</parameter>
  • 热更新是指在不关闭系统的情况下更改现有 Web 服务的能力。这是一个重要的特性,是测试环境中需要的一个功能。不过,在实时系统中使用热更新并不明智,因为这可能导致系统进入未知状态。此外,还可能会丢失该服务的现有服务数据。为了防止出现这种情况,Axis2 缺省将热更新参数设置为 FALSE。如果希望使用此功能,请按照以下所示更改配置参数,从而启用此功能:<parameter name="hotupdate">true</parameter>

回页首

存储库

Axis2 存储库实际上就是文件系统中具有特定结构的目录。它可以位于本地,也可以位于远程计算机上。之所以引入存储库概念,目的是为了方便地支持基于存档的热部署功能。

存储库目录包含两个主要子目录,分别名为 services 和 modules。还可能有一个可选的子目录,名为 lib。如果希望部署服务,需要将服务存档文件放入 services 目录中。类似地,如果希望部署模块,请将模块存档文件放入 modules 目录。对于 lib 目录,要将其作为放置对服务和模块公用的第三方库的位置。图 2 显示了存储库的图形表示形式。


图 2. Axis2 存储库
Axis2 存储库 

注意:如果 modules 目录中的部分或全部模块希望共享某些资源,可以将这些资源添加到 modules 目录中的 lib 目录内。类似地,如果 services 目录中的全部或部分服务希望共享公共资源,恰当的位置是在 services 目录内的 lib 目录。

回页首

处理程序(模块)部署的更改

服务扩展(或模块)的概念是 Apache Axis 范式的一个新功能。其基本思想是对系统的核心功能进行扩展或提供服务质量保证。对于 Axis1,如果希望扩展其核心功能,则需要编写处理程序(执行链中的最小单位),更改全局配置文件添加该处理程序,最后要重新启动系统。

模块进行相同的工作,但会减少所需进行的工作量。同时,模块可以通过使用模块描述文件 modul.xml 来包含一个或多个处理程序。大多数情况下,模块是特定 WS 规范的实现,例如 Axis2 addressing 模块就是 WS-Addressing 的实现。

如前面提到的,可以将模块作为存档文件部署。模块存档文件的结构如图 3 中所示。


图 3. 模块存档文件的结构 
模块存档文件的结构  

回页首

新部署描述符

Axis2 的灵活性和可扩展性的重点是其部署描述符。将不再仅处理一个配置文件,而是针对不同的配置级别有不同的配置文件。例如,如果希望向系统添加处理程序,则没有必要更改全局配置;可以通过仅更改模块配置文件来完成此工作。Axis2 中有三种类型的描述符或配置文件:

  • 全局描述符 (axis2.xml)
  • 服务描述符 (services.xml)
  • 模块描述符 (module.xml)

在全局描述符中,所有系统级的配置都在 axis2.xml 中给出,包括以下内容:

  • 参数
  • 传输发送方
  • 传输侦听器
  • 阶段
  • 全局模块

Axis2 提供了缺省 axis2.xml。其中包含启动 Axis2 所需的最小配置,但可以自由对其进行更改,从而使用您自己的 axis2.xml 启动 Axis2。务必注意,如果对 axis2.xml 进行了任何更改,则必须重新启动系统,以使这些更改生效。

在服务描述符中,由 services.xml 给出关于服务的配置。为了使服务有效,需要在服务存档文件中包含 services.xml 文件。服务配置文件包含以下内容:

  • 服务级别的参数
  • 服务的描述
  • 消息接收方
  • 需要作为 Web 操作(服务中的操作)公开的操作
  • 服务级别的模块

模块描述符文件 (module.xml) 包含将模块插入到系统中所需的配置数据。主要配置包括以下方面:

  • 处理程序及其阶段规则
  • 模块参数

务必注意,module.xml 还可能包含以下元素:

  • 关于模块的描述(及其实现的规范)
  • 端点(对于可靠消息传递的情况,就是类似于 create sequence 的端点)

回页首

Axis2 中可用的部署方法

在 Axis2 中,可采用三种主要方式部署服务:

  • 将服务存档文件放入存储库中。
  • 使用存档文件以编程方式创建服务。
  • 将服务作为传统 Java 对象(Plain Old Java Object,POJO)部署。

在 Axis2 中,部署服务的最常用方法是直接将服务存档文件复制或放置到存储库中(services 目录)。如果使用基于 Axis2 WAR 文件的分发版本,则有两个选择:

  • 手动将存档文件放置到存储库中。
  • 使用 Web 控制台上载服务。

以编程方式部署并非用户需求,而是模块创建者的需求,因为某些模块要求 Web 服务的部署提供模块的全部功能。若要以编程方式创建服务,需要使用 services.xml、类加载器(可用于加载您的类文件)和 AxisConfiguration。此方法的优势在于,您并不需要将服务存档文件复制到存储库中,而且仅在运行时服务才可见。清单 1 可帮助您形成对编程服务部署方法的基本认识。


清单 1. 编程服务部署
                AxisConfiguration axisConfig;  // you need to have reference to AxisConfiguration  File file = new File("Location of the file""); ClassLoader clsLoader = new URLClassLoader(new URL[]{file.toURL()}); InputStream in = new FileInputStream("location of service.xml"); AxisService service = DeploymentEngine.buildService(in, clsLoader, axisConfig); 

使用 Java 类部署服务是 Axis2 中提供的一项使用非常方便的功能,在这种情况下没有必要生成服务存档文件或 services.xml。唯一的要求是,必须在创建服务前将 Java 类放入类路径中。在运行时,可以由模块或服务创建新服务并进行部署。在 Axis2 中部署 POJO 仅需要三行代码,如清单 2 中所示。


清单 2. 在 Axis2 中部署 POJO
                AxisService service = AxisService.createService(  MyService.class.getName(), axisConfig, RPCMessageReceiver.class); axisConfig.addService(service); 

回页首

总结

Axis2 在这里并不是证明 Web 服务概念,而是提供更好的 SOAP 处理模型,且相对于 Axis1 及其他现有 Web 服务引擎而言,此模型在速度和内存方面性能有了很大的改善。此外,它还提供了方便的部署机制。现在已经进入 Axis2 的时代了!

posted @ 2011-08-24 16:27 ivaneeo 阅读(308) | 评论 (0)编辑 收藏

一、环境安装(tomcat,本人5.5): 
首先下载到官方网站下载axis2 war包。 
将war包复制到webapps目录下边,启动tomcat,服务器加载了war包后会生成axis2目录,跟我们平时的应用目录没神马区别,唯一要注意的是axis的配置文件在WEB-INFconf, 
在开发过程中要修改一下这个的配置文件。 

二、(改造配置文件): 
配置axis2的文件,axis2支持热部署,意味着你可以再编译好的class文件,直接复制到pojo目录下(默认是pojo,等会有说明修改)。 
在配置文件中找到<parameter name="hotdeployment">true</parameter>默认已经为热部署; 
另外一个在开发过程中你常需要把热更新打开,默认是false 不打开,找到hotupdate 
<parameter name="hotupdate">true</parameter> 
发布pojo的目录只是默认的,如果需要使用其他的目录,需要添加配置元素,在axisconfig下面添加 
<deployer extension=".class" directory="mymulu" class="org.apache.axis2.deployment.POJODeployer"/> 
上面的配置文件只需要修改 directory的属性,改为目录名 

二、(使用POJO方式发布webservice): 
在pojo目录(此目录没有,在axis2WEB-INF下面创建,其实细心的同学会发现,在配置文件axis就已经给我们定义了pojo目录,看前面添加发布pojo目录)下面的webservice可以通过重写url去访问(后面带一些参数,类似action),如果遇到数据类型则需要做转换,原因传输过程是以字符串形式传输,而且重写URL的参数名必须要与方法的参数名相同。感觉比较土的方法 

好吧说了那么多,现在让我们来个helloworld吧~!! 
首先我们先发布一个webservice, 
编写一个MyTest类

public class MyTest { 	 	public String getString(String str){ 		System.out.println("调用了getString()传入参数"+str); 		return str; 	} 	public void doNoThing(String str){ 		System.out.println("调用了doNothing()传入参数:"+str); 	}  } 


1.启动你的tomcat,访问这个url:http://127.0.0.1:8080/axis2/ (确保axis2是正常运行了), 
2.神马,没改配置文件,好吧,就在%tomcat_home%webappsaxis2WEB-INF下面建立一个pojo文件夹。编写好的类编译成class文件后,直接复制到你所指定的目录下。 
3.最后访问你的服务吧http://127.0.0.1:8080/axis2/services/MyTest?wsdl 


现在开始客户端开发,这里省略了使用axis的API开发客户端,个人觉得这样的开发效率好低吖,新手上手(本人懒的去看那个API),应该快速掌握怎么使用,所以这里介绍stub方式,使用了axis自带的命令,可以根据wsdl生成客户端,在%AXIS2_HOME%in目录下有一个wsdl2java脚本(注意是wsdl to java)。 
前提准备 
下载了axis2 bin 文件,配置环境变量 例如: 
变量名:AXIS2_HOME  
值:E:studywebserviceaxis2-1.5.4-binaxis2-1.5.4 

这里要用到前面的发布的webservice,保持你的服务器是启动的,你的服务正常。 
打开CMD 
输入下面的命令 
%AXIS2_HOME%/bin/wsdl2java -uri http://localhost:8080/axis2/services/MyTest?wsdl -p com.lj.mywebservice  -s -o c:/mywebservice 

这里说一下参数, -uri 当然是服务的wsdl文件地址,-p 报名 , -o 表示目录,这里写的是绝对路径,也可以写相对路径 

回车,你会发现在C盘下多了一个文件目录,打开里边一层层进去后,有一个MyTestStub类,这个类实现非常复杂,不用管他,拿过来直接用。 
新建一个工程,写个测试类,把刚才生成的类复制进去,当然别忘记了引入axis的jar包。

package com.lj.myswebservice;  import java.rmi.RemoteException;  import org.apache.axis2.AxisFault;  public class TestClass { 	public static void main(String[] args) { 		 		try { 			MyTestStub my=new MyTestStub(); 			//在MYTestStub里边定义了三个静态嵌套类,分别作为参数对象,返回值对象。 			//这里定义了donothing方法的参数对象 			MyTestStub.DoNoThing donothing=new MyTestStub.DoNoThing(); 			//这里定义了getstring方法的参数对象 			MyTestStub.GetString getstring=new MyTestStub.GetString(); 			////这里定义了getString方法的返回值对象 			MyTestStub.GetStringResponse getstringresponse=new MyTestStub.GetStringResponse(); 			//设置参数值 			donothing.setArgs0("神马也不做啊"); 			//设置参数值 			getstring.setArgs0("我是帅锅"); 			//调用donothing方法 			my.doNoThing(donothing); 			//调用getString发放,设置参数,并返回值 			getstringresponse=my.getString(getstring); 			//打印返回值 			System.out.println(getstringresponse.get_return()); 		} catch (AxisFault e) { 			// TODO Auto-generated catch block 			e.printStackTrace(); 		} catch (RemoteException e) { 			// TODO Auto-generated catch block 			e.printStackTrace(); 		} 		 	} }  


运行结果如下。 
<!--StartFragment -->

 
服务器结果如下。 
<!--StartFragment -->



总结,使用axis2构建服务是非常快的,这个例子使用的是deploy pojo的方式发布服务,所谓pojo就是个普通的JAVA类,与javabean区别就是不一定有get set方法(是不是这样理解?)。在客户端调用服务的时候,采取stub方式(貌似现在很流行,这样编写客户端是灰常直观的),只要拿到wsdl文件,就可以使用 wsdl2java命令生成客户端,大大减少了开发量。

还差得远( ⊙ o ⊙ )啊!··明晚再看看别的方式发布鸟··

晚了睡觉了··明天早起上班( ⊙ o ⊙ )啊!···

posted @ 2011-08-24 11:08 ivaneeo 阅读(676) | 评论 (0)编辑 收藏

www.s135.com 和 blog.s135.com 域名均指向 Nginx 所在的服务器IP。

  用户访问http://www.s135.com,将其负载均衡到192.168.1.2:80、192.168.1.3:80、192.168.1.4:80、192.168.1.5:80四台服务器。

  用户访问http://blog.s135.com,将其负载均衡到192.168.1.7服务器的8080、8081、8082端口。

  以下为配置文件nginx.conf:

引用
user  www www;

worker_processes 10;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;

#最大文件描述符
worker_rlimit_nofile 51200;

events
{
      use epoll;

      worker_connections 51200;
}

http
{
      include       conf/mime.types;
      default_type  application/octet-stream;

      keepalive_timeout 120;

      tcp_nodelay on;

      upstream  www.s135.com  {
              server   192.168.1.2:80;
              server   192.168.1.3:80;
              server   192.168.1.4:80;
              server   192.168.1.5:80;
      }

      upstream  blog.s135.com  {
              server   192.168.1.7:8080;
              server   192.168.1.7:8081;
              server   192.168.1.7:8082;
      }

      server
      {
              listen  80;
              server_name  www.s135.com;

              location / {
                       proxy_pass        http://www.s135.com;
                       proxy_set_header   Host             $host;
                       proxy_set_header   X-Real-IP        $remote_addr;
                       proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
              }

              log_format  www_s135_com  '$remote_addr - $remote_user [$time_local] $request '
                                '"$status" $body_bytes_sent "$http_referer" '
                                '"$http_user_agent" "$http_x_forwarded_for"';
              access_log  /data1/logs/www.log  www_s135_com;
      }

      server
      {
              listen  80;
              server_name  blog.s135.com;

              location / {
                       proxy_pass        http://blog.s135.com;
                       proxy_set_header   Host             $host;
                       proxy_set_header   X-Real-IP        $remote_addr;
                       proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
              }

              log_format  blog_s135_com  '$remote_addr - $remote_user [$time_local] $request '
                                '"$status" $body_bytes_sent "$http_referer" '
                                '"$http_user_agent" "$http_x_forwarded_for"';
              access_log  /data1/logs/blog.log  blog_s135_com;
      }
}

  附:Nginx 的安装方法可参照《Nginx 0.5.31 + PHP 5.2.4(FastCGI)搭建可承受3万以上并发连接数,胜过Apache 10倍的Web服务器》文章的以下段落(仅做负载均衡,无需支持PHP的安装方法):

  二、安装PHP 5.2.4(FastCGI模式)
  4、创建www用户和组,以及其使用的目录:

  三、安装Nginx 0.5.31
  1、安装Nginx所需的pcre库:
  2、安装Nginx
  3、创建Nginx日志目录
  5、启动Nginx
posted @ 2011-08-16 11:55 ivaneeo 阅读(267) | 评论 (0)编辑 收藏

vc2008确实好使,不过缺陷也非常明显,只要是它编译的东西,在其他电脑经常会出现无法顺利运行的情况,最常见的错误就是:“由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题。”

经过各种努力,最后发现,一般情况下只需要安装一下vcredist_x86.exe这个vc的可重发行组件包就可以了。其主要原理是因为vc2008的版本比较高,其编译时链接的相关dll版本比xp下的高太多,而我们在xp下运行的时候调用的是老版本的dll,所以出现了问题。安装新版的可重发行组件包后,旧版本的dll被替换成新版本的,问题就解决了。

可是又出现了新的问题,总不能让用户使用我们软件的时候,非要去安装其他组件吧~~而且,其他很多软件都是用vc开发的,这些软件为什么不需要呢?本着钻牛角尖的态度,进行了更深一步的探索;

最近研究ccv,突然发现ccv的bin目录下有一个Microsoft.VC90.CRT目录,下面有几个dll文件,还有一个manifast文件。看到这个不禁眼前一亮,在我的程序中把这几个文件打包进去就ok了吧?于是进行尝试,查找本机安装vs2008目录下的Microsoft.VC90.CRT目录一顿cp,结果,很沮丧,测试失败~~告一段落~~

某天又在网上发现有人在帖子里的回答,其中两个字吸引了我:“版本”。我灵机一动,赶紧去查看版本,发现我当前的版本是9.0.30729.4148,而帖子里的manifast文件中的版本是9.0.21022.8。于是,我赶紧找了一个这个版本的下载下来,替换我的程序中的这几个dll和manifast,再运行,果然成功了。

 

因此得到以下结论:

1、可重发行组件包是没问题的,肯定可以用,因为它替换了系统的这几个dll,所以可行;

2、如果不想在自己的“绿色”软件的基础上再要安装这么个组件,或者自己的非绿色软件在安装的过程中再安装这么个组件,只需要处理这几个关键的dll就行啦。

3、即使有了这几个dll也不一定行,一定要注意版本!实在不行这几个版本多试一试。我到现在还不太明白,我的vs2008的版本是9.0.30729.4148,编译出来的东西应该也是这个版本的啊,可是为什么用了老版本才好用,新版本的反而不好用呢?

4、具体文件如下:

Microsoft.VC90.CRT.manifest

msvcm90.dll

msvcp90.dll

msvcr90.dll

posted @ 2011-07-25 14:15 ivaneeo 阅读(512) | 评论 (0)编辑 收藏

仅列出标题
共67页: First 上一页 11 12 13 14 15 16 17 18 19 下一页 Last