zoukankan      html  css  js  c++  java
  • Hessian、 Burlap

    Hessian、Burlap是由Caucho Technology(http://www.caucho.com/)所提出,透过HTTP实现的远 程服务。 Hessian是将物件以中性的二进位讯息使用HTTP进行传送,而不若RMI使用Java的序列化格式,由 于该二进位讯息是中性的,因此不受限于某种程式语言所实现的客户端或伺服端,二进位资料在 传输时所需的频宽较小是其优点。

    Burlap则是将物件以XML文件格式进行传送,XML文件且有较高的可读性,只要应用程式可以剖 析XML文件就可以解读所接收的讯息,当然也不受限于某种语言所实现的客户端与伺服端。

    在Spring中使用Hessian及Burlap的方法是类似的,由于Hessian、Burlap是透过HTTP传送,所以在 使用它们时要搭配 Spring Web框架来使用,也就是使用到DispatcherServlet,举个实际的例子来 示范如何使用Hessian,以 RMI  介绍的RMI例子来说,可以直接使用已撰写好的ISomeService、 SomeServiceImpl,而伺服端要在 web.xml中配置DispatcherServlet:

    •      web.xml
    <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/j2ee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 	→ http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4"> 	<session-config> 		<session-timeout> 			30 		</session-timeout> 	</session-config> 	<servlet> 		<servlet-name>dispatcherServlet</servlet-name> 		<servlet-class> 			org.springframework.web.servlet.DispatcherServlet 		</servlet-class> 		<init-param> 			<param-name>contextConfigLocation</param-name> 			<param-value>/WEB-INF/service-config.xml</param-value> 		</init-param> 		<load-on-startup>1</load-on-startup> 	</servlet> 	<servlet-mapping> 		<servlet-name>dispatcherServlet</servlet-name> 		<url-pattern>*.service</url-pattern> 	</servlet-mapping> </web-app>

    在 Hessian 的伺服端这边,使用 org.springframework.remoting.caucho.HessianServiceExporter 来发 布服务:

    •      service‐config.xml
    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> 	<bean id="urlMapping" class="org.springframework.web.servlet. 		→ handler.SimpleUrlHandlerMapping"> 		<property name="mappings"> 			<props> 				<prop key="/some.service">serviceExporter</prop> 			</props> 		</property> 	</bean> 	<bean id="viewResolver" class="org.springframework.web.servlet. 		→ view.InternalResourceViewResolver"> 		<property name="prefix"> 			<value>/WEB-INF/jsp/</value> 		</property> 		<property name="suffix"> 			<value>.jsp</value> 		</property> 	</bean> 	<bean id="someService" class="onlyfun.caterpillar.SomeServiceImpl"/> 	<bean id="serviceExporter" class="org.springframework.remoting. 		→ caucho.HessianServiceExporter"> 		<property name="service"> 			<ref bean="someService"/> 		</property> 		<property name="serviceInterface"> 			<value>onlyfun.caterpillar.ISomeService</value> 		</property> 	</bean> </beans>

    注意到在 SimpleUrlHandlerMapping 的设置上,请求 some.service 的会转发给 serviceExporter,在 这边您不 用注册服务名称,也就是没有"serviceName"属性, Hessian、Burlap 不需要,如果您 使 用 的 是  Burlap  , 则 设 定 上 在 serviceExporter  的 "class"  属 性 只 要 改 用 org.springframework.remoting.caucho.BurlapServiceExporter 类别即可。

    接下来您只要启动 Servlet 容器,在载入以上设计 Web 应用程式之后,则 Hessian 伺服端就会启 动了,记得要在您的 lib 目录中加入 Hessian 所需的 API 类别之.jar 档案,这可以使用 Spring 下载 档案中 lib 目录下 caucho 目录的 hessian‐2.1.12.jar  档案,如果使用 Burlap 的话,当然要记得必须 加入 Burlap API 所需的.jar 档案。

    Hessian 客户端的撰写则可以使用先前撰写的 RMIClientDemo 专案来改写,事实上只要修改一下 Bean 定义档即可,例如:

    •      hessian‐client.xml
    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN""http://www.springframework.org/dtd/spring-beans.dtd"> <beans> 	<bean id="someServiceProxy" class="org.springframework.remoting. 		→ caucho.HessianProxyFactoryBean"> 		<property name="serviceUrl"> 			<value> 				http://localhost:8080/HessianServerDemo/some.service 			</value> 		</property> 		<property name="serviceInterface"> 			<value>onlyfun.caterpillar.ISomeService</value> 		</property> 	</bean> </beans>

    注意到"serviceUrl"属性的设定,它是个标准的 HTTP 请求位址,来撰写个简单的客户端程式以使 用 Hessian 伺服器上的服务:

    •      HessianClient.java
    package onlyfun.caterpillar; import org.springframework.context.ApplicationContext; import org.springframework.context. support.FileSystemXmlApplicationContext; public class HessianClient { 	public static void main(String[] args) {  		ApplicationContext context =new FileSystemXmlApplicationContext( "hessian-client.xml"); 		ISomeService service =(ISomeService) context.getBean("someServiceProxy"); 		String result1 = service.doSomeService("Some request");  		System.out.println(result1); 		int result2 = service.doOtherService(1);  		System.out.println(result2); 	} } 

    同样的必须记得,您要加入包括Hessian API的.jar档案,执行的结果与  RMI 是相同的,如果您要 使用Burlap,则设定上只要改用org.springframework.remoting.caucho.BurlapProxyFactoryBean即可, 当然要记得必须加入Burlap API所需的.jar档案。

  • 相关阅读:
    听豆瓣架构变迁分享会总结
    业界对生成图片缩略图的做法归纳
    58和百姓网的技术学习
    减少存储过程封装业务逻辑-web开发与传统软件开发的思维模式不同
    网站速度问题排查与定位经验
    调度思想-现实中的事物与技术里面其实存在类似道理
    关于图片或者文件在数据库的存储方式归纳
    mysql单表体积和一个库设计多少张表为妥
    php的变量引用与销毁机制
    选择技术方案权衡时,考虑对其可控性很重要
  • 原文地址:https://www.cnblogs.com/chenying99/p/2555595.html
Copyright © 2011-2022 走看看