Hessian+Spring配置
什么是Hessian?有什么用?
Hessian 是一个用于连接网络服务的二进制协议,Hessian通常通过Web应用来提供服务,通过接口暴露。官方文档http://hessian.caucho.com/doc/hessian-overview.xtp
- 配置教程
1.服务端的配置
采用maven管理项目,pom.xml如下(spring的依赖都添加了,可能部分无用:)):
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<!--添加对spring的支持 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.1.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.1.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>4.1.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.1.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.1.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.1.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.1.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.1.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>4.1.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>4.1.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.1.7.RELEASE</version>
</dependency>
<!-- 添加hessian的支持 -->
<!-- https://mvnrepository.com/artifact/com.caucho/hessian -->
<dependency>
<groupId>com.caucho</groupId>
<artifactId>hessian</artifactId>
<version>4.0.7</version>
</dependency>
<!-- 添加servlet支持 -->
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
</dependencies>
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" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>hessianTest</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- springmvc的dispatchServlet-->
<servlet>
<servlet-name>hessian</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>hessian</servlet-name>
<url-pattern>/hessianTest/*</url-pattern>
</servlet-mapping>
</web-app>
在配置dispatcherServlet的时候,我没有使用init-param,那默认的配置文件就是servlet-name+servlet.xml,若有init-param,则是
<servlet>
<servlet-name>springDispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>*填写配置文件路径*</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
我的hessian-servlet.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="impl" class="com.jw.service.impl.ServiceImpl"></bean>
<bean name="/userClientService" class="org.springframework.remoting.caucho.HessianServiceExporter">
<property name="service" ref="impl"/>
<property name="serviceInterface" value="com.jw.service.Service"/>
</bean>
</beans>
接口的编写:
package com.jw.service;
import com.jw.entity.User;
public interface Service {
public void helloHessian(User user);
}
接口的实现类:
package com.jw.service.impl;
import com.jw.entity.User;
import com.jw.service.Service;
public class ServiceImpl implements Service{
public void helloHessian(User user) {
System.out.println("hello:"+user.getUserName()+user.getAge());
}
}
实体类的配置,注意,实体类必须要进行序列化操作:
package com.jw.entity;
import java.io.Serializable;
public class User implements Serializable{
private static final long serialVersionUID = 1L;
private String userName;//用户名
private Integer age;//年龄
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public static long getSerialversionuid() {
return serialVersionUID;
}
public User(String userName, Integer age) {
super();
this.userName = userName;
this.age = age;
}
public User() {
super();
}
}
至此,服务端已经配置完成,启动服务端程序即可!
客户端的配置:
1.添加接口和实体类,和服务端的配置一样。
2.编写测试用例:
import com.caucho.hessian.client.HessianProxyFactory;
import com.jw.entity.User;
import com.jw.service.Service;
public class Test {
public static void main(String[] args) throws Exception{
//Spring Hessian代理Servelet
String url = "http://localhost:8080/hessianTest/hessianTest/userClientService";
HessianProxyFactory factory = new HessianProxyFactory();
Service service= (Service) factory.create(Service.class, url);
service.sayHello(new User("jw", 18));
}
}
至此,Hessian+Spring的配置已经完成。