欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java:Hessian框架使用

程序员文章站 2022-05-28 16:26:21
...

常见的远程通信方式有: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所代理的接口和其实现类,也是能够实现上述功能的。

上一篇: pymysql使用(一)

下一篇: pymysql使用