一、服务端

1、创建web项目,建立客户端调用的hessian接口和实现类。

接口:

package com.ymx.hessian.service;

import com.ymx.hessian.service.entity.User;

public interface UserService {

    User getUser(String name);

}

实现类:

package com.ymx.hessian.service.impl;

import com.ymx.hessian.service.UserService;
import com.ymx.hessian.service.entity.User; public class UserServiceImpl implements UserService{ @Override
public User getUser(String name) {
User user = new User();
user.setName(name);
user.setAddress("南京");
return user;
} }

传输对象,要实现序列化:

package com.ymx.hessian.service.entity;

import java.io.Serializable;

public class User implements Serializable{

    private static final long serialVersionUID = 5084037062770113475L;

    private String name;

    private String address;

    public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getAddress() {
return address;
} public void setAddress(String address) {
this.address = address;
} @Override
public String toString() {
return "User [name=" + name + ", address=" + address + "]";
} }

2、配置hessian服务端接口发布的配置文件。

配置web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>hessianserver</display-name>
<servlet>
<servlet-name>HessianServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/hessian-server.xml
</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>HessianServlet</servlet-name>
<url-pattern>/hessian/service/*</url-pattern>
</servlet-mapping> <welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>

配置hessian-server.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <bean id="userServiceImpl" class="com.ymx.hessian.service.impl.UserServiceImpl" /> <!-- 使用HessianServiceExporter 将普通bean导出成Hessian服务 -->
<bean name="/user"
class="org.springframework.remoting.caucho.HessianServiceExporter">
<property name="service" ref="userServiceImpl" />
<!-- Hessian服务的接口 -->
<property name="serviceInterface" value="com.ymx.hessian.service.UserService" />
</bean> </beans>

二、客户端

调用前把服务端发布接口和实体打成jar包提供给客户端。

1、第一种调用服务端hessian方式

调用的url为:http://ip:port/工程名/web.xml中所配置的url-pattern/hessian-server.xml所配置的bean的name;

package com.ymx.client;

import java.io.IOException;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; import com.caucho.hessian.client.HessianProxyFactory;
import com.ymx.hessian.service.UserService; public class Test { public static void main(String[] args) throws IOException {
first();
} public static void first() throws IOException{
String url = "http://localhost:8080/hessianserver/hessian/service/user";
HessianProxyFactory factory = new HessianProxyFactory();
UserService userService = (UserService) factory.create(UserService.class, url);
System.out.println(userService.getUser("jack"));
} }

2、第二种调用方式

创建hessian-client.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd"> <bean id="hessianClient"
class="org.springframework.remoting.caucho.HessianProxyFactoryBean">
<property name="serviceUrl">
<value>http://localhost:8080/hessianserver/hessian/service/user</value>
</property>
<property name="serviceInterface">
<value>com.ymx.hessian.service.UserService</value>
</property>
</bean> </beans>

java代码调用:

package com.ymx.client;

import java.io.IOException;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; import com.caucho.hessian.client.HessianProxyFactory;
import com.ymx.hessian.service.UserService; public class Test { public static void main(String[] args) throws IOException {
second();
} public static void second() throws IOException{
ApplicationContext context = new ClassPathXmlApplicationContext("hessian-client.xml");
UserService userService = (UserService) context.getBean("hessianClient");
System.out.println(userService.getUser("rose"));
} }

第三种调用方式

可以使用注解的方式把接口service注入到要调用接口的地方。

package com.ymx.client;

import java.io.IOException;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; import com.caucho.hessian.client.HessianProxyFactory;
import com.ymx.hessian.service.UserService; import org.springframework.beans.factory.annotation.Autowired; public class Test { @Autowired
private UserService userService; public static void main(String[] args) throws IOException {
third();
} public static void third() throws IOException{
System.out.println(userService.getUser("rose"));
} }

Hessian服务端和客户端示例的更多相关文章

  1. gSOAP calc服务端与客户端示例

    1. Web服务定义描述头文件 typedef double xsd__double; int ns__add(xsd__double a, xsd__double b, xsd__double &a ...

  2. 【GoLang】golang HTTP GET/POST JSON的服务端、客户端示例,包含序列化、反序列化

    服务端代码示例: package main import ( "encoding/json" "fmt" "io/ioutil" " ...

  3. 简单的UDP服务端和客户端示例

    UDP的理论不再多说,我这里直接给出一个关于UDP的HelloWorld程序,代码明了,希望对刚入门的学生有所帮助! 当然,实际上,在这块我也刚入门! 首先写服务端代码,服务端邦定本地的IP和端口来监 ...

  4. 基于Select模型的Windows TCP服务端和客户端程序示例

    最近跟着刘远东老师的<C++百万并发网络通信引擎架构与实现(服务端.客户端.跨平台)>,Bilibili视频地址为C++百万并发网络通信引擎架构与实现(服务端.客户端.跨平台),重新复习下 ...

  5. 使用flask_socketio实现服务端向客户端定时推送

    websocket连接是客户端与服务器之间永久的双向通信通道,直到某方断开连接. 双向通道意味着在连接时,服务端随时可以发送消息给客户端,反之亦然,这在一些需要即时通讯的场景比如多人聊天室非常重要. ...

  6. C# 编写WCF简单的服务端与客户端

    http://www.wxzzz.com/1860.html Windows Communication Foundation(WCF)是由微软开发的一系列支持数据通信的应用程序框架,可以翻译为Win ...

  7. QUdpSocket-Qt使用Udp通讯实现服务端和客户端

    版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:QUdpSocket-Qt使用Udp通讯实现服务端和客户端     本文地址:https:// ...

  8. 采用MQTT协议实现android消息推送(2)MQTT服务端与客户端软件对比、android客户端示列表

    1.服务端软件对比 https://github.com/mqtt/mqtt.github.io/wiki/servers 名称(点名进官网) 特性 简介 收费 支持的客户端语言 IBM MQ 完整的 ...

  9. 常量,字段,构造方法 调试 ms 源代码 一个C#二维码图片识别的Demo 近期ASP.NET问题汇总及对应的解决办法 c# chart控件柱状图,改变柱子宽度 使用C#创建Windows服务 C#服务端判断客户端socket是否已断开的方法 线程 线程池 Task .NET 单元测试的利剑——模拟框架Moq

    常量,字段,构造方法   常量 1.什么是常量 ​ 常量是值从不变化的符号,在编译之前值就必须确定.编译后,常量值会保存到程序集元数据中.所以,常量必须是编译器识别的基元类型的常量,如:Boolean ...

随机推荐

  1. jquery实现点击进行跳转后,改点击的元素添加选中的效果

    <style> .active { color: red; } </style> //html代码 <ul id="tab2"> <li& ...

  2. Zepto源码分析-架构

    构造函数 Zepto.js 是专门为智能手机浏览器推出的javascript库, 拥有与和jQuery相似的语法. 它的优点是精简,压缩后5-10K. 不支持IE MIT开源协议 结构   http: ...

  3. C++ STL快速入门

    在数月之前的机试中第一次体验到STL的威力,因为自己本来一直在用C语言做开发,很多数据结构都是自己造的,比如链表.队列等,第一次接触C++ STL后发现这些数据结构都已经给我提供好了,我直接拿去调用就 ...

  4. 页面中的平滑滚动——smooth-scroll.js的使用

    正常的本页面锚链接跳转的时候跟PPT似的,特别生硬,用户体验非常差. 这时候我们就可以借助smooth-scroll.js这个插件,来实现本页面的平滑的跳转. 1首先,导入必须的JS文件 <sc ...

  5. python requests get/post

    基本Get请求: #-*- coding:utf-8 -*- import requests url = 'http://www.baidu.com' r = requests.get(url) pr ...

  6. html 获取宽高

    jquery获取元素宽高的方法如下 1.元素自身高度 $("#div").height(); 2.元素自身高度 + padding $("#div").inne ...

  7. JavaScript实现单击全选 ,再次点击取消全选

                 以下为实现思路,已测试,供参考 var allSet = document.getElementById('allSet');//获取全选按钮元素 var a = allSe ...

  8. MyBatis7:MyBatis插件及示例----打印每条SQL语句及其执行时间

    Plugins 摘一段来自MyBatis官方文档的文字. MyBatis允许你在某一点拦截已映射语句执行的调用.默认情况下,MyBatis允许使用插件来拦截方法调用 Executor(update.q ...

  9. QUICK-AP + BETTERCAP 搭建热点, 欺骗局域网内用户下载任意可执行文件

    环境需求 1:kali系统 , 2.0版本 2:quick-ap 3:bettercap 4:bettercap-proxy-modules 5:博客园账号(把zip文件传到博客园的文件服务器) 主要 ...

  10. OCI(Open Container Initiative) & OCF (Open Container Format)

    Linux基金会于2015年6月成立OCI(Open Container Initiative)组织,旨在围绕容器格式和运行时制定一个开放的工业化标准. 开放容器格式标准(OCF, Open Cont ...