狼爱上狸

我胡汉三又回来了

#

Sybase系统维护经验谈

  Sybase数据库系统作为C/S构架的主流产品在我国有着广泛的应用,因此,对Sybase系统的维护也
显得至关重要。笔者在对Sybase系统维护工作中,总结了一些技巧和经验,现介绍给大家。

  1.实现开机时自动装载Sybase数据库

  原先要使Sybase SQL Server启动,一般需要先以sybase用户登录,然后运行$SYBASE/install目录下
的startserver命令启动SYBASE_XXXX服务进程和SYB_BACKUP_XXXX备份服务进程。

  要实现Unix系统启动时就能在后台装载Sybase的功能,我们可在/etc/rc2.d/目录下新建一文件S99sybase,
内容如下:

  SYBASE=/usr/sybase

  PATH=$PATH:$SYBASE/bin

  export $SYBASE $PATH

  $SYBASE/install/startserver -f $SYBASE/install/RUN_SYBASE_XXXX > /dev/null

  $SYBASE/install/startserver -f $SYBASE/install/RUN_SYB_BACKUP_XXX >/dev/null

  然后修改Sybase的权限,重启系统即可。

  2.实现关机时自动卸载Sybase数据库

  为保证Sybase系统的正常运行,每次在关闭Unix系统时要先结束Sybase SQL Server 的服务进程,从减轻
系统管理人员操作的角度出发建立一用户halt,修改/etc/passwd文件,将halt用户的uid改为0(或其他可运行
shutdown的用户id),在/usr/halt/.profile中添加以下语句:

  SYBASE=/usr/sybase

  DSQUERY=SYBASE_XXXX

  PATH=$PATH:$SYBASE/bin

  export SYBASE DSQUERY PATH

  isql -Usa -Pabcabc -ihalt.sql > /dev/null

  shutdown -y -g0

  其中“abcabc”为sa用户的口令,halt.sql是一简单的文本文件,内容如下:

  shutdown

  go

  这样每次只要以halt用户登录,就实现了自动卸下Sybase数据库,然后关闭Unix系统。

  3.Sybase库备份技巧

  一般对Sybase库进行备份都用磁带作介质进行,但还有一更好的方法,即先备份到硬盘上然后经压缩,
拷贝到磁带上,这样便于恢复,多了一个备份拷贝,同时也节省了备份时间。具体实现步骤如下:

  (1)建立磁盘备份设备

  运行isql,以sa进入Sybase系统,运行如下内容:

  sp_addumpdevice "disk",disk_bkupdevice ,/tmp/dumpdb ,2

  go

  这样就在Sybase中建立了一个名为“disk_bkupdevice”的备份设备,它对应Unix系统下的/tmp/dumpdb文件。

  (2)创建备份用户

  以root身份进入Unix系统,新建用户backupdb,并归属于sybase组。

  (3)修改相关文件

  在/usr/backupdb/.profile中添加以下语句:

  SYBASE=/usr/sybase

  DSQUERY=SYBASE_XXXX

  PATH=$PATH:$SYBASE/bin

  export SYBASE DSQUERY PATH

  rm /tmp/backupdb.Z

  echo"开始备份SYBASE数据库…"

  isql -Usa -Pabcabc -ibackup.sql > /tmp/dbbackup.log

  echo"硬盘备份完成,正在压缩备份的数据文件…"

  compress /tmp/backupdb

  echo "正在将备份的压缩数据拷入磁带…"

  tar c8v /tmp/backupdb.Z

  echo "备份完成!"

  其中"abcabc"为sa用户的口令,backup.sql是一简单的文本文件,内容如下:

  dump database db_main to disk_bkupdevice

  go

  备份的执行日志被记录在/tmp/dbbackup.log中,当然系统管理员也可通过查看$SYBASE/install/backup.log
获知备份日志。

  这种备份方法要求硬盘空间足够大,这点请系统管理员在为Unix建分区时特别注意。

  在SCO Open Server 5.0.4、Sybase 11.0.3平台上,以上几个小技巧已应用成功,为笔者的日常维护节省了许
多时间,取得了非常好的效果。

 

traceback: http://www.qingren.org/item/1016/ 

posted @ 2007-07-02 11:37 狼爱上狸 阅读(230) | 评论 (0)编辑 收藏

Sybase ASE 安全登陆Linux

在各种操作系统中,Linux已经流行。因此,越来越多的主流数据库厂商将它们的产品移植到Linux操作系统平台,例如Sybase、Oracle和IBM等。此外,可以使用的自由软件越来越多。自由软件库中已经包括了Sybase ASE for Linux、Oracle for Linux、Informix for Linux等数据库软件以及其他各种软件。

在上述几种Linux平台上的数据库产品中,Sybase ASE的性能很好,紧凑的程序分发包里包含了全部文档、数据库备份和监视等工具,同时它对系统的要求不高(系统配置为32MB内存,包含文档的全部安装需要200MB硬盘,否则需要120MB硬盘)。它的安装、配置过程与其他产品相比也很简单。这些优势,连同Sybase数据库产品本来的用户基础,使得它成为Linux平台上出色的数据库软件。

但是,Sybase ASE在正常安装完成后,数据库超级用户的账号没有设置口令。这样,Internet上每一个知道服务器端口号的用户或者本机上的所有可登录用户都可以以超级用户身份对数据库随意操作。这应该说是一个非常大的安全漏洞。下面将逐步介绍Sybase ASE for Linux 的安装过程,以及安装完成后需要采取的安全配置和较为安全的系统。

一、Sybase ASE的安装

首先下载Sybase ASE for Linux软件包,网上可以比较容易找到RPM格式的二进制发行包,包括sybase-ase-11.0.3.3-1.i386.rpm(主程序包)、sybase-doc-11.0.3.3-1.i386.rpm(文档包)。RPM是Redhat公司的软件包管理程序,使用它可以非常方便地安装和卸载程序包,并保持它们之间的依赖关系。

然后,以超级用户的身份键入命令:
#rpm -i sybase-ase-11.0.3.3-1.i386.rpm

屏幕会显示Sybase公司的版权说明,键入“yes”表示同意。接下去安装程序会提示将在系统中创建一个用户sybase和相应的组,并要求为该账号设置相应的口令。Sybase数据库安装的缺省目录是/opt/sybase。安装时要注意磁盘分区有足够的空间(大于200MB)。

下一步可以重新以sybase登录继续配置,也可以使用 #su - sybase 改变身份为sybase来继续对sybase进行安装。屏幕上将会出现:

1.Release directory:/opt/Sybase
2.Edit / View Interfaces File
3.Configure a Server product
4.Configure an Open Client/Server product
Ctrl-a Accept and Continue, Ctrl-x Exit Screen, ? Help.
Enter the number of your choice and press return:

选择3来配置服务器,在该选项中将会一同配置服务器监听端口。在下面每一个屏幕提示下,数字表示具体选项,Ctrl-a表示已经配置完毕,进行下一步,Ctrl-x表示放弃刚才的选择,退回上一步,下面省去同样的提示。选择3后,出现以下提示:
Product Date InstalledDate Configured
1.SQL Server11 Sep 1998 06:47
2.Backup Server 11 Sep 1998 06:47

首先选择1配置SQL服务器,出现以下提示:
1.Configure a new SQL Server
2.Configure an existing SQL Server
3.Upgrade an existing SQL Server

然后选择1来配置一个新的SQL服务器。配置备份服务器可以在SQL服务器配置完成后再来。由于是第一次安装,所以选择配置新的服务器,后面2个选项分别提供了重新配置或者升级原服务器的功能

接下来的提示要求选择服务器的名字,具体如下:
ADD NEW SQL SERVER
1.SQL Server name:SYBASE
默认为SYBASE。这与sybase的交互式访问工具isql的默认服务器名字是一致的。

完成上述配置后,出现如下显示:
SQL SERVER CONFIGURATION
1.CONFIGURE SERVER'S INTERFACES FILE ENTRY Incomplete
2.MASTER DEVICE CONFIGURATION Incomplete 3.SYBSYSTEMPROCS DATABASE CONFIGURATION Incomplete
4.SET ERRORLOG LOCATION Incomplete 5.CONFIGURE DEFAULT BACKUP SERVER Incomplete
6.CONFIGURE LANGUAGES Incomplete 7.CONFIGURE CHARACTER SETS Incomplete
8.CONFIGURE SORT ORDER Incomplete 9.ACTIVATE AUDITING Incomplete

以上关系到数据库的具体内容,包括端口号、设备、语言和字符集等。下面假定不改变默认名,直接按Ctrl-a接受。

第1项配置服务器端口,选择后出现下面的提示屏幕:
SERVER INTERFACES FILE ENTRY SCREEN
Server name:SYBASE
1.Retry Count:0
2.Retry Delay:0
3.Add a new listener service

选择增加一个监听端口,出现下面的配置TCP端口的屏幕:
EDIT TCP SERVICE
1.Hostname/Address: localhost.localdomain
2.Port:
3.Name Alias:
4.Delete this service from the interfaces entry

其中的主机名在一般情况下由安装程序自动从环境中提取,通常不需要改动。但是,如果用户配置的是远程服务器的话,此处应该修改为相应的服务器地址。第二项的端口号用户可以自由选择,通常选择在1024以上。同样,如果是配置远程服务器,端口号应该修改为正确的端口地址。这2个参数会记录在/opt/sybase/interfaces文件中,也就是说在配置完成后,用户也可以手工修改该文件来重新改变连机端口的参数。

第2项配置数据库主设备。数据库主设备可以是一个新的物理设备,也可以是磁盘中的一个文件,大小可以根据需要和存储设备的空间大小调整。

后面各项的配置在普通应用下,基本上不需要修改缺省值。按照提示继续做下去,依次分别是配置Sybase系统进程数据库、错误日志、缺省备份服务器、字符集、数据库排序和激活审计等。其中的缺省备份服务器和激活审计配置对于数据库安全较为重要。

在管理员希望对数据库进行备份时需要备份服务器功能,它的原理是在一个特定的端口监听备份申请(该端口号必须与前面数据库端口号区分开),将数据库的数据备份到指定的设备中去(例如“/tmp/sybase.mybackup.19990909”)。选择该项后,出现如下显示:
SET THE SQL SERVER'S BACKUP SERVER
1.SQL Server Backup Server name:SYB_BACKUP
审计功能在缺省状态下并不打开。如果管理员认为需要,则可以参照下面的屏幕创建一个单独的数据库来存储系统审计信息。

ACTIVATE AUDITING
1.Install auditing:no
2.sybsecurity database size (Meg):5
3.sybsecurity logical device name:sybsecurity
4.create new device for the sybsecurity database:no

二、 安装后的安全问题与相应的配置

按照DoD52.00.28-STD信任计算机系统评估标准,即通常所说的桔皮书,Sybase ASE的设计标准为C2级,它提供了4种安全机制,分别是访问控制、认证控制、角色划分和数据库审计。访问控制是指对象所有者可以对不同的登录用户赋予或者取消某些访问的权利。认证控制是指保证只有被授权的用户才能登录进入系统。角色的划分使得系统管理员可以将系统的一些特殊权利分别赋予某一个用户,使他们能够分别完成某些关键任务。具体来说,Sybase数据库系统设定了3种主要角色:系统管理员(sa_role)、系统安全员(sso_role)和系统操作员(oper_role)。数据库审计系统可以对系统的登录、退出、数据库启动、远程过程调用、角色的变化和对各种对象的访问等操作提供记录与审查。

数据库应用采用客户机/服务器架构,服务器端在某一个端口监听网络连接请求。客户端申请连接,输入合法的用户名和相应的口令,进入服务器,然后运行需要的命令。这样,在数据库用户的配置管理方面如果出现安全漏洞,势必会给系统和数据带来非常大的威胁。可是,Sybase ASE在正常安装完成后,数据库超级用户的账号没有设置口令。这样,Internet上每一个知道服务器端口号的用户或者本机上的所有可登录用户都可以以超级用户身份对数据库随意操作。这应该说是一个非常大的安全漏洞。下面,通过对角色的分析,给出解决这一问题的方法。

1.三种角色的主要权利和任务

(1) sa_role
管理磁盘使用,改变系统各种运行参数,诊断系统出现的各种问题,备份和恢复数据库,对其他用户赋予或者取消sa_role,创建用户数据库并为它们授予合适的属主,以及建立用户组等等。

(2) sso_role
创建登录账号并初始化口令,更改其他所有账号的口令,对其他用户赋予或者取消sso_role以及oper_role,设定口令时限以及管理审计系统等。

(3) oper_role
备份和恢复各种数据库。

2.更改sa口令

Sybase ASE在安装完成时在系统中创建了用户sa,它同时具有sa_role和sso_role两种角色。此时的用户“sa”在服务器中具有无限的权利,相当于Unix系统中一个没有口令的root。这样,任何蓄意的联网用户都可以完全控制该SQL服务器。这不能不说是Sybase ASE的一个重大安全漏洞。为此,强烈建议在完成下面的安全配置之前请勿将服务器接入网络。

首先,利用Sybase提供的交互式访问工具isql连接服务器。键入以下命令:
$/opt/sybase/bin/isql -Usa -P -Smysybase

表示以用户sa、空口令连接服务器mysybase。更改sa的口令,
>sp_password NULL,"NewPassWd"
>go

将原来的空口令(NULL)改为当前的“NewPassWd”。这里的口令最少为6个字符长度,可以由任何可打印字符、字母和数字等组成。

3.关闭sa账号

角色的划分可以说是Sybase数据库相对于普通Unix系统在安全体制方面的改进。但是,大家知道,拥有无限权利的超级用户一方面是系统的保护者,但是更多的时候是给系统的安全带来了巨大的安全威胁。简单来说,超级用户一个低级的误操作就可能毁掉整个服务器。从攻击的角度来看,攻击者只要获得了超级用户的身份就表明他已经彻底攻克了该系统。而对于经过特权分割安全加固的系统来说,攻击者必须将若干个特权用户全部破解,才能得以完全控制该系统。可以说超级权利用户的存在是区分C级和B级安全系统的一个重要标志。

在设置sa账号的口令以后,通过创建新用户,并区分sa的角色,关闭sa,从而进一步加强服务器的安全。Sybasre提供了几个相应的命令sp_addlogin和sp_role等来完成上述操作。
>sp_addlogin sa_user,"Sa,PassWd"
>sp_addlogin sso_user,"Sso,PassW"
>sp_role "grant",sa_role,sa_user
>sp_role "grant",sso_role,sso_user
>sp_locklogin sa,"lock"

上述命令创建了两个用户sa_user,sso_user,并且分别设置了口令“Sa,PassW”和“Sso,Pass”,设置了角色sa_role和sso_role,然后关闭了账号sa。

(作者地址:江苏镇江南京经济学院桥头校区,212413)

 

traceback: http://www.qingren.org/item/1057/

posted @ 2007-07-02 11:34 狼爱上狸 阅读(280) | 评论 (0)编辑 收藏

Sybase12.5在WINXP下安装的时候是乱码,怎么解决?

Sybase12.5在WINXP下安装的时候是乱码,怎么解决?
A :
        
       
       
我感觉是字符集的问题,XP的字符集跟2000不一样,在2000下安装就没问题 

但是我不知道怎么解决这个问题。  

 
谢谢大家了。 

--------------------------------------------------------------- 

 

\shared-1_0\jre1.2.2\lib\font.properties.zh.NT4.0改成font.properties.zh.NT5.0 

另外还必须把 

\shared-1_0\jre1.2.2\lib\font.properties.zh_TW改成font.properties.zh_CN 

就可以解决Sybase12.5在WINXP下的安装问题了

来自:http://www.shaoys.com/testart/ShowWebTPL.asp?DocID=csdnsql0368

posted @ 2007-07-02 11:17 狼爱上狸 阅读(897) | 评论 (1)编辑 收藏

不同种类的webservice错误信息

下面是调试web service时,不同种种类的异常情况,以供调试参考


缺少的jar文件请加在classpath中,注意检查,classpath文件前面不要有空格。

缺少axis.jar
javax.xml.rpc.ServiceException: java.lang.ClassNotFoundException: org.apache.axis.client.ServiceFactory
 at javax.xml.rpc.ServiceFactory.newInstance(ServiceFactory.java:69)
 at com.company.project.remote.WebServiceClient.main(WebServiceClient.java:24)

缺少saaj.jar
Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/soap/SOAPException
 at org.apache.axis.configuration.FileProvider.configureEngine(FileProvider.java:179)
 at org.apache.axis.AxisEngine.init(AxisEngine.java:172)
 at org.apache.axis.AxisEngine.(AxisEngine.java:156)
 at org.apache.axis.client.AxisClient.(AxisClient.java:52)
 at org.apache.axis.client.Service.getAxisClient(Service.java:104)
 at org.apache.axis.client.Service.(Service.java:157)
 at org.apache.axis.client.ServiceFactory.createService(ServiceFactory.java:198)
 at com.company.project.remote.WebServiceClient.main(WebServiceClient.java:26)

缺少wsdl4j.jar
Exception in thread "main" java.lang.NoClassDefFoundError: javax/wsdl/extensions/mime/MIMEContent
 at org.apache.axis.wsdl.gen.Parser.run(Parser.java:297)
 at org.apache.axis.client.Service.initService(Service.java:243)
 at org.apache.axis.client.Service.(Service.java:165)
 at org.apache.axis.client.ServiceFactory.createService(ServiceFactory.java:198)
 at com.company.project.remote.WebServiceClient.main(WebServiceClient.java:26)

错误的URL
javax.xml.rpc.ServiceException: Error processing WSDL document: 
java.net.UnknownHostException: www.xmethods.com
 at org.apache.axis.client.Service.initService(Service.java:250)
 at org.apache.axis.client.Service.(Service.java:165)
 at org.apache.axis.client.ServiceFactory.createService(ServiceFactory.java:198)
 at com.company.project.remote.WebServiceClient.main(WebServiceClient.java:26)

缺少用户名、密码
javax.xml.rpc.ServiceException: Error processing WSDL document: 
java.net.ProtocolException: Server redirected too many  times (20)
 at org.apache.axis.client.Service.initService(Service.java:250)
 at org.apache.axis.client.Service.(Service.java:165)
 at org.apache.axis.client.ServiceFactory.createService(ServiceFactory.java:198)
 at com.company.project.remote.WebServiceClient.main(WebServiceClient.java:26)
 

posted @ 2007-07-01 15:51 狼爱上狸 阅读(4639) | 评论 (0)编辑 收藏

用Globus Toolkit 4(GT4)构建WEB服务

版权声明:任何获得Matrix授权的网站,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明
作者:Birali Hakizumwami;xzzhouhu
原文地址:http://www.onjava.com/pub/a/onjava/2005/10/19/constructing-web-services-with-globus-toolkit.html
中文地址:http://www.matrix.org.cn/resource/article/44/44032_Globus_Toolkit.html
关键词: Globus Toolkit

摘要:
本文主要介绍了通过一种新的方法来构建企业软件,即通过调整Globus Toolkit 4实现的网格计算的概念来实现。GT4是一种可以通过开放网格服务架构(OGSI)来实施的开放资源。这种实施主要目的是为网格服务架构提供了依据,同时也可以为别的网格服务架构实施提供参考。本文详细介绍了GT4中JAVA的核心服务,这些服务具备提供代管网格服务实时运行环境的能力,当然这些网格服务都是由JAVA写的。实时运行环境在网格服务的应用和网络承载之间和传输协议引擎之间起到了协调的作用。


一.网格的定义

网格的定义:
网格就是将收集网络上所有可用的分布式计算资源提供给最终用户或组建成一个巨大的计算系统。网格计算给分布式计算提供了一种全新的方法,不仅在跨地区而且在跨组织,机器结构和软件限制,给连接到网格的每个用户提供更多的资源,计算机之间的协作和信息访问。分布式资源,像计算周期,存储和信息,可以在网格中的任何地区访问,同时也可以在网格中提供这些服务供其他用户访问。这就要通过在每个独立的组织或资源之间进行安全的协调资源共享,共同建立一个动态虚拟组织机构。


二.Globus Toolkit Version 4

在本文中,我们主要讨论GT4中JAVA的核心服务。(如图1),这些服裉峁┝舜芡穹袷凳痹诵谢肪车哪芰ΑJ凳痹诵谢肪吃谟没Фㄒ宓挠τ梅窈虶T4的核心服务之间,网络承载和传输协议引擎之间起到了协调的作用。GT4核心服务还提供了程序开发支持的功能,包括开放式开发模式和访问网格服务的实现,像GRAM(Grid Resource Allocation Management,网格资源管理)。应用GT4强有力的理由就是因为它是建立在现有的WEB服务标准和技术的基础上,像SOAP和WSDL。网格服务提供的接口都是通过WSDL来描述的。GT4提供了一个软件仓库,像安全支持,软件的探索,软件的资源管理,软件的调用,软件之间的通信,异常处理和数据管理等。


                   (图1)

图1主要描述了在服务器端的GT4中的主要组件结构。这只是GT4所提供功能的一部分,我们只是认为它很适合本文。GT4结构由一个网格容器组成,网格容器主要用来管理所有部署的WEB服务,贯穿于每个WEB服务的运行周期。GT4使用apache的axis作为它的WEB服务的引擎来处理所有的SOAP消息,JAX-RPC (Java API for XML-Based RPC)处理和WEB服务的配置。


三.贷款偿还例子:

我们列举这样一个例子,主要想向大家展示在企业内部如何通过Globus Toolkit 来解决不同类操作系统之间进行融合。在企业内部,有些应用可能是原来主机遗留下来的,技术比较落后,有些应用已经采用了现代技术,像J2EE。甚至我们采用最先进的技术在一个企业内部的应用之间进行信息共享也要面临巨大的挑战。图2给出了这样一个例子,在一个抵押机构内,在贷款偿还信息处理和会计部门信息处理之间的交互,

image
                (图2)

会计部门使用申请贷款处理服务来申请贷款。

为了创建和部署网格服务,我们需要:
*通过创建WSDL文件来定义服务的接口
*用JAVA来实现
*通过创建WSDD文件来定义服务的部署参数
*使用ANT编译源代码并生成GAR文件
*用GT4分发工具部署GAR文件
我们必须使用从上往下的方法来创建网格服务,(图3)

这种方法首先从提供WSDL文件开始,在WSDL文件中包括对WEB服务的抽象定义,包括服务类型,消息类型和端口类型。从WSDL文档开始并根据WSDL文档创建了JAVA模型,从而导致与其他系统更好交互。

image

  我们使用GT4 toolkit自带的工具来进行服务的绑定和产生客户段需要的根类。这种方法的下一步就是提供接口的实现。

贷款偿还服务处理定义:
对于贷款偿还服务处理的例子的接口类型我们定义为loan.wsdl,它描述了贷款偿还服务所提供的三个部分的操作(申请贷款,贷款处理和获得贷款)。首先我们描述贷款偿还服务的请求和响应:

<types>

  <xsd:element name="createLoan">
    <xsd:complexType>
      <xsd:sequence>
          <xsd:element name="loanNumber" type="xsd:int"/>
        <xsd:element name="amountUPB" type="xsd:double"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="createLoanResponse">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="returnValue" type="xsd:int"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>

  <xsd:element name="processLoanPayment">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="loanNumber" type="xsd:int"/>
        <xsd:element name="amount" type="xsd:double"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="processLoanPaymentResponse">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="returnValue" type="xsd:int"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>

  <xsd:element name="getLoan">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="loanNumber" type="xsd:int"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="getLoanResponse">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="returnValue" type="tns:LoanType"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>

</types>


我们在文件 loan.xsd.中定义了贷款的数据类型,我们通过使用“ import <xsd:import schemaLocation="loan.xsd"/> ”可以直接将loan.xsd.文件导入到文件loan.wsdl 中,并且用它作为获得贷款操作返回的类型

<complexType name="LoanType">
    <sequence>
        <element name="loanNumber" type="int"/>
        <element name="UPB" type="double"/>
        <element name="status" type="string"/>
        <element name="createDate" type="string"/>
    </sequence>
</complexType>


下一步,我们要定义所有的消息服务。一条消息元素可能由一个或多个部分组成,消息元素的每个部分对应一个参数,并且还有一个类型属性。消息既可以是一个请求消息(输入消息),也可以是一个响应消息(输出消息)。

<message name="CreateLoanInputMessage">
  <part name="parameters" element="tns:createLoan"/>
</message>
<message name="CreateLoanOutputMessage">
  <part name="parameters" element="tns:createLoanResponse"/>
</message>

<message name="ProcessLoanPaymentInputMessage">
  <part name="parameters" element="tns:processLoanPayment"/>
</message>
<message name="ProcessLoanPaymentOutputMessage">
  <part name="parameters"
    element="tns:processLoanPaymentResponse"/>
</message>

<message name="GetLoanInputMessage">
  <part name="parameters" element="tns:getLoan"/>
</message>
<message name="GetLoanOutputMessage">
  <part name="parameters" element="tns:getLoanResponse"/>
</message>


最后我们定义所有的端口类型,每个接口类型定义了一个或多个操作来使用当前的操作元素,每个独立的操作元素又定义了一个操作和与操作有联系的消息的输入输出。在一个端口类型内操作元素定义了端口类型内所有调用方法的语法。

<portType name="LoanPortType">
  <operation name="createLoan">
    <input message="tns:CreateLoanInputMessage"/>
    <output message="tns:CreateLoanOutputMessage"/>
    <fault name="Fault" message="ogsi:FaultMessage"/>
  </operation>
  <operation name="processLoanPayment">
    <input message="tns:ProcessLoanPaymentInputMessage"/>
    <output message="tns:ProcessLoanPaymentOutputMessage"/>
    <fault name="Fault" message="ogsi:FaultMessage"/>
  </operation>
  <operation name="getLoan">
    <input message="tns:GetLoanInputMessage"/>
    <output message="tns:GetLoanOutputMessage"/>
    <fault name="Fault" message="ogsi:FaultMessage"/>
  </operation>
</portType>


服务的实现:
  在前面的步骤中,终端贷款端口类型的接口已经产生,在定义这些端口类型的接口时,所有的远程操作都要设为public,并且抛出java.rmi.RemoteException。在本文中给出了LoanServiceImpl类,主要实现贷款端口类型的接口,这些实现要用到前面所讲到的用loan.wsdl文件所生成的根类。

public class LoanServiceImpl implements LoanPortType


其中LoanServiceImpl 所实现的方法定义在LoanPortType接口中,createLoan方法在产生一个createLoan对象的构造器中要获取一个贷款数字作为它的参数。

public CreateLoanResponse createLoan(CreateLoan cl)
throws java.rmi.RemoteException
public ProcessLoanPaymentResponse processLoanPayment(ProcessLoanPayment plp)
throws java.rmi.RemoteException
public GetLoanResponse getLoan(GetLoan gl) throws java.rmi.RemoteException


请参考完整代码详细描述方法的实现。

编译并创建贷款/偿还处理的WEB服务:
下面我们介绍通过以下步骤来创建易部署的GT4打包文档。Ant在编译本文所提供文件时所产生的build.xml中包含了ant的执行任务的步骤。在build.xml中ant的执行任务调用GT4中的ant任务,这些任务伴随着GT4的发布可以在编译文件中找到。

%GLOBUS_LOCATION%/share/globus_wsrf_common/build-packages.xml
%GLOBUS_LOCATION%/share/globus_wsrf_tools/build-stubs.xml
%GLOBUS_LOCATION%/share/schema


编译GT4中易部署的GAR文件
   为了创建易部署的网格打包文件,loan.gar,我们通过以下步骤来实现:(这些步骤与builder.xml中的ant任务是一致的):
·        与WSDL文件绑定
·        通过WSDL        文件生成一个根类,在安装时,提供一个特殊文件来对不同的命名空间和包之间进行映射,这些包与表格中的目录结构一致。
·        编译根类
·        编译接口类
·        用JAR压缩接口类,和根类一样(loan.jar and loan_stubs.jar).
·        通过创建部署描述文件deploy-server.wsdd.来生成易部署的GAR文件,loan.gar
请参考源代码中完整的build.xml文件,通过以上步骤来实现一系列的ant编译任务。GT4描述我们的WEB服务文件deploy-server.wsdd就想这样:

<service name="loan/impl/LoanService" provider="Handler"
use="literal" style="document">
    <parameter name="className" value="loan.impl.LoanServiceImpl"/>
    <wsdlFile>share/schema/loan/Loan_service.wsdl</wsdlFile>
    <parameter name="allowedMethods" value="*"/>
    <parameter name="handlerClass"
    value="org.globus.axis.providers.RPCProvider"/>
    <parameter name="scope" value="Application"/>
    <parameter name="providers" value="GetRPProvider"/>
    <parameter name="loadOnStartup" value="true"/>
</service>


让我们来介绍一下deploy-server.wsdd中的一些参数:
服务名称:指定我们所提供的WEB服务的路径,我们将它与WEB服务容器的地址相结合起来,我们会得到WEB服务的完整的URL。为了便于测试,使用独立的GT4容器,URL就像这样:

http://localhost:8080/wsrf/services/loan/impl/LoanService

类名:指实现服务接口的类(LoanServiceImpl).
WSDL文件:告诉GT4中的WEB服务容器对于当前的WEB服务的WSDL文件在那里可以找到。WSDL文件Loan_service.wsdl是在GT4 从loan.wsdl进行ANT时自动产生的。
启动时装载:如果我们需要服务在WEB服务容器启动时就开始装载,允许我们控制服务的装载。

部署GAR文件:
GAR文件loan.gar包含了所有的文件和WEB服务器需要的部署信息,我们使用GT4部署工具:

%GLOBUS_LOCATION%/bin/globus-deploy-gar $PROJECT_HOME/loan.gar

拷贝文档文件(loan.wsdl,编译的根类,编译的接口实现,loan.wsdd)到GT4容器的目录下适当位置。

测试借贷款处理实例

在图1描述了如何将贷款方的子系统和贷款结算子系统作为借贷款的WEB服务的客户端,现在我们就在GT4网格服务容器中创建和部署WEB服务,我们需要用一个客户端进行测试,测试用例模拟一个贷款事件,一个贷款月度偿还事件和一个贷款还清事件。作为客户端来说,他们希望WEB服务的URI(统一资源标识符)能够作为客户端访问WEB服务的依据。客户端的程序要独立的进行编译,下面来描述客户端访问WEB服务的主要步骤:

创建一终端引用类型对象,来代表终端引用的贷款服务。我们的终端引用只需要服务的URI:
EndpointReferenceType endpoint = new EndpointReferenceType();
endpoint.setAddress(new Address(serviceURI));

下一步,我们要获得引用服务的端口类型,这需要一个根类调用LoanServiceAddressingLocator, LoanServiceAddressingLocator主要是用来维持客户端与WEB服务之间的通信和获得引用贷款端口的类型。
LoanServiceAddressingLocator locator = new LoanServiceAddressingLocator();
LoanPortType loanPT = locator.getLoanPortTypePort(endpoint);


一旦我们获得这个引用,我们可以作为本地对象来操作WEB服务。例如,调用远程的创建操作,我们仅仅需要在贷款端口类型中使用创建方法。
CreateLoanResponse clr = loanPT.createLoan(new CreateLoan(amount, loanNumber));

请参考附件中完整的客户端代码。在编译客户端之前,请保证运行下面的脚本,以便于GT4的发布:
%GLOBUS_LOCATION%/etc/globus-devel-env.bat

globus-devel-env.bat文件主要是将Globus的类库注册到系统的classpath中,因为客户端是作为独立的应用来编译的,同样,要保证在编译客户端的目录中所放置的已编译的根类时能通过classpath找到,因此我们的客户端可以访问服务器端的根类,像LoanServiceAddressingLocator。

启动网格容器
使用下面的命令来启动网格容器:

%GLOBUS_LOCATION%/bin/globus-start-container –nosec

-nosec参数主要是为了简化测试,略去安全设置。如果网格容器启动成功,你将会看到已部署的服务的URI列表,如果LoanService正确的部署,在已部署的服务的列表中有下面的一行:

[13]: http://localhost:8080/wsrf/services/loan/impl/LoanService

测试借贷款处理的WEB服务
通过客户端进行测试,我们假设有以下操作:申请贷款,偿还贷款,还清贷款。

·        创建一个初始化贷款编号为100并且还有12000未还        
java Client http://172.24.15.29:8080/wsrf/services/loan/impl/LoanService createLoan 100 120000
Loan 100 created successfully.


·        假定两个月偿还,每个月还$1100(本例不考虑利息的计算)
java Client http://172.24.15.29:8080/wsrf/services/loan/impl/LoanService processLoanPayment 100 1100
Loan 100 processed successfully.
java Client http://172.24.15.29:8080/wsrf/services/loan/impl/LoanService processLoanPayment 100 1100
Loan 100 processed successfully.


·        查看贷款的状态
java Client http://172.24.15.29:8080/wsrf/services/loan/impl/LoanService getLoanData 100
Loan Data
Create Date Mon Jun 06 16:41:06 EDT 2005
Unpaid Principal Balance 117800.0
Status ACTIVE


·        第三个月还清余款($117,800)
java Client http://172.24.15.29:8080/wsrf/services/loan/impl/LoanService processLoanPayment 100 117800
Loan 100 processed successfully


·        查看贷款状态
java Client http://172.24.15.29:8080/wsrf/services/loan/impl/LoanService getLoanData 100
Loan Data
Create Date Mon Jun 06 16:41:06 EDT 2005
Unpaid Principal Balance 0.0
Status PAIDOFF


结束语:

本文主要描述了在基于现有的WEB服务标准的基础上,如何调整GT4网格结构来创建一个网格服务应用。尽管GT4已经主要的应用在大型的科学计算问题上,但是在一个企业内部它可以作为实现面向服务结构(SOA)的一种方法。本文主要是通过一个简单的实例来描述如何使用GT4中的JAVA核心服务来创建和部署一个网格服务,但是并没有覆盖到更多的其他的更先进的关于如何使用网格服务概念,向网格服务的分配和管理,文件传输的可靠性,网格异常和安全。

资源
·本文的示例代码
·Matrix-Java开发者社区:http://www.matrix.org.cn
·onjava.com:onjava.com



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=544636

posted @ 2007-06-29 22:08 狼爱上狸 阅读(494) | 评论 (0)编辑 收藏

轻松汉化M3Gate

  程序替换掉5个文件就可以让您的M3gate浏览器成为中文版,还不赶紧行动。汉化包由中国被爱可以在线[http://www.bicyle.org]提供。

 

查看更多精彩图片 使用说明:
1.如果您已经安装了M3gate Version 1.2 Beta后,覆盖原安装程序文件夹下的文件[见清单]。
例如位置F:\Program Files\NumericLabs\M3Gate 覆盖文件清单:
        Handy.dll ''启动文件时,确定。
        M3Browse.dll ''查看属性时的文字汉化。
        ''右键菜单和设置对话框、界面设置等。
        Lang//
              im3en.dll
              bm3en.dll
        Skin//
              SM3April.s2i
2.任何基于M3gate Version 1.2 Beta程序的工具,均可替换掉相应文件。
    如:WapDisplayer V1.2等
3.此汉化组件仅对M3gate Version 1.2 Beta有较好的作用,对Version 0.6不予支持。

 

附件: M3GateToChinese.rar (339 K)

来自:http://www.maikr.com/kan.aspx?id=2e96d77e-18b3-44c9-8731-03a92dd36689

posted @ 2007-06-29 14:57 狼爱上狸 阅读(571) | 评论 (2)编辑 收藏

Axis开发Webservice传Bean对象返回String串的实例

这几天也一直在为了设计与实现一个业务平台,想用Webservice 来作为核心技术来实现,也一直想精溢求精地把这个东东搞好, 突然觉得好久没来这里写日志了.呵,时间如白驹过隙啊!

 

  对于webService 以前也接触过.但只是皮毛,这次可是来真格的.来就来吧,年轻人这就是机会.一定得把握好,干它一票! 呵,就在网上到处找找啊,在本地机器上左试试,右试试啊, 什么法子都用一遍。就不信搞不定它,小样!

 

  网上的例子也比较散,比较简易的,达不我想要的业务水平,只能慢慢搜索与摸索吧。。。。。。就这样天天想着这事,也没什么心情来这里写写。

 

  近些天,也快回深圳了,定在下周四动身吧。这边的工作也得告一节了。把我前一些日子,搞一个完整的Samples 放到这里来,与大家共享。希望对有心人有些启发,也希望高人指点与点评。。。。。。。、

 

   ****************************************************
   *Axis开发Webservice传Bean对象返回String串的实例.rtf*
   ****************************************************

 

在ECLIPSE 里新建一工程,其次建包,再次建类,
基本包:samples.userguide.example5
基本类: Order.java
       
内容:
    *  Order.java *
*《********************************

package samples.userguide.example5;

/**
 * This is a JavaBean which represents an order for some products.
 * Copyright: Copyright (c) 2007-1
 * @author Black skin (blackskin@126.com)
 * @version 1.0
 */
public class Order {
 /** Who's ordering */
 private String customerName;

 /** Where do they live */
 private String shippingAddress;

 /** Which items do we want */
 private String itemCodes[];

 /** And how many */
 private int quantities[];

 // Bean accessors

 public String getCustomerName() {
  return customerName;
 }

 public void setCustomerName(String name) {
  customerName = name;
 }

 public String getShippingAddress() {
  return shippingAddress;
 }

 public void setShippingAddress(String address) {
  shippingAddress = address;
 }

 public String[] getItemCodes() {
  return itemCodes;
 }

 public void setItemCodes(String[] items) {
  itemCodes = items;
 }

 public int[] getQuantities() {
  return quantities;
 }

 public void setQuantities(int[] quants) {
  quantities = quants;
 }
}

********************************》*

 

主服务包: samples.userguide.example5
主服务类: BeanService.java
         
 如下:
    * BeanService.java *
**《*******************************
package samples.userguide.example5;

/**
 * This is a JavaBean which represents an order for some products.
 * Copyright: Copyright (c) 2007-1
 * @author Black skin (blackskin@126.com)
 * @version 1.0
 */

public class BeanService {
 public String processOrder(Order order) {
  String sep = System.getProperty("line.separator");

  String response = "Hi, " + order.getCustomerName() + "!" + sep;

  response += sep + "You seem to have ordered the following:" + sep;

  String[] items = order.getItemCodes();
  int[] quantities = order.getQuantities();

  for (int i = 0; i < items.length; i++) {
   response += sep + quantities[i] + " of item : " + items[i];
  }

  response += sep + sep + "If this had been a real order processing system, "
            + sep + "we'd probably have charged you about now.";

  return response;
 }

 public static void main(String[] args) throws Exception{
  /** Who's ordering */
  String customerName = "Black Skin";
  /** Where do they live */
  String shippingAddress = "001 xingan Street, bayuquan, YK";
  /** Which items do we want */
  String[] items = new String[] { "apple", "160ml-Milk" };
  /** And how many */
  int[] quantities = new int[] { 2, 4 };
  /** request class init() */
  Order order = new Order();
  order.setCustomerName(customerName);
  order.setShippingAddress(shippingAddress);
  order.setItemCodes(items);
  order.setQuantities(quantities);
  /** server class init() */
  BeanService beanservice = new BeanService();
  String result = beanservice.processOrder(order);
  /** OutPut the result */
  System.out.println(" " + result); 
 }
 
}

********************************》*

 

 BeanService.java里有个本地测试方法(samples.userguide.example5.BeanService.main()),来测试此应用的可运行性;


到此,服务端类写完了,接着来把此类的方法发布成 WebService 接口

手写一个deploy.wsdd 文件,可以参考下面的例子:
      *deploy.wsdd例子*
*《********************************
<?xml version="1.0" encoding="utf-8"?>
<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<service name="服务名" provider="java:RPC">
<parameter name="className" value="服务类文件的实际路径(包括包的信息)"/>
<parameter name="allowedMethods" value="*(即为所有方法都可访问,如要指定多个可用空格分隔开)"/>
<parameter name="allowedRoles" value="user"/>
<parameter name="scope" value="Session"/>
<requestFlow>
<handler type="java:org.apache.axis.handlers.SimpleAuthenticationHandler"/>
</requestFlow>
</service>
</deployment>
********************************》*

显然,简单,造一个deploy.wsdd 信手捏来,如下:
      *deploy.wsdd*
*《********************************
<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
    <service name="OrderProcessor" provider="java:RPC">
        <parameter name="className" value="samples.userguide.example5.BeanService"/>
        <parameter name="allowedMethods" value="processOrder"/>
        <beanMapping qname="myNS:Order" xmlns:myNS="urn:BeanService" languageSpecificType="java:samples.userguide.example5.Order"/>
    </service>
</deployment>
********************************》*

有了deploy.wsdd文件了,接着通过它来生成 server-config.wsdd.
OK! 用命令直接生成就行;在deploy.wsdd 的文件夹下新建一个 makeWsdd.bat.
其中的写法有下面的例子来参考:

      * makeWsdd.bat 例子*
*《********************************
set AXISCLASSPATH= “应用发布的路径”
set AXIS_LIB= “AXIS框架的内部JAR包LIB路径”
SET CLASSPATH=.;%CLASSPATH%;%AXIS_LIB%\wsdl4j-1.5.1.jar;%AXIS_LIB%\axis.jar;%AXIS_LIB%\jaxrpc.jar;
%AXIS_LIB%\saaj.jar;%AXIS_LIB%\commons-discovery-0.2.jar;%AXIS_LIB%\commons-logging-1.0.4.jar

java -Djava.ext.dirs=%AXISCLASSPATH% org.apache.axis.client.AdminClient
 -S服务名\services\AdminService -p端口号(如果你的端口号不是默认的8080需要指定。
 例如:8899)deploy.wsdd
********************************》*


如此,我写了一“makeWsdd.bat”文件。如下:

      * makeWsdd.bat*
*《********************************
set AXISCLASSPATH=C:\Axis_webservice\Tomcat_4.1\webapps\axis
set AXIS_LIB=C:\axis-1_4\lib
SET CLASSPATH=.;%CLASSPATH%;%AXIS_LIB%\wsdl4j-1.5.1.jar;%AXIS_LIB%\axis.jar;%AXIS_LIB%\jaxrpc.jar;
%AXIS_LIB%\saaj.jar;%AXIS_LIB%\commons-discovery-0.2.jar;%AXIS_LIB%\commons-logging-1.0.4.jar

java -Djava.ext.dirs=%AXISCLASSPATH% org.apache.axis.client.AdminClient
 -SBeanServer\services\AdminService -p 8080 deploy.wsdd
********************************》*

保存好,接下来架设Webservice.

环境架设:
首先,安装JDK...(略)...本例用JDK版本号V1.4.
其次,安装Tomcat...(略)...本例用Tomcat版本号V4.1.
再次,AXIS...(略)...本例用AXIS版本号V1.4. 去AXIS官方网站:http://www.apache.org下载AXIS,解压后得,
   |- axis-1_4
        |- docs
     |- ..(略)...
 |- lib
     |- axis.jar
     |- axis-ant.jar
     |- commons-discovery-0.2.jar
     |- commons-logging-1.0.4.jar
     |- jaxrpc.jar
     |- log4j-1.2.8.jar
     |- log4j.properties
     |- saaj.jar
     |- wsdlj-1.5.1.jar
 |- samples
     |- ..(略)...
 |- webapps
     |- axis
        |- ..(略)...
 |- xmls
     |- ..(略)...
    将解压后,C:\axis-1_4\webapps 目录下的 axis 目录 Copy 到 tomcat/webapps目录(C:\Axis_webservice\Tomcat_4_1\webapps)下,

架设AXIS:
首先,将deploy.wsdd文件Copy到 %AXISCLASSPATH%/WEB-INF 目录下;
其次,将之前的类编译后,连路径一起Copy到 %AXISCLASSPATH%/WEB-INF/classes目录下,
最后,将tomcat的 catalina 服务启动.
(即:C:\Axis_webservice\Tomcat_4.1\bin,

   [特别注意的是:]
       A。tomcat务必启动。
       B。在写如上的命令行时,务必注意参数的写法。“-D” 与 “-S”与其值间不能有空格。切记!
       C。各XX的路径里,最好是不要有空格,因为JAVA里对大小写与路径空格有校验。
,)

测试:
命令行启动方法;运行"cmd",在命令行里写:"cd C:\Axis_webservice\Tomcat_4.1\bin",回车,再写:"  catalina run ",回车,OK!
后台会报错:
"
- Unable to find config file.  Creating new servlet engine config file: /WEB-INF/server-config.wsdd
2007-1-20 10:07:48 org.apache.coyote.http11.Http11Protocol start
信息: Starting Coyote HTTP/1.1 on port 8080
"
说明,在../WEB-INF/下没有"server-config.wsdd",暂时忽略。
在IE地址栏写:http://localhost:8080/axis
可见,axis 欢迎首页,点击 "list" 便可看到默认情况下发布了两个服务下各有一个方法。一切准备工作已经OK!


再回到,刚才我们写的那个批处理文件:" makeWsdd.bat",
直接双击,便可执行, 有一个警告,可以忽略的。执行完成后,在相应的
%AXISCLASSPATH%/WEB-INF下便有一“server-config.wsdd”文件,如下:

      *server-config.wsdd*
*《********************************

<?xml version="1.0" encoding="UTF-8"?>
<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
 <globalConfiguration>
  <parameter name="sendMultiRefs" value="true"/>
  <parameter name="disablePrettyXML" value="true"/>
  <parameter name="adminPassword" value="admin"/>
  <parameter name="attachments.Directory" value="C:\Axis_webservice\Tomcat_4.1\webapps\axis\WEB-INF\attachments"/>
  <parameter name="dotNetSoapEncFix" value="true"/>
  <parameter name="enableNamespacePrefixOptimization" value="false"/>
  <parameter name="sendXMLDeclaration" value="true"/>
  <parameter name="sendXsiTypes" value="true"/>
  <parameter name="attachments.implementation" value="org.apache.axis.attachments.AttachmentsImpl"/>
  <requestFlow>
   <handler type="java:org.apache.axis.handlers.JWSHandler">
    <parameter name="scope" value="session"/>
   </handler>
   <handler type="java:org.apache.axis.handlers.JWSHandler">
    <parameter name="scope" value="request"/>
    <parameter name="extension" value=".jwr"/>
   </handler>
  </requestFlow>
 </globalConfiguration>
 <handler name="LocalResponder" type="java:org.apache.axis.transport.local.LocalResponder"/>
 <handler name="URLMapper" type="java:org.apache.axis.handlers.http.URLMapper"/>
 <handler name="Authenticate" type="java:org.apache.axis.handlers.SimpleAuthenticationHandler"/>
 <service name="AdminService" provider="java:MSG">
  <parameter name="allowedMethods" value="AdminService"/>
  <parameter name="enableRemoteAdmin" value="false"/>
  <parameter name="className" value="org.apache.axis.utils.Admin"/>
  <namespace>http://xml.apache.org/axis/wsdd/</namespace>
 </service>
 <service name="Version" provider="java:RPC">
  <parameter name="allowedMethods" value="getVersion"/>
  <parameter name="className" value="org.apache.axis.Version"/>
 </service>
 <service name="OrderProcessor" provider="java:RPC">
  <parameter name="allowedMethods" value="processOrder"/>
  <parameter name="className" value="samples.userguide.example5.BeanService"/>
  <beanMapping languageSpecificType="java:samples.userguide.example5.Order" qname="ns1:Order" xmlns:ns1="urn:BeanService"/>
 </service>
 <transport name="http">
  <requestFlow>
   <handler type="URLMapper"/>
   <handler type="java:org.apache.axis.handlers.http.HTTPAuthHandler"/>
  </requestFlow>
  <parameter name="qs:list" value="org.apache.axis.transport.http.QSListHandler"/>
  <parameter name="qs:wsdl" value="org.apache.axis.transport.http.QSWSDLHandler"/>
  <parameter name="qs.list" value="org.apache.axis.transport.http.QSListHandler"/>
  <parameter name="qs.method" value="org.apache.axis.transport.http.QSMethodHandler"/>
  <parameter name="qs:method" value="org.apache.axis.transport.http.QSMethodHandler"/>
  <parameter name="qs.wsdl" value="org.apache.axis.transport.http.QSWSDLHandler"/>
 </transport>
 <transport name="local">
  <responseFlow>
   <handler type="LocalResponder"/>
  </responseFlow>
 </transport>
</deployment>


********************************》*
 
再去打开:"http://localhost:8080/axis/servlet/AxisServlet",或者,再刷新。
便可以看到,我们新发布的一个webservice接口服务,其名为:"OrderProcessor "
此服务下的个方法:其名为:"processOrder "。

点击服务对应的"(WSDL)"可见服务WSDL描述内容。在其中也可以得服务的访问地址:
"http://localhost:8080/axis/services/OrderProcessor?wsdl"
服务器端的开发,搞定了!

-:)    -:)    -:)  

接下来,准备开发,客户端的开发。

 


      * Client.java *
*《********************************
package samples.userguide.example5;

/**
 * This is a JavaBean which represents an order for some products.
 * Copyright: Copyright (c) 2007-1
 * @author Black skin (blackskin@126.com)
 * @version 1.0
 */

import java.net.URL;

import org.apache.axis.AxisFault;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.utils.Options;

import javax.xml.namespace.QName;
import javax.xml.rpc.ParameterMode;

public class Client {
 public static void main(String[] args) throws Exception {
  //Options options = new Options(args);
  String urlWsdl = "http://localhost:8080/axis/services/OrderProcessor?wsdl";

  Order order = new Order();
  order.setCustomerName("Black Skin");
  order.setShippingAddress("275 Grove Street, Newton, MA");

  String[] items = new String[] { "apple", "160ml-Milk" };
  int[] quantities = new int[] { 8, 4 };

  order.setItemCodes(items);
  order.setQuantities(quantities);

  Service service = new Service();
  Call call = (Call) service.createCall();
  QName qn = new QName("urn:BeanService", "Order");

  call.registerTypeMapping(Order.class, qn,
    new org.apache.axis.encoding.ser.BeanSerializerFactory(
      Order.class, qn),
    new org.apache.axis.encoding.ser.BeanDeserializerFactory(
      Order.class, qn));
  String result;
  try {
   //call.setTargetEndpointAddress(new java.net.URL(options.getURL()));
   call.setTargetEndpointAddress(new java.net.URL(urlWsdl));
   call.setOperationName(new QName("OrderProcessor", "processOrder"));
   call.addParameter("arg1", qn, ParameterMode.IN);
   call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);

   result = (String) call.invoke(new Object[] { order });
  } catch (AxisFault fault) {
   result = "Error : " + fault.toString();
  }

  System.out.println(result);
 }
}

********************************》*

oK! 到此,一个完整的Webservice例子就搞定了。

另外,Axis 还提供了一些工具,如:" wsdl2java "、" java2wsdl "

处理的方式与方法:
  java2wsdl:
   1. 以上为例,在以上工程的class输出目录新建一BAT文件:名为:“java2wsdl.bat”
   2. 其内容为:
         * java2wsdl.bat *
*《********************************
set AXIS_LIB=C:\axis-1_4\lib
SET CLASSPATH=.;%CLASSPATH%;%AXIS_LIB%\wsdl4j-1.5.1.jar;%AXIS_LIB%\axis.jar;%AXIS_LIB%\jaxrpc.jar;%AXIS_LIB%\saaj.jar;%AXIS_LIB%\commons-discovery-0.2.jar;%AXIS_LIB%\commons-logging-1.0.4.jar

java org.apache.axis.wsdl.Java2WSDL -o Order.wsdl  -l"http://localhost:8080/axis/services/OrderProcessor" -n "urn:BeanService"  -p"samples.userguide.example5.Order" "urn:Order" samples.userguide.example5.BeanService
********************************》*

把AXIS_LIB设为正确的本地包路径,再运行“java2wsdl.bat”,
便可以在目录下看到一个文件:“Order.wsdl”,通过这个WSDL文件,可以生成Webservice接口服务的框架,
既可以是服务器端,也可以是客户端框架。其细节,可以参考下一节。


处理的方式与方法:
  wsdl2java :
   1. 以上为例,把Order.wsdl拷贝过来,在其目录下新建一BAT文件:名为:“wsdl2java.bat”
   2. 其内容为:
       * wsdl2java.bat *
*《********************************
set AXIS_LIB=C:\axis-1_4\lib
SET CLASSPATH=.;%CLASSPATH%;%AXIS_LIB%\wsdl4j-1.5.1.jar;%AXIS_LIB%\axis.jar;%AXIS_LIB%\jaxrpc.jar;%AXIS_LIB%\saaj.jar;%AXIS_LIB%\commons-discovery-0.2.jar;%AXIS_LIB%\commons-logging-1.0.4.jar

java org.apache.axis.wsdl.WSDL2Java Order.wsdl
********************************》*

或者有另外的作法:把服务端的应用启动,直接写成:

java org.apache.axis.wsdl.WSDL2Java http://localhost:8080/axis/services/OrderProcessor?wsdl

保存好后,运行这个BAT文件,
便会自动生成:
BeanService_pkg\
  BeanService.java
  BeanServiceService.java
  BeanServiceServiceLocator.java
  OrderProcessorSoapBindingStub.java   
  Order.java

ok.


来自:http://blackskin126.bokee.com/viewdiary.14630183.html

posted @ 2007-06-29 12:43 狼爱上狸 阅读(2327) | 评论 (0)编辑 收藏

axis 的客户端使用

1. http://ws.apache.org/Axis/下载 axis-1_2_1 解压放在 D:\softSetup\下

dl.bitsCN.com网管软件下载

 

2.下载 apache-ant-1.6.1  解压放在D:\softSetup\下 bitsCN全力打造网管学习平台

3.环境变量设置:

需要什么来搜一搜吧so.bitsCN.com

 

JAVA_HOME=C:\jdk1.5.0_06
CATALINA_HOME=tomcat-5.5.15
ANT_HOME=D:\softSetup\apache-ant-1.6.1
AXISCLASSPATH=%AXIS_LIB%\activation.jar;%AXIS_LIB%\mail.jar;%AXIS_LIB%\axis.jar;%AXIS_LIB% \wsdl4j.jar;%AXIS_LIB%\axis-ant.jar;%AXIS_LIB%\commons-discovery-0.2.jar;%AXIS_LIB%\commons-logging-1.0.4.jar;%AXIS_LIB%\jaxrpc.jar;%AXIS_LIB%\saaj.jar;%AXIS_LIB%\log4j-1.2.8.jar;%AXIS_LIB%\xerces.jar;%AXIS_LIB%\junit.jar;%AXIS_LIB%\wsdl4j-1.5.1.jar
AXIS_HOME=D:\softSetup\axis-1_2_1
AXIS_LIB=%AXIS_HOME%\lib
CATALINA_HOME=D:\softSetup\jakarta-tomcat-5.0.24
classpath=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;%AXISCLASSPATH%
path=%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;%CATALINA_HOME%\bin;%ANT_HOME%\bin so.bitsCN.com网管资料库任你搜

4.在命令行 运行set 确保新加的环境变量生效

bitsCN.com中国网管联盟

 

5.根据合作伙伴给的wsdl地址 http://www.****.com/services/OrderService?wsdl保存下来到D:\project\test\wsdl\OrderService.wsdl 需要什么来搜一搜吧so.bitsCN.com

6.在命令行 切换到 D:\project\test\wsdl\下运行axis的WSDL2Java 命令:  java org.apache.axis.wsdl.WSDL2Java OrderService.wsdl    生成 bean 文件,***Service.java,***ServiceLocator.java,***ServiceSoapBindingStub.java 等文件,可以用Axis的wsdl2java生成web service的客户端,wsdl2java生成的客户端是stub方式的。它包括endpoint借口、实现该接口的stub、 serviceLocator、可选的单元测试代码。其中,serviceLocator中hard code了服务端地址.

so.bitsCN.com网管资料库任你搜

 

7. 应用.写一个表单jsp,提交到下面jsp文件进行处理(可以写在类里,此处简单处理) play.bitsCN.com累了吗玩一下吧

<%@ page contentType="text/html; charset=GBK"%>
<%@page import="org.apache.axis.client.Call"%>
<%@page import="javax.xml.namespace.QName"%>
<%@page import="java.net.MalformedURLException"%>
<%@page import="java.rmi.RemoteException"%>
<%@page import="java.util.*"%>
<%@page import="java.net.URL"%>
<%@page import="org.apache.axis.client.Service"%>
<%@page import="com.newSky.datainterface.beans.*"%>
<%!

dl.bitsCN.com网管软件下载

 

  private final static String success = "测试完成";
  private final static String fail = "测试失败:";
  final static String endPoint = "http://www.***.com/services/OrderService";
  final static String portName = "addNewOrder";
  final static String nameSpace = "http://beans.datainterface.newSky.com";
%>
<html>
<head></head>
<body>
<%
  try {
    Call call = null;
    URL url = null;
    try {
      //create new url
      url = new URL(endPoint);
    }
    catch (MalformedURLException e) {
      System.out.println(fail + e.getMessage());
      e.printStackTrace();
    }
    //create new service
    Service service = new Service();
    try {
      //create new call 需要什么来搜一搜吧so.bitsCN.com
      call = (Call) service.createCall();
    }
    catch (Exception se) {
      System.out.println(fail + se.getMessage());
      se.printStackTrace();
    }
    //设置服务器
    call.setTargetEndpointAddress(url);
    //设置端口
    call.setOperationName(new QName(endPoint, portName));
    //***********************
     //注册类,开始
     try {
       QName qn1 = new QName(nameSpace, "OrderUserData");
       call.registerTypeMapping(OrderUserData.class, qn1,
                                new org.apache.axis.encoding.ser.BeanSerializerFactory(OrderUserData.class, qn1),

bbs.bitsCN.com国内最早的网管论坛

                                new org.apache.axis.encoding.ser.BeanDeserializerFactory(OrderUserData.class, qn1));
     
     }
     catch (Exception EQ) {
       EQ.printStackTrace();
     }
    //注册类,结束
    //设置返回类型
    // set bean 此处省略。。
    try {
      //调用服务
      System.out.println("*************  测试开始 ******************");
      call.setUsername(request.getParameter("id"));
      String result = (String) call.invoke(new Object[] {new Integer(request.getParameter("id)),
                                             new String(request.getParameter("pwd")), orderData});

so.bitsCN.com网管资料库任你搜


      System.out.println(result);

bbs.bitsCN.com国内最早的网管论坛

 

      if(result.equals("-100")){
        out.write("用户名密码错误");
      }
       else{
        out.write("成功");
      }
      System.out.println("*************  测试完成 ******************");
    }
    catch (RemoteException re) {
      System.out.println(fail + re.getMessage());
      //re.printStackTrace();
    }
  }
  catch (Exception e) {
    // e.printStackTrace();
  }
%>
</body>
</html>

bitsCN全力打造网管学习平台

 

8. ok ^_^ bitsCN全力


来自:http://www.bitscn.com/java/webservice/200611/82110.html

posted @ 2007-06-29 12:33 狼爱上狸 阅读(474) | 评论 (0)编辑 收藏

用Axis开发基于Java的Web服务

概述

  本文介绍了一个比较简单实用的基于Java的SOAP引擎——Apache组织推出的Axis——的安装、配置和应用开发方法,希望对有兴趣做基于Java的Web Services应用开发的朋友有所帮助。

  Axis简介

  Axis是Apache组织推出的SOAP引擎,Axis项目是Apache组织著名的SOAP项目的后继项目,目前最新版本是采用Java开发的1.1版本,C++的版本正在开发之中。Axis v1.1软件包可以从http://ws.apache.org/axis/dist/1_1/下载得到。

  Axis的安装

  应用Axis开发Web Services,你需要有一个支持Servlet的服务器引擎,比如广为人知的Tomcat(Tomcat也是由Apache组织所提供的,目前的最新版本为4.1.24,下载地址为http://jakarta.apache.org/builds/jakarta-tomcat-4.0/release/v4.1.24/)。在此之前当然你机器必须已经装好了JDK1.3以上的版本,当安装好Tomcat之后,只需将下载的Axis软件包解压缩,将其中的“webapps”目录下的“axis”目录整个拷贝到Tomcat安装目录下的“webapps”目录下即可。

  Axis的配置

  Axis基于Java开发,可以部署于多种操作系统,使用前需要配置一系列的系统变量,在此假定你已经在本机上装好了Tomcat 4.0以上的版本,需要配置的系统变量如下表所示:

CATALINA_HOME
C:\Tomcat_4_1

(此处应为Tomcat的安装位置,注意路径名中不要有空格)

AXIS_HOME
%CATALINA_HOME%\webapps\axis

AXIS_LIB
%AXIS_HOME%\lib

AXISCLASSPATH
%AXIS_LIB%\axis.jar;%AXIS_LIB%\commons-discovery.jar; %AXIS_LIB%\commons-logging.jar;%AXIS_LIB%\jaxrpc.jar; %AXIS_LIB%\saaj.jar;%AXIS_LIB%\log4j-1.2.8.jar; %AXIS_LIB%\xml-apis.jar;%AXIS_LIB%\xercesImpl.jar

  如果你不愿做这么繁琐的类路径设置,可以直接将axis软件包中“lib”目录下的所有.jar文件加入到系统环境变量CLASSPATH中即可。

  Axis的测试

  安装配置完毕后,应测试一下是否Axis可以正确运行了。

  启动Tomcat服务器,在浏览器中访问http://localhost:8080/axis/happyaxis.jsp,如果页面显示有错误,则需要回头检查一下相关配置是否正确,如果浏览页面能正确显示出系统组件、属性等参数配置信息,则表示安装成功,如下图所示:



  现在可以开始开发你的Web Services应用了。

 


作者:飞鹰出处:yesky责任编辑: 方舟 [ 2003-08-21 16:50 ]
本文介绍了一个比较简单实用的基于Java的SOAP引擎的安装、配置和应用开发方法

  服务的发布

  Axis提供了两种服务发布方式,一种是即时发布(Instant Deployment),一种是定制发布(Custom Deployment)。

 

  使用即时发布

  对即时发布的支持是Axis的特色之一,使用即时发布使用户只需有提供服务的Java类的源代码,即可将其迅速发布成Web服务。每当用户调用这类服务的时候,Axis会自动进行编译,即使服务器重启了也不必对其做任何处理,使用非常简单快捷。

  使用即时发布首先需要一个实现服务功能的Java源文件,将其扩展名改为.jws(Java Web Service的缩写),然后将该文件放到“……\webapps\axis”目录下即可。

  在此给出一个从英里到公里的长度单位转换的服务,其源码如下:

文件Distance.jws

/**

* @author 飞鹰

*/

public class Distance

{

public double convertMile2Kilometre( double mile )

{

//实现英里到公里的距离转换

return mile * 1.609;

}//convertMile2Kilometre()

}/* Distance */

  将其放到“……\webapps\axis”目录,通过访问http://localhost:8080/axis/Distance.jws?wsdl可以看到这个服务的WSDL描述文件,这说明Distance服务被成功发布了。如下图所示:



  使用定制发布

  即时发布是一项令人激动的技术,它使Web服务的开发变得如此简单;然而即时发布并不总是最好的选择,比如有些应用系统是第三方提供的,我们没有购买源代码,只有.class文件,但我们又希望将这个应用系统的一些功能对外发布成Web服务,使其能够在更大范围内产生作用,这个时候即时发布技术就无能为力了。此外,即时发布技术并不灵活,无法进行更多的服务配置,这使得它并不能满足一些特定系统的需求。

  因此,Axis提供了另一种服务发布方式,这就是定制发布。

  在此给出一个从加仑到升的容积单位转换的服务,其源码如下:

  文件Capacity.java

package samples.capacity;

 

/**

* @author 飞鹰

*/

public class Capacity

{

public double convertGallon2Litre( double gallon )

{

//实现加仑到升的容积转换

return gallon * 4.546;

}//convertGallon2Litre()

}/* Capacity */

  将其编译成.class文件,放置到“……\webapps\axis\samples\capacity”目录下,即可着手进行发布。

  定制发布不需要构建.jws文件,但必须创建服务发布描述文件deploy.wsdd(Web Service Deployment Descriptor的缩写),这个文件负责描述服务的名称、入口等信息,其内容如下:

  文件deploy.wsdd

<deployment xmlns="http://xml.apache.org/axis/wsdd/"

xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">

 

<service name="Capacity" provider="java:RPC">

<parameter name="className" value="samples.capacity.Capacity"/>

<parameter name="allowedMethods" value="*"/>

</service>

 

</deployment>

  将该文件也放到“……\webapps\axis\samples\capacity”目录下,然后可以采用Axis提供的一个客户端管理工具——AdminClient来完成服务的定制发布。

  在“……\webapps\axis\samples\capacity”目录下,运行:

java -cp %AXISCLASSPATH% org.apache.axis.client.AdminClient deploy.wsdd

  可以看到以下运行结果:

Processing file deploy.wsdd

<Admin>Doneprocessing</Admin>

  这表明Capacity服务定制发布完成。

  通过访问http://localhost:8080/axis/services/Capacity?wsdl可以看到这个服务的WSDL描述文件,这说明Capacity服务被成功发布了。如下图所示:




作者:飞鹰出处:yesky责任编辑: 方舟 [ 2003-08-21 16:50 ]
本文介绍了一个比较简单实用的基于Java的SOAP引擎的安装、配置和应用开发方法

  服务的访问

  GET方式的服务访问

  一般的SOAP消息都是采用POST方式实现传递,但也可以通过GET方式来访问。比如以下给出的一个服务——“HelloWorld”,其源码如下:

 

文件HelloWorld.jws

/**

* @author 飞鹰

*/

public class HelloWorld

{

public String helloWorld()

{

//在服务器端打印输出

System.out.println( "Hello World!" );

 

//返回相应字符串

return "Hello World!";

}//helloWorld()

 

}/* HelloWorld */

  这个服务给出一个名位“helloWorld”的无入口参数的操作,返回一个内容为“Hello World!的字符串”,同时在服务器端打印“Hello World!”,将该文件放到“……\webapps\axis”目录下,即可通过GET方法直接访问该服务,访问的地址为http://localhost:8080/axis/HelloWorld.jws?method=helloWorld,可以看到返回的SOAP信封消息,同时服务器端给出了相应的显示信息“Hello World!”这表明HelloWorld服务被成功访问了。如下图所示:



  客户端服务访问编程

  Axis提供了一套API来实现SOAP,从http://localhost:8080/axis/docs/apiDocs/index.html可以看到Axis的API文档。

  其中,org.apache.axis.client.Call和org.apache.axis.client.Service是两个比较常用的类,一般的客户端程序欲访问一个Web Service时,都要生成一个客户端的Service对象和Call对象,在访问服务之前,首先要对Call对象设置相应的参数,包括服务的位置、操作名、入口参数、返回值类型等,最后调用Call对象的invoke方法访问服务。

  以下给出了一个客户端访问Web服务的例程——AXISTest.java:

  文件AXISTest.java

package axisexercise;

 

import org.apache.axis.client.Call;

import org.apache.axis.client.Service;

import org.apache.axis.encoding.XMLType;

 

import javax.xml.rpc.ParameterMode;

 

/**

* @author 飞鹰

*/

public class AXISTest

{

public static void main( String[] args ) throws Exception

{

Service service = new Service();

Call call = ( Call ) service.createCall();

 

 

//////////访问即时发布的Distance服务

//设置访问点

call.setTargetEndpointAddress( "http://localhost:8080/axis/Distance.jws" );

 

//设置操作名

call.setOperationName( "convertMile2Kilometre" );

 

//设置入口参数

call.addParameter( "op1", XMLType.XSD_DOUBLE, ParameterMode.IN );

call.setReturnType( XMLType.XSD_DOUBLE );

Double d1 = new Double( 190 );

 

//调用服务

System.out.println( d1 + " 英里相当于 " +

call.invoke( new Object[] {d1} ) + " 公里!" );

 

 

 

//////////访问定制发布的Capacity服务

call = ( Call ) service.createCall();

//设置访问点

call.setTargetEndpointAddress( "http://localhost:8080/axis/services/Capacity" );

 

//设置操作名

call.setOperationName( "convertGallon2Litre" );

 

//设置入口参数

call.addParameter( "op1", XMLType.XSD_DOUBLE, ParameterMode.IN );

call.setReturnType( XMLType.XSD_DOUBLE );

d1 = new Double( 10.00 );

 

//调用服务

System.out.println( d1 + " 加仑相当于 " +

call.invoke( new Object[] {d1} ) + " 升!" );

} //main()

}/* AXISTest */

  编译运行后运行可以看到以下的结果:

  190.0英里相当于305.71公里!

  10.0加仑相当于45.46升!
 
  注意程序在访问即时发布的Distance服务和定制发布的Capacity服务时的不同,前者的服务访问点地址为http://localhost:8080/axis/HelloWorld.jws,而后者的则为http://localhost:8080/axis/services/Capacity。


来自:http://hi.baidu.com/zxhcloth/blog/item/bb8637dbf28e0b67d0164ea5.html

posted @ 2007-06-29 10:17 狼爱上狸 阅读(347) | 评论 (0)编辑 收藏

在windows 2000,XP 下通过mod_jk2.so整合Tomcat5.0 和 Apache2.0

在windows 2000,XP 下通过mod_jk2.so整合Tomcat5.0 和 Apache2.0

------- dreamsky15(阿贤) 原创

准备工作:
分别到www.sun.comwww.apache.org 下载

JDK1.4 : j2sdk-1_4_2_04-windows-i586-p.exe
Tomcat5 : jakarta-tomcat-5.0.14.exe
apache2:apache_2.0.48-win32-x86-no_ssl.exe
jk2 : jakarta-tomcat-connectors-jk2.0.4-win32-apache2.0.49.zip

版本可能有所更新。


1.安装JDK1.4,指定安装在 C:\JDK1.4目录下;
2.确认80和8080端口不被占用,特别是IIS是否占用80端口,否则要修改端口设置;
3.安装Tomcat5.0,指定安装在C:\Tomcat5.0目录下,
 指定JAVA虚拟机目录为刚才安装的 C:\JDK1.4;
4.安装apache2,指定安装在 C:\ 根目录下,那么它自己会自动创建Apache2目录,
 得到 C:\Apache2 最终目录;
5.设置windows系统环境变量中的系统变量:

path:
 C:\JDK1.4\bin;C:\JDK1.4\jre\bin;

classpath:
 C:\JDK1.4;C:\JDK1.4\lib;C:\JDK1.4\lib\dt.jar;C:\JDK1.4\lib\tools.jar;C:\Tomcat5.0\common\lib\servlet-api.jar;C:\Tomcat5.0\common\lib\tools.jar;
6.重启电脑
7.用浏览器访问
http://localhost/  和 http://localhost:8080/ 
两个网站,它们分别是apache和Tomcat的默认首页;
如果不成功则要重新检查设置;
8.解压 jakarta-tomcat-connectors-jk2.0.4-win32-apache2.0.49.zip
9.在解压文件的 doc\mod_jk2 目录下有 INSTALL.txt 英文文档教你安装,你可以作为参照。
10.在解压文件的 modules 目录下有 mod_jk2.so 文件,将其复制到 C:\Apache2\modules;
11.在解压文件的 conf 目录下有 workers2.properties.sample文件,将其复制到 C:\Apache2\conf 目录下,将文件名改为workers2.properties,增加两行:
[uri:/*.jsp]
group=lb

这表明要Tomcat解释所有以 jsp 为后缀的文件。

增加
[uri:/servlet/*]
group=lb

这表明要Tomcat解释/servlet/目录下的所有文件,
所以所有servlet最好映射到 /servlet/ 路径下,其他的文件不要放到这个目录下。
(注:tomcat中所有没有在 web.xml 中注册的 servlet默认映射到 /servlet/ 路径下。
但前提条件是你要修改tomcat的 web.xml ,去掉两处 <servlet-name>invoker</servlet-name>的注释,来激活这个功能。)

这样做,是为了令到Tomcat专职解释所有 jsp 和 servlet ,而将 html,txt等类型的文件交给强大的Web服务器——apache解释,各司其职,分担Tomcat的压力。

12.备份好C:\Apache2\conf\httpd.conf防止不测,修改 C:\Apache2\conf\httpd.conf 文件,原文件有很多行LoadModule,
在其后增加一行:
LoadModule jk2_module modules/mod_jk2.so
这个在 INSTALL.txt 英文文档里有说;

找到 DocumentRoot "C:/Apache2/htdocs" ,修改为你指定的根目录
DocumentRoot "C:/Tomcat5.0/webapps"

正反斜杠无所谓,最好用 / ;

同样找到<Directory "C:/Apache2/htdocs">
修改为<Directory "C:/Tomcat5.0/webapps">

找到 DirectoryIndex index.html index.html.var
在后面增加 index.jsp 使得apache将index.jsp也作为默认首页。

13.将原来 <VirtualHost *:80> 相关的设置注释去掉,自定义你的实际参数;
其中
DocumentRoot /www/docs/dummy-host.example.com
改为DocumentRoot "C:/Tomcat5.0/webapps"

将 AddDefaultCharset ISO-8859-1 改为
AddDefaultCharset gb2312
使得apache默认是简体中文。
14.
启动Tomcat5.0,apache2
你会看到apache service monitor 控制台窗口下的状态栏文字由原来的
Apache/2.0.48 (Win32)
变为
Apache/2.0.48 (Win32) mod_jk2/2.0.4

分别访问 http://localhost/jsp-examples/
http://localhost:8080/jsp-examples/
测试其中的jsp例子,如果都能正确运行,证明配置成功!!!
恭喜你! :)

有错误或疑问,请多多交流。


来自:
http://blog.csdn.net/dreamsky15/archive/2004/10/11/132261.aspx

posted @ 2007-06-27 20:59 狼爱上狸 阅读(491) | 评论 (0)编辑 收藏

仅列出标题
共38页: First 上一页 28 29 30 31 32 33 34 35 36 下一页 Last