文档章节

hessian-spring简单应用

冰雷卡尔
 冰雷卡尔
发布于 2013/09/03 15:29
字数 707
阅读 108
收藏 1
点赞 0
评论 0
1、服务端,这里是一个web项目:
项目结构

pom.xml文件中加入spring和hessian的依赖配置

web.xml中hessian的配置:

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
	<!-- 手动指定applicationContext.xml文件位置 -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>
			classpath:applicationContext.xml
		</param-value>
	</context-param>

	<!-- Spring 启动加载设置 -->
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	
	<!-- hessian begin -->
	<servlet>
  	    <servlet-name>remote</servlet-name>
  	    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  	    <init-param>  
			<param-name>namespace</param-name>  
	        <param-value>classes/hessian/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>
  	<!-- hessian end -->
	
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
</web-app>
applicationContext中加入<import resource="classpath:hessian/remote-servlet.xml"/>

remote-servlet.xml

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context 
http://www.springframework.org/schema/context/spring-context-3.0.xsd">

	<!-- 向外发布的hession用户接口 -->
	<bean id="userInfoServiceImpl" class="org.hessian.service.impl.UserInfoServiceImpl" />
	<bean name="/userInfoService" class="org.springframework.remoting.caucho.HessianServiceExporter">
		<property name="service" ref="userInfoServiceImpl" />
		<property name="serviceInterface" value="org.hessian.service.IUserInfoService" /> 
	</bean>
</beans>
再接下来就是向外发布的接口、实现类和所需要用到的DO类,服务端拥有客户端相同的接口和DO类,并且DO类要序列化

启动服务,对外发布用户接口成功,接下来看客户端如何调用该服务

2、客户端,java项目、web项目都可以:
项目结构

pom.xml文件中加入spring和hessian的依赖配置

web.xml配置,只负责加载applicationContext文件

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
	<!-- 手动指定applicationContext.xml文件位置 -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>
			classpath:applicationContext.xml
		</param-value>
	</context-param>
	<!-- Spring 启动加载设置 -->
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
</web-app>
applicationContext中加入
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="locations">
			<list>
			 	<value>classpath:remote-hession.properties</value>
			</list>
		</property>
</bean>
<import resource="classpath:hessian/hessian-client.xml"/>



remote-hession.properties里面配置服务所在地址
hessian.http.path = http://localhost:9090/hessian_server

hessian-client.xml
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context 
http://www.springframework.org/schema/context/spring-context-3.0.xsd">

	<!-- client调用发布的hession用户接口 -->
	<bean name="userInfoService" class="org.springframework.remoting.caucho.HessianProxyFactoryBean">
		<property name="serviceUrl">
			<value>${hessian.http.path}/remote/userInfoService</value>
		</property>
		<property name="serviceInterface">
			<value>org.hessian.service.IUserInfoService</value>
		</property>
	</bean>
</beans>



接下来就是和服务一致的接口类和DO类,下面就是测试代码:
package org.hessian.service;

import javax.annotation.Resource;

import org.hessian.service.common.JunitBase;
import org.hessian.service.common.UserInfo;
import org.junit.Test;

import com.caucho.hessian.client.HessianProxyFactory;

public class HessianClientTest extends JunitBase {

	@Resource
	private IUserInfoService userInfoService;
	
	/**
	 * 方式一
	 * java client(HessianProxyFactory)
	 * @param args
	 * @throws Exception
	 */
	public static void main(String[] args) throws Exception {
		UserInfo userinfo = new UserInfo();
		userinfo.setName("jack");
		
	    String url = "http://localhost:9090/hessian_server/remote/userInfoService";  
	    HessianProxyFactory factory = new HessianProxyFactory();
	    IUserInfoService userInfoService = (IUserInfoService) factory.create(IUserInfoService.class, url);
	    userInfoService.addUserInfo(userinfo);
	}
	
	/**
	 * 方式二,该junit测试会加载spring一系列配置文件
	 * spring web
	 * @throws Exception
	 */
	@Test
	public void testHessian() throws Exception {
		UserInfo userinfo = new UserInfo();
		userinfo.setName("china");
		userInfoService.addUserInfo(userinfo);
	}
}



JunitBase.java
package org.hessian.service.common;

import org.apache.log4j.Logger;
import org.junit.After;
import org.junit.Before;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:applicationContext.xml" })
public class JunitBase
{
	private final Logger logger = Logger.getLogger(this.getClass());

	@Before
	public void before() {
		logger.debug("----------------------------Start Test---" + this.getClass() + "----------------------------------");
	}

	@After
	public void after() {
		logger.debug("----------------------------End Test---" + this.getClass() + "----------------------------------");
	}
}



HessianServiceExporter only supports POST requests

© 著作权归作者所有

共有 人打赏支持
冰雷卡尔
粉丝 30
博文 116
码字总数 81854
作品 0
深圳
程序员
基于 Spring Boot 的研发框架 - SOFABoot

SOFABoot 是蚂蚁金服开源的基于 Spring Boot 的研发框架,它在 Spring Boot 的基础上,提供了诸如 Readiness Check,类隔离,日志空间隔离等等能力。在增强了 Spring Boot 的同时,SOFABoot ...

匿名 ⋅ 04/19 ⋅ 1

SpringMVC集成Hessian

SpringMVC集成Hessian 首先强调这里是SpringMVC,不是spring,这两者在集成Hessian的时候还是有差别的。Spring集成相对简单,网上随便搜一个就行。 SpringMVC有点麻烦。 注:如果你还不了解H...

飞翼 ⋅ 2016/12/28 ⋅ 0

《Spring技术内幕》学习笔记18——Spring使用Hessian实现远程调用

Spring目前提供了对RMI、 HttpInvoker、Hessian、Burlap及WebService等Remoting技术的集成。Spring屏蔽了这些实现技术的差异,用户只需开发简单的Java对象(Plain Old Java Objects,POJO)然后...

谜男amu ⋅ 05/16 ⋅ 0

SpringMVC整合Hessian

SpringMVC整合HessianSpring整合Hessian的demo网上一堆,适用于Srping+Struts2+Mybatis。但是SpirngMVC整合Hessina的也是很常见的,毕竟SpringMVC已经慢慢代替了Struts2。那么问题来了,因为...

大山_ ⋅ 2016/11/08 ⋅ 0

OpenJ9 和 HotSpot 的对比 Part 1

OpenJ9 和 IBM J9 是来自默认 Oracle HotSpot JVM 的不同 JVM 实现。使用现代的 adoptopenjdk 预置 Docker 镜像,你可以轻易地切换和测试不同的组合,并且可以为你选择合适的 JVM。 这个传言...

oschina ⋅ 05/28 ⋅ 0

spring远程调用

Spring 远程调用 远程调用是客户端应用和服务端之间的会话。在客户端上所需要的一些功能并不包括在该应用的职能范围内。所以应用向能提供这些功能的其他系统寻求帮助。远程的应用通过远程服务...

李永china ⋅ 2016/08/29 ⋅ 0

RMI在Spring中的使用之Hessian,BurlapServiceExporter

这两种实现都是基于http的,只不过Hessian使用二进制格式,Burlap使用XML格式传输文件。在4.x的Spring中官方已经将Burlap作为废弃类,配置和Hessian相同,下面详细讲下HessianServiceExporte...

luamas ⋅ 2014/10/28 ⋅ 0

Spring参考手册 7 综合

翻译自Spring官方文档 4.1.2版本 相关文章: Spring参考手册 1 Spring Framework简介和典型的Web应用程序 Spring参考手册 2 核心技术 Spring参考手册 3 校验,数据绑定和类型转换 Spring参考...

liycode ⋅ 2017/12/26 ⋅ 0

浅谈Hessian远程调用及其使用

1.1 概述 Hessian是一个轻量级的remoting onhttp工具,是由 caucho 提供的一种开源的远程通讯协议。相比WebService,Hessian更简单、快捷、同时支持跨语言通讯。Hessian采用的是二进制RPC协议...

科比可比克 ⋅ 2016/06/29 ⋅ 1

使用Spring HTTP invoker进行远程调用

6.4 使用Spring HTTP invoker进行远程调用 Spring 开发小组意识到在RMI服务和基于 HTTP的服务(如Hessian和Burlap)之间的空白。一方面,RMI使用Java标准的对象序列化,但很难穿越防火墙;另...

红薯 ⋅ 2010/08/15 ⋅ 1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JVM堆的理解

在JVM中,我们经常提到的就是堆了,堆确实很重要,其实,除了堆之外,还有几个重要的模块,看下图: 大 多数情况下,我们并不需要关心JVM的底层,但是如果了解它的话,对于我们系统调优是非常...

不羁之后 ⋅ 昨天 ⋅ 0

推荐:并发情况下:Java HashMap 形成死循环的原因

在淘宝内网里看到同事发了贴说了一个CPU被100%的线上故障,并且这个事发生了很多次,原因是在Java语言在并发情况下使用HashMap造成Race Condition,从而导致死循环。这个事情我4、5年前也经历...

码代码的小司机 ⋅ 昨天 ⋅ 1

聊聊spring cloud gateway的RetryGatewayFilter

序 本文主要研究一下spring cloud gateway的RetryGatewayFilter GatewayAutoConfiguration spring-cloud-gateway-core-2.0.0.RC2-sources.jar!/org/springframework/cloud/gateway/config/G......

go4it ⋅ 昨天 ⋅ 0

创建新用户和授予MySQL中的权限教程

导读 MySQL是一个开源数据库管理软件,可帮助用户存储,组织和以后检索数据。 它有多种选项来授予特定用户在表和数据库中的细微的权限 - 本教程将简要介绍一些选项。 如何创建新用户 在MySQL...

问题终结者 ⋅ 昨天 ⋅ 0

android -------- 颜色的半透明效果配置

最近有朋友问我 Android 背景颜色的半透明效果配置,我网上看资料,总结了一下, 开发中也是常常遇到的,所以来写篇博客 常用的颜色值格式有: RGB ARGB RRGGBB AARRGGBB 这4种 透明度 透明度...

切切歆语 ⋅ 昨天 ⋅ 0

CentOS开机启动subversion

建立自启动脚本: vim /etc/init.d/subversion 输入如下内容: #!/bin/bash## subversion startup script for the server## chkconfig: 2345 90 10# description: start the subve......

随风而飘 ⋅ 昨天 ⋅ 0

Nginx + uwsgi @ubuntu

uwsgi 安装 sudo apt-get install python3-pip # 注意 ubuntu python3默认没有安装pippython3 -m pip install uwsgi 代码(test.py) def application(env, start_response): start_res......

袁祾 ⋅ 昨天 ⋅ 0

版本控制工具

CSV , SVN , GIT ,VSS

颖伙虫 ⋅ 昨天 ⋅ 0

【2018.06.19学习笔记】【linux高级知识 13.1-13.3】

13.1 设置更改root密码 13.2 连接mysql 13.3 mysql常用命令

lgsxp ⋅ 昨天 ⋅ 0

LVM

LVM: 硬盘划分分区成物理卷->物理卷组成卷组->卷组划分逻辑分区。 1.磁盘分区: fdisk /dev/sdb 划分几个主分区 输入t更改每个分区类型为8e(LVM) 使用partprobe生成分区的文件:如/dev/sd...

ZHENG-JY ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部