Hessian Spring相关使用的简单例子

一。简介

相比WebService,Hessian更简单、快捷。采用的是二进制RPC协议(Binary),因为采用的是二进制协议,所以它很适合于发送二进制数据。Hessian通常通过Web应用来提供服务,因此非常类似于WebService。只是它不使用SOAP协议。 Hessian通过Servlet提供远程服务。需要将匹配某个模式的请求映射到Hessian服务。Spring的DispatcherServlet可以完成该功能,DispatcherServlet可将匹配模式的请求转发到Hessian服务。Hessian的server端提供一个servlet基类, 用来处理发送的请求,而Hessian的
这个远程过程调用,完全使用动态代理来实现的,,推荐采用面向接口编程,因此,Hessian服务建议通过接口暴露。 

Hessian处理过程示意图: 
客户端——>序列化写到输出流——>远程方法(服务器端)——>序列化写到输出流 ——>客户端读取输入流——>输出结果 


二。 不使用Spring框架下的hessian相关例子

       1.  把Hessian相应jar包放入至工程中。

       2.  由于Hessian是采用面向接口编程的,所以编写一个接口,因为客户端仅仅需要接口,而无须真实的实现类。

       

package demo;

public interface ITest {

	public String sayHello();
	
}

3. 编写一个类实现这个接口。 

package demo;


/**
 * 
 * @author alan
 * @createtime 2013-4-11     
 *
 */
public class TestImpl implements ITest {

	@Override
	public String sayHello() {
		// TODO Auto-generated method stub
		return "HELLO ALAN.";
	}

}

4.  web.xml的详细配置

	<!-- noSpring -->
	<servlet>
		<servlet-name>Hello</servlet-name>
		<servlet-class>
			com.caucho.hessian.server.HessianServlet
		</servlet-class>
		<init-param>
			<param-name>home-class</param-name>
			<param-value>demo.TestImpl</param-value>
		</init-param>
		<init-param>
			<param-name>home-api</param-name>
			<param-value>demo.ITest</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>

	<servlet-mapping>
		<servlet-name>Hello</servlet-name>
		<url-pattern>/Hello</url-pattern>
	</servlet-mapping>

5. 客户端远程调用服务器端提供的接口,利用的就是Hessian的HessianProxyFactory,来实现远程代理。 

    客户端调用代码例子:

	private static void noSpring() {
		String url = "http://localhost:8080/SpringHessian/Hello";
		HessianProxyFactory factory = new HessianProxyFactory();
		try {
			ITest hello = (ITest) factory.create(ITest.class, url);
			System.out.println(hello.sayHello());
		} catch (MalformedURLException e) {
			e.printStackTrace();
		}
	}

三。 使用spring框架时候的Hessian例子。

Hessian与Spring整合 
相比上一种方式,这个方式就有点麻烦了。Hessian通过Servlet提供远程服务。需要将匹配某个模式的请求映射到Hessian服务。Spring的DispatcherServlet可以完成该功能,DispatcherServlet可将匹配模式的请求转发到Hessian服务,web.xml只是定义了“请求转发器”,该转发器将匹配/remoting/*的请求截获,转发给context的bean处理。而HessianServiceExporter提供bean服务。 
所以Hessian与Spring整合主要就是一下两个工作: 
1:通过DispatcherServlet来拦截URL请求。 
2:HessianServiceExporter提供bean服务,Spring使用HessianServiceExporter,将一个常规bean导出成Hessian服务。

具体配置步骤例子如下:

        一。客户端直接调用接口获取Bean实例例子。

        1。和上面的一样。 
2。和上面的一样。 
3。和上面的一样。 
4。web.xml的详细配置 

       

	<!-- SpringHessian -->
	<servlet>
		<servlet-name>remoting</servlet-name>
		<servlet-class>
			org.springframework.web.servlet.DispatcherServlet
		</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>remoting</servlet-name>
		<url-pattern>/remoting/*</url-pattern>
	</servlet-mapping>


5.  在WEB-INF文件夹下配置remoting-servlet.xml文件

	<!-- 定义普通bean实例-->
	<bean id="test" class="demo.TestImpl" />
	<!-- 使用HessianServiceExporter 将普通bean导出成Hessian服务-->
	<bean name="/test" class="org.springframework.remoting.caucho.HessianServiceExporter">
		<!-- 需要导出的目标bean -->
		<property name="service" ref="test" />
		<!-- Hessian服务的接口 -->
		<property name="serviceInterface" value="demo.ITest" />
	</bean>       

 6. 客户端调用例子

	private static void springHessian() throws MalformedURLException {
		String url = "http://localhost:8080/SpringHessian/remoting/test";  
        HessianProxyFactory factory = new HessianProxyFactory();  
        factory.setDebug(true);
		ITest hello = (ITest) factory.create(ITest.class, url);
	
		System.out.println(hello.sayHello());
	}

        二。客户端通过配置配置文件获取Bean实例例子。

        1.  客户端引入相关的JAR包。  

 2.  客户端定义一个 remote-client.xml文件 

 

<bean id="myServiceClient" class="org.springframework.remoting.caucho.HessianProxyFactoryBean"> 
<property name="serviceUrl"> 
<value>http://localhost:8080/SpringHessian/remoting/test</value> 
</property> 
<property name="serviceInterface"> 
<value>demo.ITest</value> 
</property> 
</bean> 

3.  客户端调用例子

try 
{ 
ApplicationContext context = new ClassPathXmlApplicationContext("remote-client.xml"); 

ITest hello =(ITest)context.getBean("myServiceClient"); 

System.out.println(hello.sayHello()); 
} 
catch (Exception e) 
{ 
e.printStackTrace(); 
} 

 



 


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值