服务接口和实现

public interface HelloService {
// 服务方法
String sayHello(String name);
} public class HelloServiceImpl implements HelloService { public String sayHello(String name) {
return "RPC > Hello , " + name;
} }

Maven引用

<Hessian.version>4.0.38</Hessian.version>
<!--hessian start -->
<dependency>
<groupId>com.caucho</groupId>
<artifactId>hessian</artifactId>
<version>${Hessian.version}</version>
</dependency>
<!--hessian end -->

web.xml配置

配置HessianServlet

<!--HessianServlet start -->
<servlet>
<!-- 配置 HessianServlet -->
<servlet-name>helloService</servlet-name>
<servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class> <!-- 配置接口的具体实现类 -->
<init-param>
<param-name>service-class</param-name>
<param-value>com.ll.rpc.HelloServiceImpl</param-value>
</init-param>
</servlet>
<!-- 映射 HessianServlet的访问URL地址 -->
<servlet-mapping>
<servlet-name>helloService</servlet-name>
<url-pattern>/helloService</url-pattern>
</servlet-mapping>
<!--HessianServlet end -->

Tomcat配置

  1. 下载Tomcat:使用版本6.0.51;
  2. 配置环境变量:CATALINA_HOME=D:\xxx\apache-tomcat-6.0.51;
  3. 配置Javaweb为tomcat默认项目:

    修改server.xml,添加:可参见【Jersey】基于Jersey构建Restful Web应用
<Context path="" docBase="D:\xxx\target\Javaweb" debug="0" reloadable="true"/>

Clinet客户端实现

package com.ll.rpc;

import java.net.MalformedURLException;

import com.caucho.hessian.client.HessianProxyFactory;

public class Client {
public static void main(String[] args) {
// 远程Hessian服务
String url = "http://localhost:8080/helloService";
try {
// 利用hessianProxyFactory.create()方法创建一个代理对象
HelloService helloService = (HelloService) (new HessianProxyFactory()
.create(HelloService.class, url)); // 调用服务方法
System.out.println(helloService.sayHello("sssppp"));
} catch (MalformedURLException e) { }
}
}

输出结果测试:

RPC > Hello , sssppp

其他

参考链接:

常用RPC框架及一个简单的RPC框架实现

完整的web.xml如下:

可参见【Jersey】基于Jersey构建Restful Web应用

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<display-name>Java Web</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list> <!--Spring 文件路径 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:conf/beans/beans-*.xml</param-value>
</context-param> <!-- spring上下文监听器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener> <!-- 解决中文乱码 -->
<filter>
<filter-name>SetCharacterEncoding</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>false</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>SetCharacterEncoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> <!-- jersey Servlet start -->
<servlet>
<servlet-name>rest-inside</servlet-name>
<servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class>
<init-param>
<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
<param-value>true</param-value>
</init-param>
<!-- 设置Restful实例的位置 -->
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>com.ll.jersey</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>rest-inside</servlet-name>
<url-pattern>/jersey/rest/*</url-pattern>
</servlet-mapping>
<!-- jersey Servlet end --> <!--HessianServlet start -->
<servlet>
<!-- 配置 HessianServlet -->
<servlet-name>helloService</servlet-name>
<servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class> <!-- 配置接口的具体实现类 -->
<init-param>
<param-name>service-class</param-name>
<param-value>com.ll.rpc.HelloServiceImpl</param-value>
</init-param>
</servlet>
<!-- 映射 HessianServlet的访问URL地址 -->
<servlet-mapping>
<servlet-name>helloService</servlet-name>
<url-pattern>/helloService</url-pattern>
</servlet-mapping>
<!--HessianServlet end --> </web-app>

【RPC】使用Hessian构建RPC的简单示例的更多相关文章

  1. C# 构建XML(简单示例)

    C# 构建XML的简单示例: var pars = new Dictionary<string, string> { {"url","https://www. ...

  2. asp.net core系列 61 Ocelot 构建服务发现简单示例

    一.概述 Ocelot允许指定服务发现提供程序,如Consul或Eureka. 这二个中间件是用来实现:服务治理或秒服务发现,服务发现查找Ocelot正在转发请求的下游服务的主机和端口.目前Ocelo ...

  3. Nodejs学习笔记(十五)--- Node.js + Koa2 构建网站简单示例

    目录 前言 搭建项目及其它准备工作 创建数据库 创建Koa2项目 安装项目其它需要包 清除冗余文件并重新规划项目目录 配置文件 规划示例路由,并新建相关文件 实现数据访问和业务逻辑相关方法 编写mys ...

  4. [转]Nodejs学习笔记(十五)--- Node.js + Koa2 构建网站简单示例

    本文转自:https://www.cnblogs.com/zhongweiv/p/nodejs_koa2_webapp.html 目录 前言 搭建项目及其它准备工作 创建数据库 创建Koa2项目 安装 ...

  5. Nodejs学习笔记(十五)—Node.js + Koa2 构建网站简单示例

    前言 前面一有写到一篇Node.js+Express构建网站简单示例:http://www.cnblogs.com/zhongweiv/p/nodejs_express_webapp.html 这篇还 ...

  6. RPC原来就是Socket——RPC框架到dubbo的服务动态注册,服务路由,负载均衡演化

    序:RPC就是使用socket告诉服务端我要调你的哪一个类的哪一个方法然后获得处理的结果.服务注册和路由就是借助第三方存储介质存储服务信息让服务消费者调用.然我们自己动手从0开始写一个rpc功能以及实 ...

  7. 基于.NET CORE微服务框架 -surging的介绍和简单示例 (开源)

    一.前言 至今为止编程开发已经11个年头,从 VB6.0,ASP时代到ASP.NET再到MVC, 从中见证了.NET技术发展,从无畏无知的懵懂少年,到现在的中年大叔,从中的酸甜苦辣也只有本人自知.随着 ...

  8. Python Thrift 简单示例

    本文基于Thrift-0.10,使用Python实现服务器端,使用Java实现客户端,演示了Thrift RPC调用示例.Java客户端提供两个字符串参数,Python服务器端计算这两个字符串的相似度 ...

  9. dubbo简单示例

    dubbo简单示例 2019-09-06 1 Zookeeper注册中心的搭建(windows单机) 下载zookeeper压缩包并解压到 D:\zookeeper\apache-zookeeper- ...

随机推荐

  1. Django中的session于cookie的用法

    1.cookies 1.django 中使用 cookies 1.设置cookies的值(将数据保存到客户端) 语法: 响应对象.set_cookie(key,value,expires) key:c ...

  2. rcnn系列

    提纲挈领 https://blog.csdn.net/linolzhang/article/details/54344350 SPP https://www.cnblogs.com/gongxijun ...

  3. Node.js内置的文件系统模块(fs)

    异步读取文件 按照js的标准,异步读取一个文本文件的格式如下: 'use strict' const fs = require('fs') fs.readFile('test.txt', 'utf-8 ...

  4. php 中使用正则

    1.匹配一个由一个小写字母和一位数字组成的字符串,比如”z2″   用^[a-z][0-9]$ 2.当在一组方括号里使用^是,它表示“非”或“排除”的意思   比如要求第一个字符不能是数字:^[^0- ...

  5. linux cron计划任务、chkconfig 命令、systemd命令、unit 相关、target 相关

    1.设置说明位置 : cat /etc/crontab # Example of job definition:# .---------------- minute (0 - 59)# | .---- ...

  6. 【HDOJ3018】【一笔画问题】【欧拉回路+并查集】

    http://acm.hdu.edu.cn/showproblem.php?pid=3018 Ant Trip Time Limit: 2000/1000 MS (Java/Others)    Me ...

  7. Echarts全解注释

    coordinate-geo.js文件为地理坐标系的配置参数 mytextStyle={ color:"#333",//文字颜色 fontStyle:"normal&qu ...

  8. nginx常用参数设置

    1)隐藏nginx header 版本号 使用curl -I http://www.10.0.3.46 会发现server那里显示版本号 在nginx.conf的http里添加参数server_tok ...

  9. Python中列表(list)、字典(dict)排序的程序

    Python3 中的排序,在 Sorting HOW TO 中已经讲得很清楚了.来个实际的例子,对下面的这个 list 依据创建时间排序: pages = [{'title': '十年学会程序设计', ...

  10. MatConvNet中关于vl_simplenn_display的一些分析

    一.关于各层data size的分析 layer1:  floor((224-7)/2)+1=109 这里7是filter大小,2是stride layer4: floor((109+0+1-3)/2 ...