zoukankan      html  css  js  c++  java
  • 【RPC】使用Hessian构建RPC的简单示例

    服务接口和实现

    public interface HelloService {
        // 服务方法
        String sayHello(String name);
    }
    
    public class HelloServiceImpl implements HelloService {
    
        public String sayHello(String name) {
            return "RPC > Hello , " + name;
        }
    
    }
    

    Maven引用

    <Hessian.version>4.0.38</Hessian.version>
    <!--hessian start -->
    	<dependency>
    		<groupId>com.caucho</groupId>
    		<artifactId>hessian</artifactId>
    		<version>${Hessian.version}</version>
    	</dependency>
    <!--hessian end -->
    

    web.xml配置

    配置HessianServlet

    <!--HessianServlet start -->
    <servlet>
    	<!-- 配置 HessianServlet -->
    	<servlet-name>helloService</servlet-name>
    	<servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class>
    
    	<!-- 配置接口的具体实现类 -->
    	<init-param>
    		<param-name>service-class</param-name>
    		<param-value>com.ll.rpc.HelloServiceImpl</param-value>
    	</init-param>
    </servlet>
    <!-- 映射 HessianServlet的访问URL地址 -->
    <servlet-mapping>
    	<servlet-name>helloService</servlet-name>
    	<url-pattern>/helloService</url-pattern>
    </servlet-mapping>
    <!--HessianServlet end -->
    

    Tomcat配置

    1. 下载Tomcat:使用版本6.0.51;
    2. 配置环境变量:CATALINA_HOME=D:xxxapache-tomcat-6.0.51;
    3. 配置Javaweb为tomcat默认项目:
      修改server.xml,添加:可参见【Jersey】基于Jersey构建Restful Web应用
    <Context path="" docBase="D:xxx	argetJavaweb" debug="0" reloadable="true"/>
    

    Clinet客户端实现

    package com.ll.rpc;
    
    import java.net.MalformedURLException;
    
    import com.caucho.hessian.client.HessianProxyFactory;
    
    public class Client {
    	public static void main(String[] args) {
    		// 远程Hessian服务
    		String url = "http://localhost:8080/helloService";
    		try {
    			// 利用hessianProxyFactory.create()方法创建一个代理对象
    			HelloService helloService = (HelloService) (new HessianProxyFactory()
    					.create(HelloService.class, url));
    
    			// 调用服务方法
    			System.out.println(helloService.sayHello("sssppp"));
    		} catch (MalformedURLException e) {
    
    		}
    	}
    }
    
    

    输出结果测试:

    RPC > Hello , sssppp
    

    其他

    参考链接:

    常用RPC框架及一个简单的RPC框架实现

    完整的web.xml如下:

    可参见【Jersey】基于Jersey构建Restful Web应用

    <?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">
    	<display-name>Java Web</display-name>
    	<welcome-file-list>
    		<welcome-file>index.jsp</welcome-file>
    	</welcome-file-list>
    
    	<!--Spring 文件路径 -->
    	<context-param>
    		<param-name>contextConfigLocation</param-name>
    		<param-value>classpath:conf/beans/beans-*.xml</param-value>
    	</context-param>
    
    	<!-- spring上下文监听器 -->
    	<listener>
    		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    	</listener>
    	<listener>
    		<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
    	</listener>
    
    	<!-- 解决中文乱码 -->
    	<filter>
    		<filter-name>SetCharacterEncoding</filter-name>
    		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    		<init-param>
    			<param-name>encoding</param-name>
    			<param-value>UTF-8</param-value>
    		</init-param>
    		<init-param>
    			<param-name>forceEncoding</param-name>
    			<param-value>false</param-value>
    		</init-param>
    	</filter>
    	<filter-mapping>
    		<filter-name>SetCharacterEncoding</filter-name>
    		<url-pattern>/*</url-pattern>
    	</filter-mapping>
    
    	<!-- jersey Servlet start -->
    	<servlet>
    		<servlet-name>rest-inside</servlet-name>
    		<servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class>
    		<init-param>
    			<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
    			<param-value>true</param-value>
    		</init-param>
    		<!-- 设置Restful实例的位置 -->
    		<init-param>
    			<param-name>com.sun.jersey.config.property.packages</param-name>
    			<param-value>com.ll.jersey</param-value>
    		</init-param>
    		<load-on-startup>1</load-on-startup>
    	</servlet>
    	<servlet-mapping>
    		<servlet-name>rest-inside</servlet-name>
    		<url-pattern>/jersey/rest/*</url-pattern>
    	</servlet-mapping>
    	<!-- jersey Servlet end -->
    
    	<!--HessianServlet start -->
    	<servlet>
    		<!-- 配置 HessianServlet -->
    		<servlet-name>helloService</servlet-name>
    		<servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class>
    
    		<!-- 配置接口的具体实现类 -->
    		<init-param>
    			<param-name>service-class</param-name>
    			<param-value>com.ll.rpc.HelloServiceImpl</param-value>
    		</init-param>
    	</servlet>
    	<!-- 映射 HessianServlet的访问URL地址 -->
    	<servlet-mapping>
    		<servlet-name>helloService</servlet-name>
    		<url-pattern>/helloService</url-pattern>
    	</servlet-mapping>
    	<!--HessianServlet end -->
    
    </web-app>
    
    
  • 相关阅读:
    《应用Yii1.1和PHP5进行敏捷Web开发》学习笔记(转)
    YII 小模块功能
    Netbeans代码配色主题大搜集
    opensuse 启动巨慢 解决方法 90s多
    opensuse 安装 网易云音乐 rpm netease music
    linux qq rpm deb opensuse
    openSUSE 安装 alien
    第一行代码 Android 第2版
    Android Studio AVD 虚拟机 联网 失败
    docker error during connect: Get http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.29/containers/json: open //./pipe/docker_engine: The system cannot find the file specified. In the default daemon configuratio
  • 原文地址:https://www.cnblogs.com/ssslinppp/p/6670465.html
Copyright © 2011-2022 走看看