接着上一篇文章Hessian学习(1)——基本使用,学习一下hessian整合spring的使用方法;
Hessian通过Servlet提供远程服务。需要将匹配某个模式的请求映射到Hessian服务。Spring的DispatcherServlet可以完成该功能,DispatcherServlet可将匹配模式的请求转发到Hessian服务。Hessian的server端提供一个servlet基类, 用来处理发送的请求,而Hessian的这个远程过程调用,完全使用动态代理来实现的,,采用面向接口编程,因此,Hessian服务建议通过接口暴露。
现在看看如何实现:
1.同样新建一个web项目,此处为HessianServer2;
2.导入jar包到WEB-INF/lib,此处使用jar包如下:
aopalliance-1.0.jar
commons-logging-1.1.1.jar
hessian-4.0.7.jar
log4j-1.2.16.jar
org.springframework.test-3.1.0.RELEASE.jar
spring-aop-3.1.1.RELEASE.jar
spring-asm-3.1.1.RELEASE.jar
spring-beans-3.1.1.RELEASE.jar
spring-context-3.1.1.RELEASE.jar
spring-context-support-3.1.1.RELEASE.jar
spring-core-3.1.1.RELEASE.jar
spring-expression-3.1.1.RELEASE.jar
spring-tx-3.1.1.RELEASE.jar
spring-web-3.1.1.RELEASE.jar
spring-webmvc-3.1.1.RELEASE.jar
3.建好服务端代码,HelloService.java,HelloServiceImpl.java,代码详见
Hessian学习(1)——基本使用;
4.配置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_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>HessainServer1</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<!-- 整合spring -->
<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>/hessian/*</url-pattern>
</servlet-mapping>
</web-app>
5.在WEB-INF目录下新建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.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<!-- 定义普通bean实例 -->
<bean id="helloService" class="包名.HelloServiceImpl" />
<!-- 使用HessianServiceExporter 将普通bean导出成Hessian服务 -->
<bean name="/hello"
class="org.springframework.remoting.caucho.HessianServiceExporter">
<!-- 需要导出的目标bean -->
<property name="service" ref="helloService" />
<!-- Hessian服务的接口 -->
<property name="serviceInterface" value="包名.HelloService" />
</bean>
</beans>
6.新建一个java project,用于做客户端,此处命名为HessianClient2;
7.导入hessian所需要的jar包;
8.新建测试类,代码如下:
public class SpringHessianTest {
@Test
public void testSpringHessian() {
String url = "http://localhost:28080/HessianServer2/hessian/hello";
HessianProxyFactory factory = new HessianProxyFactory();
HelloService service;
try {
service = (HelloService)factory.create(HelloService.class, url);
System.out.println(service.helloWorld("test spring!"));
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
}
9.将服务端部署到tomcat,客户端测试结果如下:
总结:
需要说明如下:
1.hessian-servlet的命名是有要求的,需要跟web.xml中的<servlet-name>的值一样,即${servlet-name}-servlet.xml;
2.web.xml中<url-pattern>决定客户端访问的url前缀为http://IP:端口/项目名/${url-pattern},此处为:
http://localhost:28080/HessianServer2/hessian/
3.hessian-servelt.xml中
<bean name="/hello"
class="org.springframework.remoting.caucho.HessianServiceExporter">
<!-- 需要导出的目标bean -->
<property name="service" ref="helloService" />
<!-- Hessian服务的接口 -->
<property name="serviceInterface" value="com.cmsz.upay.hessian.service.HelloService" />
</bean>
决定了我们要访问这个服务类的url为:
String url = "http://localhost:28080/HessianServer2/hessian/hello";
代码路径: csdn code