- 浏览: 258121 次
- 性别:
- 来自: 天津
文章分类
- 全部博客 (180)
- J2SE (15)
- J2EE (7)
- Struts (2)
- Hibernate (18)
- Spring (22)
- ssh (2)
- HTML (1)
- JS (10)
- CSS (3)
- jQuery (15)
- extJS (0)
- FLEX (14)
- Web service (7)
- Axis2 (3)
- lucene2.0 (9)
- maven (3)
- JBoss (0)
- WebLogic (0)
- Linux (8)
- Android (0)
- SiteMesh (1)
- JPA (0)
- JBPM (1)
- xFire (3)
- XML (4)
- apache (4)
- bingo专区 (0)
- 加密解密算法研究 (1)
- 数据库 (16)
- 资料 (1)
- 经验 (4)
- 健康 (1)
- 技术交流区 (1)
- 交友区 (0)
- jquery 插件区 (1)
最新评论
-
forrest_lv:
很有帮助
Axis2 XFire CXF 比较 -
kuloujianzun:
...
flex DataGrid -
zx.peng:
大哥,请教一下...
下面在别的地方引入:(在什么地方、怎么 ...
FLEX下拉多选框 -
elvislee030:
试试去,正好要找这个组件。。先谢过
FLEX下拉多选框 -
futrueboy:
如果你发到网上来,请翻译的好点
Apache Mina的学习应用(三)
Spring框架对远程访问技术提供了很好的集成机制,Spring目前支持的技术包括: 这里,我们着重讨论一下Spring对于Web Service的支持。这种支持包括两方面: 对于需要发布为Web Service的业务逻辑bean,只需要继承Spring的ServletEndpointSupport 类即可。假设有如下业务接口以及相应的实现类: public class SayHelloEndPoint extends ServletEndpointSupport implements SayHello protected void onInit() //将业务逻辑bean的业务方法公开发布为WebService <?xml version="1.0" encoding="UTF-8"?> <beans> 然后修改web.xml文件,让AxisServlet拦截某些请求 ,示例如下: <web-app> <!-- 定义AxisServlet--> <!-- 映射AxisServlet--> 在上述配置文件中,可以看到所有匹配/axis/*模式的请求都由AxisServlet处理。即:Spring发布的Web Service都在放在axis路径下。 <?xml version="1.0" encoding="UTF-8"?> 经过上述这些步骤,可将部署在Spring的普通业务逻辑bean发布成Web Service。 public class WebServiceClient System.out.println(s); 而如果利用IoC容器管理WebService,必须借助于JaxRpcPortProxyFactoryBean类,该类是个工厂bean,与所有的工厂bean一样,对该bean的请求将返回它的产品。
1. Remote Method Invocation (RMI)。通过 RmiProxyFactoryBean和RmiServiceExporter,Spring支持以java.rmi.Remote和java.rmi.RemoteException 定义的传统RMI接口,提供经由RMI的透明访问;
2.Spring内置的HTTP invoker远程调用机制。Spring开发团队意识到在RMI服务和基于HTTP的服务(如Hessian和Burlap)之间的空白。一方面,RMI使用Java标准的对象序列化,但很难穿越防火墙;另一方面,Hessian/Burlap能很好地穿过防火墙工作,但使用自己私有的一套对象序列化机制。因此,Spring的HTTP invoker应运而生。HTTP invoker是一个全新的远程调用模型,作为Spring框架的一部分,来执行基于HTTP的远程调用(可穿越防火墙),并使用Java的序列化机制(从而降低开发工作的难度)。当参数或返回值是复杂类型,并且不能通过Hessian的序列化机制序列化时,Http invoker就很有优势。 Spring中相应的支持类是HttpInvokerProxyFactoryBean和HttpInvokerServiceExporter;
3.Hessian。作为一个轻量级分布式组件技术,Hessian采用了自己定义的二进制协议,这似乎与目前业界大量应用SOAP的趋势背道而驰,但对于一些简单的远程访问服务,Hessian足够应对。在Spring中,通过HessianProxyFactoryBean和HessianServiceExporter两个类,我们可以透明地将需要对外提供的服务发布出去,当然这里依旧采用Caucho这家来自California的公司的二进制协议;
4.Burlap。Burlap可以说是Hessian的XML版本。Spring中的支持类包括BurlapProxyFactoryBean和BurlapServiceExporter;
5.JAX RPC(Java APIs for XML-based Remote Procedure Call)。 Spring支持通过JAX RPC访问的Web Service。事实上,Spring对于Web Service的封装相当简单,Spring提供了一个代理工厂Bean:JaxRpcPortProxyFactoryBean,能让你在应用中无缝集成一个web sevice,作为另一个Bean的协作者,JaxRpcPortProxyFactoryBean类用JAX-RPC来访问远程Web Service。
6.JMS。Spring中对应的支持类包括JmsInvokerServiceExporter和JmsInvokerProxyFactoryBean。
第一,基于JAX-RPC发布Web Service。
第二,访问Web Service。
public interface SayHello
{
public String sayHello(String who);
}
public class SayHelloImpl implements SayHello
{
public String sayHello(String who)
{
return "Hello,"+who;
}
}
如果需要将SayHelloImpl 发布为Web Service,则需要编写一个Web Service类,让该类实现SayHello接口,并继承ServletEndpointSupport类。示例如下:
{
private SayHello sh;
{
this.sh = (SayHello) getWebApplicationContext().getBean("sayHello");
}
public String sayHello(String who) throws RemoteException
{
return sh.sayHello(who);
}
}
而后,定义Spring的配置文件,在配置文件中部署业务bean,示例如下:
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<bean id="sayHello" class="com.ws.SayHelloImpl">
<property name=>
</bean >
</beans>
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD WebApplication 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>AxisServlet</servlet-name>
<servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>/axis/*</url-pattern>
</servlet-mapping>
</web-app>
然后编写WSDL文件,或者使用工具生成。WSDL文件如下:
<!-- wsdl的根元素,包含schema等信息-->
<deployment xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<!-- wsdl的全局配置-->
<globalConfiguration>
<parameter name="adminPassword" value="admin"/>
<parameter name="sendXsiTypes" value="true"/>
<parameter name="sendMultiRefs" value="true"/>
<parameter name="sendXMLDeclaration" value="true"/>
<parameter name="axis.sendMinimizedElements" value="true"/>
<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="Authenticate" type="java:org.apache.axis.handlers.SimpleAuthenticationHandler"/>
<handler name="LocalResponder" type="java:org.apache.axis.transport.local.LocalResponder"/>
<handler name="URLMapper" type="java:org.apache.axis.handlers.http.URLMapper"/>
<!-- 定义WebService的管理台-->
<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>
<!-- 定义自己的WebService-->
<service name="SayHelloService" provider="java:RPC">
<parameter name="allowedMethods" value="*"/>
<!-- 定义WebService的实现类-->
<parameter name="className" value="com.ws.SayHelloEndpoint"/>
</service>
<!-- 定义WebSerivice的系统服务。-->
<service name="Version" provider="java:RPC">
<parameter name="allowedMethods" value="getVersion"/>
<parameter name="className" value="org.apache.axis.Version"/>
</service>
<transport name="http">
<requestFlow>
<handler type="URLMapper"/>
<handler type="java:org.apache.axis.handlers.http.HTTPAuthHandler"/>
</requestFlow>
</transport>
<transport name="local">
<responseFlow>
<handler type="LocalResponder"/>
</responseFlow>
</transport>
</deployment>
Spring发布的Web Service是标准的基于SOAP协议的Web Service。因此可以使用标准客户端访问,也可以利用IoC容器来管理Web Service,利用IoC容器时,必须借助于JaxRpcPortProxyFactoryBean。
使用标准客户端访问Web Service非常简单,只需要获得WebService的URL以及方法名即可。根据上面的发布,知道Web Service的URL如下:http://localhost:8080/axis-spring/axis/SayHelloService,则客户端代码示例如下:
{
public static void main(String args[])
{
System.out.println("开始调用WebService");
try
{
//WebService所在的URL
String endpoint = "http://localhost:8080/axis-spring/axis/SayHelloService";
//创建Service对象,Service对用用于创建Call对象
Service service = new Service();
//创建Call对象,Call对象用于调用服务
Call call = (Call)service.createCall();
//为Call对象设置WebService的url
call.setTargetEndpointAddress(new java.net.URL(endpoint));
//为Call对象设置调用的方法名
call.setOperationName("sayHello");
//调用WebService的方法,并获得返回值
String s = (String)call.invoke(new Object[] {"刘德华"});
}
catch (Exception e)
{
System.out.println(e.toString());
}
System.out.println("调用Web Service正常结束");
}
}
配置JaxRpcPortProxyFactoryBean,只需提供WebService的URL、命名空间等必需信息,将可以返回Web Service服务。在Spring配置文件中JaxRpcPortProxyFactoryBean的定义如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!-- 配置测试bean-->
<bean id="test" class="com.ws.Test">
<property name="sayHello">
<ref local="sayHelloService"/>
</property>
</bean>
<!-- 配置WebService bean-->
<bean id="sayHelloService" class="org.springframework.remoting.jaxrpc.JaxRpcPortProxyFactoryBean">
<!-- 配置WebService实现的接口-->
<property name="serviceInterface">
<value>com.ws.SayHello</value>
</property>
<!-- 配置WebService的wsdl的URL-->
<property name="wsdlDocumentUrl">
<value>http://localhost:8080/axis-spring/axis/SayHelloService?wsdl</value>
</property>
<!-- 配置WebService的命名空间uri-->
<property name="namespaceUri">
<value>http://localhost:8080/axis-spring/axis/SayHelloService</value>
</property>
<!-- 配置WebService的服务名-->
<property name="serviceName">
<value>SayHelloService</value>
</property>
<!-- 配置WebService的portName-->
<property name="portName">
<value>SayHelloService"</value>
</property>
</bean>
</beans>
发表评论
-
Spring 企业级开发应用---------httpinvoke和spring的远程服务整合的应用
2010-08-16 14:35 942和burlap和hessian一样的配置细细 服务端服务 ... -
Spring 企业级开发应用---------hessian和spring的远程服务整合的应用
2010-08-16 14:35 907hessian和burlap使用同一公司的产品实现机制不同 ... -
Spring 企业级开发应用---------burlap和spring的远程服务整合的应用
2010-08-16 14:34 834使用burlap和spring整合发布远程服务 开发步骤 ... -
Spring 企业级开发应用---------rmi和spring的整合的应用
2010-08-16 14:34 798使用spring和rmi开发远程服务的类的应用(此处可以一 ... -
spring2.5 和Hibernate的注解的应用
2010-08-16 14:30 764一、步骤 a. <!-- 数据源 --&g ... -
获取ApplicationContext的几种方式
2010-08-16 14:26 947第一种采用类路径的加载方式获取: Appli ... -
Spring 注解的配置的细节
2010-08-16 14:16 1673一. spring注解 1.准备工作(1)导入comm ... -
使用Spring 2.5 注释驱动的 IoC 功能
2010-08-16 14:10 834在项目中使用Spring的注解,关于sp ... -
Spring 和ActionMQ整合JMS开发应用
2010-08-16 13:51 1491Spring 和ActionMQ整合 ... -
Spring中添加 Log4j注解
2010-08-16 13:49 2478参照别人的代码做了个Demo如下: Spring的加载时 ... -
Spring 的优秀工具类盘点,特殊字符转义和方法入参检测工具类
2010-08-16 13:46 965Spring 不但提供了一个功能全面的应用开发框架,本身还 ... -
Spring Web 相关工具类
2010-08-16 13:38 990Web 相关工具类 您几乎总是使用 Spring 框架开 ... -
Spring 的优秀工具类盘点
2010-08-16 13:22 735Spring 不但提供了一个功能全面的 ... -
Spring ApplicationContext.xml配置的12个技巧
2010-08-16 13:08 1227Spring是一个强有力的ja ... -
Spring 中一个常用的反射类库ReflectionUtils
2010-08-16 13:05 4347在项目中部分方法采用反射,通过类访问类的属性,通过类反问方法, ... -
spring 的OpenSessionInViewFilter简介
2010-08-16 11:39 587假设在你的应用中Hibernate是通过spring 来管 ... -
使用hibernate3和Spring解决Oracle大字段(长文本)问题
2010-08-16 11:33 1441使用Oracle来存储长文本始终没Mysql ... -
Spring中Quartz的配置
2009-11-02 09:56 639Quartz是一个强大的企业级任务调度框架,Spring中继承 ... -
使用Spring2.5的Autowired实现注释型的IOC
2009-11-01 21:10 964使用Spring2.5的新特性——Autowired可以实现 ... -
Spring声明式事务管理(下)
2009-11-01 20:58 1132三.用BeanNameAutoProxyCreator自动 ...
相关推荐
浪曦航母战斗编队式企业级项目培训系列明细 JAVA,JSP/Servlet基础 Struts2 Hibernate Spring Html/CSS/ 浪曦JavaScript框架实战开发及应用 ExtJs 3.0 Oracle数据库,企业软件的基石 真实企业级CRM项目 ...
企业级应用程序示例,包含所有jar包,调试完成,tomcat,wehsphere6跑都没问。
1.ActiveMQ消息队列中间件 1.1.什么是ActiveMQ ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。...CXF和Axis支持,以便ActiveMQ可以轻松地放入这些Web服务堆栈中以提供可靠的消息传递。
GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....
GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....
CXF和Axis支持,以便ActiveMQ可以轻松地放入这些Web服务堆栈中以提供可靠的消息传递 可以用作内存JMS提供程序,非常适合单元测试JMS 支持可插拔传输协议,例如in-VM,TCP,SSL,NIO,UDP,多播,JGroups和JXTA传输...
GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....
GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....
GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....
GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....
GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....
GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....
GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....
GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....
GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....
GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....
GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....
2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...
FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户可以在终端上...