hessian demo和hessian与spring整合demo
/**
* @version 1.1
* @author iam00@qq.com
* @create Mar 18, 2010
*/
Hessian是一个轻量级的remoting on http工具,使用简单的方法提供了RMI(Remote Method Invocation,远程方法调用)的功能。采用的是二进制RPC(Remote Procedure Call Protocol,远程过程调用协议)协议,因为采用的是二进制协议,所以它很适合于发送二进制数据。
在进行基于Hessian的项目开发时,应当注意以下几点:
▲JAVA服务器端必须具备以下几点:
?包含Hessian的jar包。
?设计一个接口,用来给客户端调用。
?实现该接口的功能。
?配置web.xml,配好相应的servlet。
?对象必须实现Serializable 接口。
?对于复杂对像可以使用Map的方法传递。
▲客户端必须具备以下几点:
?java客户端包含Hessian.jar的包。
?具有和服务器端结构一样的接口。
?利用HessianProxyFactory调用远程接口。
下面是一个hessian的简单例子。
Java服务器端:
环境:j2sdk1.4.2、Tomcat6.0
依赖的包:hessian-3.1.6.jar
新建一个名为HessianServer的web project。将hessian-3.1.6.jar放入WEB-INF/lib文件夹中。
创建接口:
package server.demo;public interface DemoApi {public void setName(String name);public String sayHello();public User getUser();}package server.demo;public class DemoService implements DemoApi {private String name;public String sayHello() {return "Hello "+name;}public void setName(String name) {this.name=name;System.out.println("Hello "+name);}public User getUser() {return new User("lingling", "pass");}}package server.demo;import java.io.Serializable;public class User implements Serializable {String name = "kitty";String password = "nopass";public User() {super();}public User(String name, String password) {super();this.name = name;this.password = password;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}}<servlet> <servlet-name>first</servlet-name> <servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class> <init-param> <param-name>service-class</param-name> <param-value>server.demo.DemoService</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>first</servlet-name> <url-pattern>/helloworld</url-pattern> </servlet-mapping>
package server.demo;public interface DemoApi {public void setName(String name);public String sayHello();public User getUser();}package server.demo;import java.io.Serializable;public class User implements Serializable {String name = "kitty";String password = "nopass";public User() {super();}public User(String name, String password) {super();this.name = name;this.password = password;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}}package client.demo;import java.net.MalformedURLException;import server.demo.DemoApi;import com.caucho.hessian.client.HessianProxyFactory;public class ClientTest {public static void main(String[] args) throws MalformedURLException,ClassNotFoundException {String url = "http://localhost:9520/HessianServer/helloworld";HessianProxyFactory factory = new HessianProxyFactory();DemoApi api = (DemoApi) factory.create(url);api.setName("test");System.out.println(api.sayHello());System.out.println(api.getUser().getName());System.out.println(api.getUser().getPassword());}}<servlet><servlet-name>remote</servlet-name><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>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"><beans><bean id="demoService" /><bean name="/helloSpring"ref="demoService" /><property name="serviceInterface" value="server.demo.DemoApi" /></bean></beans>
package client.demo;import java.net.MalformedURLException;import server.demo.DemoApi;import com.caucho.hessian.client.HessianProxyFactory;public class ClientTest {public static void main(String[] args) throws MalformedURLException,ClassNotFoundException {// String url = "http://localhost:9520/HessianServer/helloworld";String url = "http://localhost:9520/HessianServer/remote/helloSpring";HessianProxyFactory factory = new HessianProxyFactory();DemoApi api = (DemoApi) factory.create(DemoApi.class, url);api.setName("test");System.out.println(api.sayHello());System.out.println(api.getUser().getName());System.out.println(api.getUser().getPassword());}}<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"><beans><bean id="helloSpring"name="code">package client.demo;import java.net.MalformedURLException;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import server.demo.DemoApi;public class ClientTest {public static void main(String[] args) throws MalformedURLException,ClassNotFoundException {// String url = "http://localhost:9520/HessianServer/helloworld";// String url =// "http://localhost:9520/HessianServer/remote/helloSpring";// HessianProxyFactory factory = new HessianProxyFactory();// DemoApi api = (DemoApi) factory.create(DemoApi.class, url);ApplicationContext context = new ClassPathXmlApplicationContext("remote-client.xml");DemoApi api = (DemoApi) context.getBean("helloSpring");api.setName("test");System.out.println(api.sayHello());System.out.println(api.getUser().getName());System.out.println(api.getUser().getPassword());}}