文档章节

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技术内幕》学习笔记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 的基础上,提供了诸如 Readiness Check,类隔离,日志空间隔离等等能力。在增强了 Spring Boot 的同时,SOFABoot ...

匿名
04/19
0
1
蚂蚁开源 | 在 Spring Boot 中集成 SOFABoot 类隔离能力

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

技术小能手
08/15
0
0
简单的Hessian接口开发实例

需要的jar包 hessian-4.0.7.jar #客户端 接口 package com.test; public interface Printer { public String print(String a); public String say(); } 2.实现该接口 package com.test; publ......

阿联酋挖石油
2015/08/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

区块链教程以太坊源码分析chain-indexer区块链索引一

兄弟连区块链教程以太坊源码分析chain-indexer区块链索引一 chain_indexer 区块链索引 chain_indexer.go 源码解析 chain_indexer 顾名思义, 就是用来给区块链创建索引的功能。 之前在eth协议...

兄弟连区块链入门教程
24分钟前
1
0
社会化分享插件集成分享

一.前提摘要 社会化分享每个app必备的推广需求,无论是拉新,邀请,游戏奖励,等等都离不开分享的影子,下面我们介绍下社会化分享的插件; 首先要说下,现在的社交App,社区App等,国内外的...

佳妮
25分钟前
3
0
IOC 之 Spring 统一资源加载策略

统一资源:Resource org.springframework.core.io.Resource 为 Spring 框架所有资源的抽象和访问接口 它继承 org.springframework.core.io.InputStreamSource接口 作为所有资源的统一抽象,S...

职业搬砖20年
25分钟前
2
0
Python爬虫实战入门一:工具准备

一、基础知识 使用Python编写爬虫,当然至少得了解Python基本的语法,了解: 基本数据结构 数据类型 控制流 函数的使用 模块的使用 不需要过多过深的Python知识,仅此而已。 个人推荐《Pytho...

糖宝lsh
29分钟前
2
0
Hanlp中使用纯JAVA实现CRF分词

Hanlp中使用纯JAVA实现CRF分词 与基于隐马尔可夫模型的最短路径分词、N-最短路径分词相比,基于条件随机场(CRF)的分词对未登录词有更好的支持。本文(HanLP)使用纯Java实现CRF模型的读取与...

左手的倒影
31分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部