Java:Hessian框架使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/new_Aiden/article/details/73065394

常见的远程通信方式有:WebService、RMI、JMS、RPC等。
先介绍下WebSrvice:大部分使用http协议实现,如J2EE中使用servlet等。
RMI:Remote Method Invocation(远程方法调用),采用基于TCP的协议,客户端直接调用服务器中实现好接口的实现类函数。只有基于JVM的语言才能够使用。
JMS:Java Message Service(Java消息服务),是一种基于消息队列的消息实现模型,常见的有:RabbitMQ、SQS等。
RPC:Remote Procedure Call Protocol(远程过程调用协议)采用基于TCP协议的实现方式。采用了C/S模型,跨语言跨平台。这也是RMI和RPC不同的地方。

所以RPC更加的实用一些。这里介绍一个实现了RPC协议的框架——Hessian。
Hessian是基于HTTP协议的。我们需要将其部署于Servlet容器中。
这里使用了Gradle构建工具。
build.gradle:

group 'com'
version '1.0-SNAPSHOT'

apply plugin: 'java'
apply plugin: 'war'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.11'
    testCompile group: 'junit', name: 'junit', version: '4.12'

    compile group: 'javax.servlet', name: 'servlet-api', version: '2.5'
    compile 'com.caucho:hessian:4.0.38'
}

新建个接口:

public interface OnClickListener {
  String onClick();
}

编写接口实现类,这里直接集成了HessianServlet:

public class OnClickListenerImpl extends HessianServlet implements OnClickListener {
  @Override
  public String onClick() {
    return "我被点击了";
  }
}

因为Hessian是基于HTTP协议的,所以需要配置web.xml。

  <servlet>
    <servlet-name>click</servlet-name>
    <servlet-class>com.OnClickListenerImpl</servlet-class>
  </servlet>

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

上面的配置说明,访问http://localhost:8080/{项目名}/click 就能够得到OnClickListenerImpl这个实现类。
然后我们将代码跑在Tomcat或者Jetty等servlet容器中。

我们编写客户端代码:

String url = "http://localhost:8080/{项目名}/click";
HessianProxyFactory factory = new HessianProxyFactory();
OnClickListener onClickListener = (OnClickListener) factory.create(OnClickListener.class, url);
System.out.println(onClickListener.onClick());

如果上述过程没有错误的话,是会输出我被点击了的。

上述基本能够使用Hessian框架了。但是我们新建的OnClickListenerImpl这个类是继承自HessianServlet。那么能不能不继承HessianServlet呢?其实是可以的。我们修改下web.xml

  <servlet>
    <servlet-name>click</servlet-name>
    <servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class>
    <init-param>
      <param-name>home-class</param-name>
      <param-value>com.OnClickListenerImpl</param-value>
    </init-param>
    <init-param>
      <param-name>home-api</param-name>
      <param-value>com.OnClickListener</param-value>
    </init-param>
  </servlet>

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

我们在web.xml中配置HessianServlet所代理的接口和其实现类,也是能够实现上述功能的。

猜你喜欢

转载自blog.csdn.net/new_Aiden/article/details/73065394