hessian 远程调用实现
hessian 使用 C/S 方式,基于 http 协议传输,使用 Hessian 二进制序列化。
1、打开 idea 创建一个父 Maven 工程 hessian_demo 工程, 和两个子模块(hessian_server, hessian_client)。
--> idea
--> File
--> New Project
--> Maven
--> Groupld : ( djh.it )
Artifactld : ( hessian_demo )
Version : 1.0-SNAPSHOT
--> Next
--> Project name: ( hessian_demo )
Project location: ( C:\java-test\idea2019\hessian_demo )
--> Finish
(父工程不编写代码,可以删除 src 目录)
创建两个子模块:
--> 右键 hessian_demo 父工程
--> Modules
--> Maven
--> Groupld : ( djh.it )
Artifactld : ( hessian_server )
Version : 1.0-SNAPSHOT
--> Next
--> Module name: ( hessian_server )
Content root : ( C:\java-test\idea2019\hessian_demo\hessian_server )
Module file location: ( C:\java-test\idea2019\hessian_demo\hessian_server )
--> Finish
--> 右键 hessian_demo 父工程
--> Modules
--> Maven
--> Groupld : ( djh.it )
Artifactld : ( hessian_client )
Version : 1.0-SNAPSHOT
--> Next
--> Module name: ( hessian_client )
Content root : ( C:\java-test\idea2019\hessian_demo\hessian_client )
Module file location: ( C:\java-test\idea2019\hessian_demo\hessian_client )
--> Finish
把 java.project 工程 转变成 web Project
--> 在 pom.xml 文件中加入: <packaging>war</packaging>
--> 右键 hessian_server 子项目 src.main 目录
--> New
--> Directory ( 添加新目录 )
--> 输入: webapp
--> 右键 hessian_server 子项目
--> Open Modules Settings
或者:
--> File
--> Project Structure
--> Modules
--> hessian_server
--> Web
--> 右边 +
--> web.xml
--> OK --> Apply --> OK。
--> 并把 web.xml 移动到 webapp 文件夹下。
2、在 子工程 hessian_server 中添加依赖(pom.xml 中) 并添加 tomcat7 插件配置。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>hessian_demo</artifactId>
<groupId>djh.it</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<packaging>war</packaging>
<artifactId>hessian_server</artifactId>
<dependencies>
<dependency>
<groupId>com.caucho</groupId>
<artifactId>hessian</artifactId>
<version>4.0.7</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>1.7.5</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>8888</port>
<path>/</path>
<uriEncoding>UTF-8</uriEncoding>
</configuration>
</plugin>
</plugins>
</build>
</project>
<!-- C:\java-test\idea2019\hessian_demo\hessian_server\pom.xml -->
3、 在 子工程 hessian_server 中,创建 UserService.java 接口类
/**
* C:\java-test\idea2019\hessian_demo\hessian_server\src\main\java\djh\it\service\UserService.java
*
* 2024-3-10 hessian 远程调用实现 :服务器端 server 接口 类
*
*
*/
package djh.it.service;
public interface UserService {
public String sayHello(String name);
}
4、在 子工程 hessian_server 中,创建 UserServiceImpl.java 实现类
/**
* C:\java-test\idea2019\hessian_demo\hessian_server\src\main\java\djh\it\service\impl\UserServiceImpl.java
*
* 2024-3-10 hessian 远程调用实现 :服务器端 server 实现 类
*
*
*/
package djh.it.service.impl;
import djh.it.service.UserService;
public class UserServiceImpl implements UserService {
public String sayHello(String name) {
return name + " 调用了hessian服务端的服务";
}
}
5、 在 子工程 hessian_server 的 web.xml 中配置 HessianServlet
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<servlet>
<servlet-name>HessianServlet</servlet-name>
<servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class>
<init-param>
<param-name>service-class</param-name>
<param-value>djh.it.service.impl.UserServiceImpl</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>HessianServlet</servlet-name>
<url-pattern>/hessianServlet</url-pattern>
</servlet-mapping>
</web-app>
<!-- C:\java-test\idea2019\hessian_demo\hessian_server\src\main\webapp\WEB-INF\web.xml -->
6、 同样,在 客户端 子工程 hessian_client 中添加 hessian 依赖(pom.xml 中)
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>hessian_demo</artifactId>
<groupId>djh.it</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>hessian_client</artifactId>
<dependencies>
<dependency>
<groupId>com.caucho</groupId>
<artifactId>hessian</artifactId>
<version>4.0.7</version>
</dependency>
</dependencies>
</project>
<!-- C:\java-test\idea2019\hessian_demo\hessian_client\pom.xml -->
7、 在 客户端 子工程 hessian_client 中,创建跟服务端相同的接口 UserService.java 接口类。
/**
* C:\java-test\idea2019\hessian_demo\hessian_client\src\main\java\djh\it\service\UserService.java
*
* 2024-3-10 hessian 远程调用实现 :客户 端 server 接口 类
*
*/
package djh.it.service;
public interface UserService {
public String sayHello(String name);
}
8、 在 客户端 子工程 hessian_client 中,创建测试类 ClientTest.java
/**
* C:\java-test\idea2019\hessian_demo\hessian_client\src\main\java\djh\it\test\ClientTest.java
*
* 2024-3-10 hessian 远程调用实现 :测试类 ClientTest.java
*/
package djh.it.test;
import com.caucho.hessian.client.HessianProxyFactory;
import djh.it.service.UserService;
import java.net.MalformedURLException;
public class ClientTest {
public static void main(String[] args) throws MalformedURLException {
//注意:要和服务端 tomcat7 配置的端口 和 web.xml 中 url-pattern 配置名 一致
String url = "http://localhost:8888/hessianServlet";
HessianProxyFactory hessianProxyFactory = new HessianProxyFactory();
UserService userService = (UserService) hessianProxyFactory.create(UserService.class, url);
String h = userService.sayHello("hessian客户端");
System.out.println(h);
}
}
9、 先启动 服务端 服务程序 类 tomcat7,
再启动 客户端 client 程序 类 ClientTest.java,
输出:hessian客户端 调用了hessian服务端的服务