hessian与Spring MVC的整合
今天2月10号,再过两天就可以回家了。开心
前几天因为项目的需要研究了下如何把hessian整合到项目中。现在做下简单的总结回顾。
目录介绍
1. hessian的介绍
2. hessian与Spring MVC的整合
3. 小结
- 1
- 2
- 3
- hessian的介绍
Hessian 是一个基于 binary-RPC 实现的远程通讯 library。使用二进制传输数据。Hessian通常通过Web应用来提供服务,通过接口暴露。Servlet和Spring的DispatcherServlet都可以把请求转发给Hessian服务。由以下两种方式提供,分别为:com.caucho.hessian.server.HessianServlet、org.springframework.web.servlet.DispatcherServlet。 - hessian与Spring MVC的整合
首先,需要一个搭建好的Spring MVC框架,Spring MVC框架的搭建再次不赘述。
- 环境
Spring MVC 4.3.6.RELEASE
hessian 4.0.7
使用maven管理的话可以直接在pom文件添加相关的依赖。
- 环境
<dependency> <groupId>com.caucho</groupId> <artifactId>hessian</artifactId> <version>4.0.7</version> </dependency>
- 1
- 2
- 3
- 4
- 5
- 服务端的整合 **web.xml**
- 1
- 2
<servlet> <servlet-name>mvc-dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>mvc-dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
由于,DispatcherServlet已经有了HttpRequestHandle
,所以在此我们不必再重复配置HessianServlet
mvc-dispatcher-servlet.xml
此处,由于我们的采用的是注解的方式来配置的,所以需要在mvc-dispatcher-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:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!--自动注入--> <mvc:annotation-driven/> <context:component-scan base-package="com.jay"/> <!--解决配置servlet-mapping的时候,如果url-pattern设置为“/”,静态资源访问不了的问题--> <mvc:default-servlet-handler/>
</beans>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
<mvc:default-servlet-handler/>
这个配置是用来解决 当我们把DispatcherServlet
的servlet-mapping的时候,如果url-pattern设置为“/”,静态资源访问不了的问题,使静态资源走Tomcat默认的servlet。具体可以参考(http://www.mamicode.com/info-detail-1138370.html)
配置弄好之后,我们接着来看看demo代码,首先,
接口类UserService.java
package com.jay.hessian;
/**
* Created by xiang.wei on 2018/2/10
*
* @author xiang.wei
*/
public interface UserService { /** * 返回用户传入的名称 * @param user * @return */ String sayMyName(User user);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
实体类 user.java
package com.jay.hessian;
import java.io.Serializable;
/**
* Created by xiang.wei on 2018/2/10
*
* @author xiang.wei
*/
public class User implements Serializable{ private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "User{" + "name='" + name + '\'' + ", age=" + age + '}'; }
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
注意,此处实体类User
必须要序列化,不然传输报错。原因后面再说
接口实现类
package com.jay;
import com.jay.hessian.User;
import com.jay.hessian.UserService;
import org.springframework.stereotype.Service;
/**
* Created by xiang.wei on 2018/2/10
*
* @author xiang.wei
*/
@Service("userService")
public class UserServiceImpl implements UserService { public String sayMyName(User user) { System.out.println("接收到的参数是=" + user.toString()); return user.getName(); }
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
好了,demo服务端需要用的测试类我们都已经弄好了,接着,我们还需要配置HessianServiceExporter
用于代理接口类。
服务器类 HessianServer.java
package com.jay;
import com.jay.hessian.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.remoting.caucho.HessianServiceExporter;
import org.springframework.stereotype.Controller;
/**
* Created by xiang.wei on 2018/2/10
*
* @author xiang.wei
*/
@Controller
public class HessianServer { @Autowired private UserService userService; /** * * @return */ @Bean(name = "/userService.hs") public HessianServiceExporter getUserService() { HessianServiceExporter exporter = new HessianServiceExporter(); //Hessian服务的接口 exporter.setServiceInterface(UserService.class); //Hessian服务的接口Impl exporter.setService(userService); return exporter; }
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
在此处,我们指定了接口类以及他的实现类。至此,服务端就配置好了。我们可以在浏览器上直接输入 http://localhost:8080/hessian-server-demo/userService.hs 验证下。如果返回 405 则表示服务端配置正确
- 客户端的整合
客户端的相对简单些。我们同样需要把hessian4.0.7
的依赖引入。然后,我们还需要将服务端的接口类以及其设计的实体类打个jar,此处,我打了一个hessian-server-rpc.jar
放在客户端的lib
目录下。所以
pom.xml
添加的依赖是
<dependencies> <dependency> <groupId>com.caucho</groupId> <artifactId>hessian</artifactId> <version>4.0.7</version> </dependency> <dependency> <groupId>com.jay</groupId> <artifactId>hessian-server-rpc</artifactId> <version>1.0</version> <scope>system</scope> <systemPath>${project.basedir}/src/main/java/lib/hessian-server-rpc.jar</systemPath> </dependency>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
接着,我们先写个简单的测试类。
HessianClient.java
package com.jay;
import com.caucho.hessian.client.HessianProxyFactory;
import com.jay.hessian.User;
import com.jay.hessian.UserService;
import java.net.MalformedURLException;
/**
* Created by xiang.wei on 2018/2/10
*
* @author xiang.wei
*/
public class HessianClient { public static void main(String[] args) { String url = "http://localhost:8080/hessian-server-demo/userService.hs"; HessianProxyFactory factory = new HessianProxyFactory(); factory.setConnectTimeout(6000); //连接超时时间 factory.setReadTimeout(6000); //读取超时时间 try { UserService userService = (UserService) factory.create( UserService.class, url); User user = new User(); user.setName("张三"); user.setAge(11); System.out.println(userService.sayMyName(user));; } catch (MalformedURLException e) { e.printStackTrace(); } }
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
在此处我们首先创建了一个反向代理的工厂类HessianProxyFactory
,然后通过其create
创建接口实例。
至此,我们hessian与Spring MVC的整合就完成了。我们来看看运行效果
Connected to the target VM, address: '127.0.0.1:52274', transport: 'socket'
张三
Disconnected from the target VM, address: '127.0.0.1:52274', transport: 'socket'
- 1
- 2
- 3
- 小结
hessian 将网络传输的对象转换为二进制流通过Http 进行传递,不过它是使用自己的序列化机制实现的编组与反编组,其支持的数据类型有限,不支持复杂的对象,Hessian的有点是可以透过防火墙。同时其缺乏安全机制,传输没有加密处理。
文章来源: feige.blog.csdn.net,作者:码农飞哥,版权归原作者所有,如需转载,请联系作者。
原文链接:feige.blog.csdn.net/article/details/79304864
- 点赞
- 收藏
- 关注作者
评论(0)