文档章节

hessian-spring简单应用

冰雷卡尔
 冰雷卡尔
发布于 2013/09/03 15:29
字数 707
阅读 109
收藏 1
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
深圳
程序员
私信 提问
SpringMVC集成Hessian

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

飞翼
2016/12/28
1
0
基于 Spring Boot 的研发框架 - SOFABoot

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

匿名
04/19
0
6
使用Spring HTTP invoker进行远程调用

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

红薯
2010/08/15
5.1K
1
《Spring技术内幕》学习笔记18——Spring使用Hessian实现远程调用

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

谜男amu
05/16
0
0
蚂蚁开源 | 在 Spring Boot 中集成 SOFABoot 类隔离能力

SOFABoot 是蚂蚁金服中间件团队开源的基于 Spring Boot 的一个开发框架,其在 Spring Boot 基础能力之上,增加了类隔离能力。蚂蚁金服内部丰富的实践场景表明,类隔离能力对解决类冲突、版本...

技术小能手
08/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

/etc/profile和/etc/environment的区别

/etc/profile 文件 当一个用户登录Linux系统或使用 su 命令切换到另一个用户时,设置用户环境第一个读取的文件就是 /etc/profile ,此文件为系统全局变量配置文件,且仅仅在第一次登录系统时...

calmsnow
19分钟前
2
0
rabbitMQ日常管理(转)

一、网页登录方法 http://127.0.0.1:15672/ 用户名和密码默认为guest/guest 用java代码去连接rabbitmq用的端口是5672 二、rabbitMQ基本概念 RabbitMQ是一个开源的AMQP实现,服务器端用Erlan...

__HuWei
25分钟前
1
0
gitlab cicd

https://docs.gitlab.com/ee/ci/docker/using_docker_build.html

kut
25分钟前
1
0
使用Prometheus+Grafana监控

一、介绍Prometheus Prometheus(普罗米修斯)是一套开源的监控&报警&时间序列数据库的组合,起始是由SoundCloud公司开发的。随着发展,越来越多公司和组织接受采用Prometheus,社会也十分活...

xtof
26分钟前
3
0
EOS RPC API官方文档中文版【1.5版】

EOS RPC API是应用访问EOS区块链上智能合约的必备开发接口,根据所实现插件的不同,EOS RPC API被归入不同的分组: CHAIN:由chain_api_plugin实现,主要提供区块链数据的访问功能 HISTORY:...

汇智网教程
28分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部