Hessian入门(与Spring集成)

Hessian入门(与Spring集成)

By:wtang

说明 :

1. 讲述如何配置Hessian的服务器端(与Spring集成).

2. 讲述客户端如何调用

① 使用HessianProxyFactory Hessian代理工厂直接调用

② 使用HessianProxyFactoryBean Hessian代理工厂Bean来完成接口调用.

1. 讲述如何配置Hessian的服务器端(与Spring集成).

接口定义类: com.wtang.isay. Isay:

  1. packagecom.wtang.isay;
  2. publicinterfaceIsay{
  3. publicStringsayHello(Stringarg1,Stringarg2);
  4. }
package com.wtang.isay;public interface Isay { public String sayHello(String arg1,String arg2);}

接口具体实现类: com.wtang.isay. IsayImpl

  1. packagecom.wtang.isay;
  2. publicclassIsayImplimplementsIsay{
  3. publicStringsayHello(Stringarg1,Stringarg2){
  4. return"Hello:"+arg1+arg2;
  5. }
  6. }
package com.wtang.isay;public class IsayImpl implements Isay { public String sayHello(String arg1, String arg2) { return "Hello:" + arg1 + arg2; }}

配置Web.xml:

  1. <servlet>
  2. <servlet-name>remote</servlet-name>
  3. <!--使用Spring的代理Servlet-->
  4. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  5. <init-param>
  6. <param-name>namespace</param-name>
  7. <param-value>classes/remote-servlet</param-value>
  8. </init-param>
  9. <load-on-startup>1</load-on-startup>
  10. </servlet>
  11. <servlet-mapping>
  12. <servlet-name>remote</servlet-name>
  13. <url-pattern>/remote/*</url-pattern>
  14. </servlet-mapping>
<servlet> <servlet-name>remote</servlet-name> <!-- 使用Spring的代理Servlet --> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>namespace</param-name> <param-value>classes/remote-servlet</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>remote</servlet-name> <url-pattern>/remote/*</url-pattern> </servlet-mapping>

配置remote-servlet.xml[该文件位于src目录下,即编译后存在与classes下]:

  1. <!DOCTYPEbeansPUBLIC"-//SPRING//DTDBEAN//EN""http://www.springframework.org/dtd/spring-beans.dtd">
  2. <beans>
  3. <!--接口的具体实现类-->
  4. <beanid="impl"class="com.wtang.isay.IsayImpl"/>
  5. <!--使用Spring的HessianServie做代理-->
  6. <beanname="/helloSpring"
  7. class="org.springframework.remoting.caucho.HessianServiceExporter">
  8. <!--service引用具体的实现实体Bean-->
  9. <propertyname="service"ref="impl"/>
  10. <propertyname="serviceInterface"value="com.wtang.isay.Isay"/>
  11. </bean>
  12. <!--可以配置多个HessianServiceExporter代理Bean-->
  13. </beans>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"><beans> <!-- 接口的具体实现类 --> <bean id="impl" class="com.wtang.isay.IsayImpl" /> <!-- 使用Spring的HessianServie做代理 --> <bean name="/helloSpring" class="org.springframework.remoting.caucho.HessianServiceExporter"> <!-- service引用具体的实现实体Bean--> <property name="service" ref="impl" /> <property name="serviceInterface" value="com.wtang.isay.Isay" /> </bean> <!-- 可以配置多个HessianServiceExporter代理Bean --></beans>

注:

这个文件为什么叫remote-servlet.xml呢?

因为我们在web.xml中有配置:<servlet-name>remote</servlet-name>。

所以remote-servlet.xml的文件名必须以

<servlet-name>中配置的servlet-name作为文件名的开头,

且文件名的格式必须是[servlet-name]-servlet.xml格式,否则检测不到。

即:

<param-value>classes/remote-servlet</param-value>

所以文件名为remote-servlet.xml。

2. 讲述客户端如何调用

①使用HessianProxyFactory Hessian代理工厂直接调用

即:

  1. packagecom.wtang.test;
  2. importjava.net.MalformedURLException;
  3. importcom.caucho.hessian.client.HessianProxyFactory;
  4. importcom.wtang.isay.Isay;
  5. publicclassNormalClient{
  6. publicstaticvoidmain(String[]args)throwsMalformedURLException{
  7. //SpringHessian代理Servelet
  8. Stringurl="http://localhost:8080/HessianSpring/remote/helloSpring";
  9. HessianProxyFactoryfactory=newHessianProxyFactory();
  10. Isayapi=(Isay)factory.create(Isay.class,url);
  11. System.out.println(api.sayHello("chen","weitang"));
  12. }
  13. }
package com.wtang.test;import java.net.MalformedURLException;import com.caucho.hessian.client.HessianProxyFactory;import com.wtang.isay.Isay;public class NormalClient { public static void main(String[] args) throws MalformedURLException { //Spring Hessian代理Servelet String url = "http://localhost:8080/HessianSpring/remote/helloSpring"; HessianProxyFactory factory = new HessianProxyFactory(); Isay api = (Isay) factory.create(Isay.class, url); System.out.println(api.sayHello("chen", "weitang")); }}

输出Hello:chenweitang

2. 讲述客户端如何调用

②使用HessianProxyFactoryBean Hessian代理工厂Bean来完成接口调用.

配置客户端 remote-client.xml:

  1. <!DOCTYPEbeansPUBLIC"-//SPRING//DTDBEAN//EN""http://www.springframework.org/dtd/spring-beans.dtd">
  2. <beans>
  3. <!--客户端Hessian代理工厂Bean-->
  4. <beanid="clientSpring"class="org.springframework.remoting.caucho.HessianProxyFactoryBean">
  5. <!--请求代理Servlet路径-->
  6. <propertyname="serviceUrl">
  7. <value>http://localhost:8080/HessianSpring/remote/helloSpring</value>
  8. </property>
  9. <!--接口定义-->
  10. <propertyname="serviceInterface">
  11. <value>com.wtang.isay.Isay</value>
  12. </property>
  13. </bean>
  14. </beans>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"><beans> <!-- 客户端Hessian代理工厂Bean --> <bean id="clientSpring" class="org.springframework.remoting.caucho.HessianProxyFactoryBean"> <!-- 请求代理Servlet路径 --> <property name="serviceUrl"><value>http://localhost:8080/HessianSpring/remote/helloSpring</value> </property> <!-- 接口定义 --> <property name="serviceInterface"> <value>com.wtang.isay.Isay</value> </property> </bean></beans>

调用:

  1. packagecom.wtang.test;
  2. importorg.springframework.context.ApplicationContext;
  3. importorg.springframework.context.support.ClassPathXmlApplicationContext;
  4. importcom.wtang.isay.Isay;
  5. publicclassSpringClient{
  6. publicstaticvoidmain(String[]args){
  7. ApplicationContextcontex=newClassPathXmlApplicationContext(
  8. "remote-client.xml");
  9. //获得客户端的Hessian代理工厂bean
  10. Isayi=(Isay)contex.getBean("clientSpring");
  11. System.out.println(i.sayHello("chen","weitang"));
  12. }
  13. }
package com.wtang.test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.wtang.isay.Isay;public class SpringClient { public static void main(String[] args) { ApplicationContext contex = new ClassPathXmlApplicationContext( "remote-client.xml"); // 获得客户端的Hessian代理工厂bean Isay i = (Isay) contex.getBean("clientSpring"); System.out.println(i.sayHello("chen", "weitang")); }}

输出Hello:chenweitang

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值