• hessian应用示例


    因为公司的项目远程调用采用的是hessian,故抽时间了解了下hessian,自己也写了一个应用实例,以便加深对hessian的理解。

    Hessian是一个轻量级的remoting onhttp工具,使用简单的方法提供了RMI的功能。 相比WebService,Hessian更简单、快捷。采用的是二进制RPC协议,因为采用的是二进制协议,所以它很适合于发送二进制数据。

     

    在进行基于Hessian的项目开发时,应当注意以下几点:

    JAVA服务器端必须具备以下几点:

    ·包含Hessian的jar包

    ·设计一个接口,用来给客户端调用

    ·实现该接口的功能

    ·配置web.xml,配好相应的servlet

    ·对象必须实现Serializable 接口

    ·对于复杂对象可以使用Map的方法传递

    客户端必须具备以下几点:

    ·java客户端包含Hessian.jar的包。

    ·具有和服务器端结构一样的接口。包括命名空间都最好一样

    ·利用HessianProxyFactory调用远程接口。

     

    以下是一个关于hessian应用的示例程序。

    示例背景:

    由于本人所在公司正在编码直播室方面的项目,故以下源码中用LiveRoom.java类为直播室的类。User.java类为用户类。直播室和用户之间为一对多的关系。即一个直播室里面有多个用户。本示例将实现对直播室的增删改查功能

     

    我们先写服务端

     

    服务端,即提供服务的一端(废话,呵呵),需要定义接口,并提供接口实现。

     

    首先,定义两个类LiveRoom和User,并且两个类都要实现Serializable 接口

     

    package org.study.hessian.domain;

     

    import java.io.Serializable;

    import java.util.ArrayList;

    import java.util.List;

     

    public class LiveRoom implements Serializable,Comparable<LiveRoom>{

        private static final long serialVersionUID = -3219121209937741843L;

        private int roomId;

        private String roomName;

        public List<User> users = new ArrayList<User>();

        public LiveRoom(int roomId, String roomName) {

            super();

            this.roomId = roomId;

            this.roomName = roomName;

        }

        public LiveRoom() {

            super();

        }

       

        public int getRoomId() {

            return roomId;

        }

        public void setRoomId(int roomId) {

            this.roomId = roomId;

        }

        public String getRoomName() {

            return roomName;

        }

        public void setRoomName(String roomName) {

            this.roomName = roomName;

        }

       

        public int compareTo(LiveRoom o) {

            if(this.getRoomId() > o.getRoomId()){

                return 1;

            }

            else if(this.getRoomId() < o.getRoomId()){

                return -1;

            }

            else

            {

                return 0;

            }

        }

    }

     

     

    package org.study.hessian.domain;

     

    import java.io.Serializable;

    import java.util.Date;

     

    public class User implements Serializable{

        private int userId;

        private String userName;

        private Date birth;

        public int getUserId() {

            return userId;

        }

        public void setUserId(int userId) {

            this.userId = userId;

        }

        public String getUserName() {

            return userName;

        }

        public void setUserName(String userName) {

            this.userName = userName;

        }

        public Date getBirth() {

            return birth;

        }

        public void setBirth(Date birth) {

            this.birth = birth;

        }

    }

     

    然后定义接口

     

    package org.study.hessian.service;

     

    import java.util.List;

    import org.study.hessian.domain.LiveRoom;

     

    public interface LiveRoomService {

        public abstract void addRoom(LiveRoom room);

        public abstract void delRoom(int roomId);

        public abstract void updateRoom(LiveRoom room);

        public abstract LiveRoom getRoomById(int roomId);

        public abstract List<LiveRoom> getAllRoom();

    }

     

    接口的实现

    package org.study.hessian.service.impl;

     

    import java.util.ArrayList;

    import java.util.Collection;

    import java.util.Collections;

    import java.util.HashMap;

    import java.util.Iterator;

    import java.util.List;

    import java.util.Map;

    import org.study.hessian.domain.LiveRoom;

    import org.study.hessian.service.LiveRoomService;

     

    public class LiveRoomServiceImpl implements LiveRoomService {

        public Map<Integer, LiveRoom> roomMap = new HashMap<Integer, LiveRoom>();

       

        public void addRoom(LiveRoom room) {

            roomMap.put(room.getRoomId(), room);

        }

     

        public void delRoom(int roomId) {

            roomMap.remove(roomId);

        }

     

        public List<LiveRoom> getAllRoom() {

             List<LiveRoom> list = new ArrayList<LiveRoom>();

             Collection<LiveRoom> coll = roomMap.values();

             Iterator<LiveRoom> it = coll.iterator();

             while(it.hasNext()){

                 LiveRoom room = it.next();

                 list.add(room);

             }

             Collections.sort(list);

             return list;

        }

       

        public LiveRoom getRoomById(int roomId) {

            return roomMap.get(roomId);

        }

     

        public void updateRoom(LiveRoom room) {

            roomMap.remove(room.getRoomId());

            roomMap.put(room.getRoomId(), room);

        }

       

    }

     

    配置web.xml,配好相应的servlet

     

    <?xml version="1.0" encoding="UTF-8"?>

    <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"

        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

        http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

        <welcome-file-list>

           <welcome-file>index.jsp</welcome-file>

        </welcome-file-list>

       

        <servlet>

           <servlet-name>liveRoom</servlet-name>

           <servlet-class>

               com.caucho.hessian.server.HessianServlet

           </servlet-class>

           <init-param> 

               <!-- home-class也可以写为service-class -->

                <param-name>home-class</param-name> 

                <!-- 服务器对接口的现实,供客户端调用 --> 

                <param-value>

                 org.study.hessian.service.impl.LiveRoomServiceImpl

              </param-value> 

            </init-param> 

            <init-param> 

            <!--home-api也可以写为api-class  -->

                <param-name>home-api</param-name> 

                <!-- 客户端接口 --> 

                <param-value>org.study.hessian.service.LiveRoomService</param-value> 

            </init-param> 

        </servlet>

        <servlet-mapping>

           <servlet-name>liveRoom</servlet-name>

           <url-pattern>/liveRoom</url-pattern>

        </servlet-mapping>

     

    </web-app>

     

    至此,服务端的代码就写完了。

    接着,我们写客户端

    注:客户端需要服务端定义的两个类和定义的接口(不需要接口的实现)

     

    客户端的调用代码如下:

     

    package org.study.hessian;

     

    import java.net.MalformedURLException;

    import java.util.ArrayList;

    import java.util.Date;

    import java.util.List;

    import org.study.hessian.api.LiveRoomService;

    import org.study.hessian.domain.LiveRoom;

    import org.study.hessian.domain.User;

    import org.study.hessian.utils.PropertyFileUtil;

     

    import com.caucho.hessian.client.HessianProxyFactory;

     

    public class Test {

        public static void main(String[] args) throws MalformedURLException,

                ClassNotFoundException {

            // 远程调用地址

            String url="http://localhost:8080/HessianServer/liveRoom";

            System.out.println(url);

     

            HessianProxyFactory factory = new HessianProxyFactory();

            LiveRoomService liveRoomService = (LiveRoomService) factory.create(

                    LiveRoomService.class, url);

            for (int i = 1; i < 10; i++) {

                LiveRoom room = new LiveRoom();

                room.setRoomId(i);

                room.setRoomName("liveRoom" + i);

                List<User> list = new ArrayList<User>();

                for (int j = 1; j < 5; j++) {

                    User user = new User();

                    user.setUserId(j);

                    user.setUserName("xiongyuewen" + j);

                    user.setBirth(new Date());

                    list.add(user);

                }

                room.users = list;

                liveRoomService.addRoom(room);

            }

     

            liveRoomService.delRoom(3);

            LiveRoom room = new LiveRoom();

            room.setRoomId(4);

            room.setRoomName("wanglili");

            room.users = null;

            liveRoomService.updateRoom(room);

            List<LiveRoom> listRooms = liveRoomService.getAllRoom();

            if (listRooms == null) {

                throw new RuntimeException("listRooms is null");

            }

     

            for (LiveRoom lr : listRooms) {

                System.out.println(lr.getRoomName());

                List<User> users = lr.users;

                if (users == null) {

                    continue;

                }

                for (User user : users) {

                    System.out.println(user.getUserName() + " " + user.getBirth());

                }

            }

        }

    }

  • 相关阅读:
    Oracle OCP 19c 认证1Z0-082考试题库(第1题)
    OCP 063中文考试题库(cuug内部资料)第6题
    OCP 062中文考试题库(cuug内部资料)第6题
    OCP 062中文考试题库(cuug内部资料)第5题
    OCP 071中文考试题库(cuug内部资料)第6题
    搜索
    Even Parity uva11464 模拟
    GCD hdu1695容斥原理
    Rectangles hdu2461容斥定理
    GCD XOR uvalive6657
  • 原文地址:https://www.cnblogs.com/huangwentian/p/7169117.html
Copyright © 2020-2023  润新知