1.1 Hession的作用
Hession是基于HTTP的轻量级远程服务解决方案。致力于解决借助于尽可能简单的API和通信协议来简化Web服务。Hession 和RMI一样,使用二进制进行客户端和服务器的交互。但与其他的二进制远程调用技术不同,他的二进制消息是可以一直到其他的非java的语言中包括(C#,C++)。
1.2 Spring整合JMS
对Hession做了一个简要介绍之后,接下来就讲一下Spring整合Hession的具体过程。所使用的依赖利用Maven来进行管理,具体依赖如下:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.7</version>
</dependency>
<!-- <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-oxm</artifactId>
<version>4.0.1.RELEASE</version>
</dependency> -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>com.caucho</groupId>
<artifactId>hessian</artifactId>
<version>4.0.7</version>
</dependency>
接口定义类: com.wl.spring.hession:IHello
package com.wl.spring.hession;
public interface IHello {
public String sayHello(String param);
}
接口具体实现类: com.wl.spring.hession.HelloImpl
package com.wl.spring.hession;
public class HelloImpl implements IHello {
public String sayHello(String param) {
return "Hello " +param;
}
}
配置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" xmlns:web="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">
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/remoteHession-servlet.xml
</param-value>
</context-param>
<servlet>
<servlet-name>remoteHession</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>remoteHession</servlet-name>
<url-pattern>/remoteHession/*</url-pattern>
</servlet-mapping>
</web-app>
<?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:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="impl" class="com.wl.spring.hession.HelloImpl" />
<bean name="/helloSpring"
class="org.springframework.remoting.caucho.HessianServiceExporter"
p:service-ref="impl"
p:serviceInterface="com.wl.spring.hession.IHello" />
</beans>
客户端调用有两种方式 :
① 使用HessianProxyFactory Hessian代理工厂直接调用
public class HessionClient{
public static void main(String[] args) throws MalformedURLException {
//Spring Hessian代理Servelet
String url = "http://localhost:8080/remoting-hessian/remoteHession/helloSpring";
HessianProxyFactory factory = new HessianProxyFactory();
IHello api = (IHello) factory.create(IHello.class, url);
System.out.println(api.sayHello("wangl"));
/* ApplicationContext contex = new ClassPathXmlApplicationContext(
"dispatcher-servlet.xml");
// 获得客户端的Hessian代理工厂bean
IHello i = (IHello) contex.getBean("clientSpring");
System.out.println(i.sayHello("wangl")); */
}
}
运行结果 显示
②通过spring 使用HessianProxyFactoryBean Hessian代理工厂Bean来完成接口调用.
<bean id="clientSpring" class="org.springframework.remoting.caucho.HessianProxyFactoryBean">
<!-- 请求代理Servlet路径 -->
<property name="serviceUrl" value ="http://localhost:8080/remoting-hessian/remoteHession/helloSpring"/>
<!-- 接口定义 -->
<property name="serviceInterface" value = "com.wl.spring.hession.IHello"/>
</bean>
输出结果 :Hello wangl
备注:在服务器端remoteHession-servlet.xml 名称 要是xml中 <servlet-name>配置的开头+ ‘-servlet.xml’命名的,
在客户端调用的时候如果采用第二种方式调用spring的配置文件如果在WEB-INF下采用 main函数验证时 必须把sping的配置copy到resources目录下编译 。以上仅是个人理解。