您的位置:首页 > 编程语言 > Java开发

Hessian初步使用(配合spring)

2015-09-07 17:04 459 查看
首先Hessian是一个非常优秀的框架,仅支持Post请求.

一,准备环境

<dependency>
<groupId>com.caucho</groupId>
<artifactId>hessian</artifactId>
<version>4.0.7</version>
</dependency>
二,代码结构

1,服务端

看官可以简单的做两个接口和实现类,贴出接口,实现类就不写了.

package com.mycode.hessian;

public interface IHello {
public String sayHello();
}


hessian.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-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">

<!-- 定义普通bean实例 -->
<bean id="hello" class="com.mycode.hessian.Hello" />
<!-- 使用HessianServiceExporter 将普通bean导出成Hessian服务 -->
<bean name="/hello" class="org.springframework.remoting.caucho.HessianServiceExporter">
<!-- 需要导出的目标bean -->
<property name="service" ref="hello" />
<!-- Hessian服务的接口 -->
<property name="serviceInterface" value="com.mycode.hessian.IHello" />
</bean>

<!-- ICount接口 -->
<bean id="count" class="com.mycode.hessian.Count"/>
<bean name="/count" class="org.springframework.remoting.caucho.HessianServiceExporter">
<property name="service" ref="count"/>
<property name="serviceInterface" value="com.mycode.hessian.ICount" />
</bean>
</beans>


web.xml

(此处注意一个问题:就是如果不在springMVC的地方配置Init-param,则需要在web-inf下声明一个[servlet-name]-servlet.xml,servlet-name就是

<span style="font-size:18px;">DispatcherServlet的servlet名字)</span>


<!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>
<display-name>Archetype Created Web Application</display-name>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring.xml</param-value>
</context-param>

<listener>
<listener-class> org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<servlet>
<servlet-name>hessian</servlet-name>
<servlet-class> org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/hessian.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>hessian</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>

<!-- Exceptions page -->
<error-page>
<error-code>405</error-code>
<location>/WEB-INF/405.jsp</location>
</error-page>

<error-page>
<error-code>404</error-code>
<location>/WEB-INF/404.jsp</location>
</error-page>

<error-page>
<error-code>500</error-code>
<location>/WEB-INF/500.jsp</location>
</error-page>

<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/WEB-INF/500.jsp</location>
</error-page>
</web-app>


至此,服务端简单的就配置好了!

2,客户端

   简单:直接将服务端的接口代码复制进客户端工程,只需复制接口,但要保证和服务端的包类结构一致.

   复杂:将接口服务打包放进客户端工程.(maven打jar包)

   结构图:

  

spring.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-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">

<bean id="helloClient" class="org.springframework.remoting.caucho.HessianProxyFactoryBean">
<property name="serviceUrl">
<value>http://test.bai.com/hello</value>
</property>
<property name="serviceInterface">
<value>com.mycode.hessian.IHello</value>
</property>
</bean>

<bean id="countClient" class="org.springframework.remoting.caucho.HessianProxyFactoryBean">
<property name="serviceUrl">
<value>http://test.bai.com/count</value>
</property>
<property name="serviceInterface">
<value>com.mycode.hessian.IHello</value>
</property>
</bean>
</beans>


HessianClient.java

<span style="font-size:18px;">package com.mycode.client;

import java.net.MalformedURLException;

import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.caucho.hessian.client.HessianProxyFactory;
import com.mycode.hessian.ICount;
import com.mycode.hessian.IHello;

public class HessianClient {
private HessianProxyFactory factory;

@Before
public void init(){
factory = new HessianProxyFactory();
}

@Test
public void testHello() throws MalformedURLException {
ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
IHello hello = (IHello) context.getBean("helloClient");
System.out.println(hello.sayHello());
}

@Test
public void testCount() throws MalformedURLException{
String urlName = "http://test.secoo.com/count";
ICount count = (ICount) factory.create(ICount.class, urlName);
int re = count.countAdd(2, 5);
System.out.println(re);
}
}</span>
2种调用,第一种常用,
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息