2019獨角獸企業重金招聘Python工程師標準>>>
Hessian入門(與Spring集成)
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? By:wtang
說明 :
1.??? 講述如何配置Hessian的服務器端(與Spring集成).
2.??? 講述客戶端如何調用
①?? 使用HessianProxyFactory? Hessian代理工廠直接調用
②?? 使用HessianProxyFactoryBean Hessian代理工廠Bean來完成接口調用.
?
1.??? 講述如何配置Hessian的服務器端(與Spring集成).
?
?
?
?
?
接口定義類: com.wtang.isay. Isay:
?
[java] view plain copy print ?
package?com.wtang.isay;????public?interface?Isay?{??????public?String?sayHello(String?arg1,String?arg2);??}?? package com.wtang.isay;public interface Isay { public String sayHello(String arg1,String arg2);}</pre>
?
接口具體實現類: com.wtang.isay. IsayImpl
[java] view plain copy print ?
package?com.wtang.isay;????public?class?IsayImpl?implements?Isay?{????????public?String?sayHello(String?arg1,?String?arg2)?{??????????return?"Hello:"?+?arg1?+?arg2;??????}??}?? package com.wtang.isay;public class IsayImpl implements Isay { public String sayHello(String arg1, String arg2) { return "Hello:" + arg1 + arg2; }}</pre>
配置Web.xml:
[java] view plain copy print ?
<servlet>??????<servlet-name>remote</servlet-name>??????<!--?使用Spring的代理Servlet?-->??????<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>??????<init-param>??????????<param-name>namespace</param-name>??????????<param-value>classes/remote-servlet</param-value>??????</init-param>??????<load-on-startup>1</load-on-startup>??</servlet>????<servlet-mapping>??????<servlet-name>remote</servlet-name>??????<url-pattern>/remote/*</url-pattern>??</servlet-mapping>?? <servlet> <servlet-name>remote</servlet-name> <!-- 使用Spring的代理Servlet --> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>namespace</param-name> <param-value>classes/remote-servlet</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>remote</servlet-name> <url-pattern>/remote/*</url-pattern> </servlet-mapping></pre>
配置remote-servlet.xml[該文件位于src目錄下,即編譯后存在與classes下]:
[java] view plain copy print ?
<!DOCTYPE?beans?PUBLIC?"-//SPRING//DTD?BEAN//EN"?"http://www.springframework.org/dtd/spring-beans.dtd">??<beans>??????<!--?接口的具體實現類?-->??????<bean?id="impl"?class="com.wtang.isay.IsayImpl"?/>??????<!--?使用Spring的HessianServie做代理?-->??????<bean?name="/helloSpring"??????class="org.springframework.remoting.caucho.HessianServiceExporter">??????????<!--?service引用具體的實現實體Bean-->??????????<property?name="service"?ref="impl"?/>??????????<property?name="serviceInterface"?value="com.wtang.isay.Isay"?/>??????</bean>????????????<!--?可以配置多個HessianServiceExporter代理Bean?-->??</beans>?? <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"><beans> <!-- 接口的具體實現類 --> <bean id="impl" class="com.wtang.isay.IsayImpl" /> <!-- 使用Spring的HessianServie做代理 --> <bean name="/helloSpring" class="org.springframework.remoting.caucho.HessianServiceExporter"> <!-- service引用具體的實現實體Bean--> <property name="service" ref="impl" /> <property name="serviceInterface" value="com.wtang.isay.Isay" /> </bean> <!-- 可以配置多個HessianServiceExporter代理Bean --></beans></pre>
注:
????? 這個文件為什么叫remote-servlet.xml呢?
因為我們在web.xml中有配置:<servlet-name>remote</servlet-name>。
所以remote-servlet.xml的文件名必須以
<servlet-name>中配置的servlet-name作為文件名的開頭,
且文件名的格式必須是[servlet-name]-servlet.xml格式,否則檢測不到。
??? 即:
<param-value>classes/remote-servlet</param-value>
所以文件名為remote-servlet.xml。
?
?
2.??? 講述客戶端如何調用
??????? ①?使用HessianProxyFactory? Hessian代理工廠直接調用
?即:
???????
[java] view plain copy print ?
package?com.wtang.test;????import?java.net.MalformedURLException;??import?com.caucho.hessian.client.HessianProxyFactory;??import?com.wtang.isay.Isay;????public?class?NormalClient?{??????public?static?void?main(String[]?args)?throws?MalformedURLException?{??????????//Spring?Hessian代理Servelet ??????????String?url?=?"http://localhost:8080/HessianSpring/remote/helloSpring";??????????HessianProxyFactory?factory?=?new?HessianProxyFactory();??????????Isay?api?=?(Isay)?factory.create(Isay.class,?url);????????????System.out.println(api.sayHello("chen",?"weitang"));??????}??}?? package com.wtang.test;import java.net.MalformedURLException;import com.caucho.hessian.client.HessianProxyFactory;import com.wtang.isay.Isay;public class NormalClient { public static void main(String[] args) throws MalformedURLException { //Spring Hessian代理Servelet String url = "http://localhost:8080/HessianSpring/remote/helloSpring"; HessianProxyFactory factory = new HessianProxyFactory(); Isay api = (Isay) factory.create(Isay.class, url); System.out.println(api.sayHello("chen", "weitang")); }}</pre>
?
輸出Hello:chenweitang
?
2.??? 講述客戶端如何調用
????????②?使用HessianProxyFactoryBean Hessian代理工廠Bean來完成接口調用.
配置客戶端 remote-client.xml:
[java] view plain copy print ?
<!DOCTYPE?beans?PUBLIC?"-//SPRING//DTD?BEAN//EN"?"http://www.springframework.org/dtd/spring-beans.dtd">??<beans>??????<!--?客戶端Hessian代理工廠Bean?-->??????<bean?id="clientSpring"?class="org.springframework.remoting.caucho.HessianProxyFactoryBean">??????????<!--?請求代理Servlet路徑?-->??????????????????<property?name="serviceUrl">??<value>http://localhost:8080/HessianSpring/remote/helloSpring</value> ??????????</property>??????????<!--?接口定義?-->??????????<property?name="serviceInterface">??????????????<value>com.wtang.isay.Isay</value>??????????</property>??????</bean>??</beans>?? <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"><beans> <!-- 客戶端Hessian代理工廠Bean --> <bean id="clientSpring" class="org.springframework.remoting.caucho.HessianProxyFactoryBean"> <!-- 請求代理Servlet路徑 --> <property name="serviceUrl"><value>http://localhost:8080/HessianSpring/remote/helloSpring</value> </property> <!-- 接口定義 --> <property name="serviceInterface"> <value>com.wtang.isay.Isay</value> </property> </bean></beans></pre>
?
調用:
[java] view plain copy print ?
package?com.wtang.test;????import?org.springframework.context.ApplicationContext;??import?org.springframework.context.support.ClassPathXmlApplicationContext;??import?com.wtang.isay.Isay;????public?class?SpringClient?{??????public?static?void?main(String[]?args)?{??????????ApplicationContext?contex?=?new?ClassPathXmlApplicationContext(??????????????????"remote-client.xml");????????????//?獲得客戶端的Hessian代理工廠bean ??????????Isay?i?=?(Isay)?contex.getBean("clientSpring");??????????System.out.println(i.sayHello("chen",?"weitang"));??????}??}?? package com.wtang.test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.wtang.isay.Isay;public class SpringClient { public static void main(String[] args) { ApplicationContext contex = new ClassPathXmlApplicationContext( "remote-client.xml"); // 獲得客戶端的Hessian代理工廠bean Isay i = (Isay) contex.getBean("clientSpring"); System.out.println(i.sayHello("chen", "weitang")); }}</pre>
?
輸出Hello:chenweitang
?
轉載于:https://my.oschina.net/201003674/blog/650263
總結
以上是生活随笔為你收集整理的Hessian入门(与Spring集成)的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。