(1)三个项目,Api(存放提供者和消费者共有的xx,例如实体类以及服务接口等等)、Service(服务提供者)、Provider(服务消费者)

Api部分代码

 package cn.coreqi.entities;

 import java.io.Serializable;

 public class User implements Serializable {
private Integer Id;
private Integer Age;
private String UserName;
private String PassWord;
private Integer Enabled; public User() {
} public User(Integer id, Integer age, String userName, String passWord, Integer enabled) {
Id = id;
Age = age;
UserName = userName;
PassWord = passWord;
Enabled = enabled;
} public Integer getId() {
return Id;
} public void setId(Integer id) {
Id = id;
} public Integer getAge() {
return Age;
} public void setAge(Integer age) {
Age = age;
} public String getUserName() {
return UserName;
} public void setUserName(String userName) {
UserName = userName;
} public String getPassWord() {
return PassWord;
} public void setPassWord(String passWord) {
PassWord = passWord;
} public Integer getEnabled() {
return Enabled;
} public void setEnabled(Integer enabled) {
Enabled = enabled;
} @Override
public String toString() {
return "User{" +
"Id=" + Id +
", Age=" + Age +
", UserName='" + UserName + '\'' +
", PassWord='" + PassWord + '\'' +
", Enabled=" + Enabled +
'}';
}
}
 package cn.coreqi.service;

 import cn.coreqi.entities.User;

 import java.util.List;

 public interface UserService {
public List<User> getAll();
public User getById(int Id);
public void addUser(User user);
public void modifyUser(User user);
public void delById(int Id);
}

(2)服务提供者部分代码

 package cn.coreqi.service.impl;

 import cn.coreqi.entities.User;
import cn.coreqi.service.UserService;
import org.springframework.stereotype.Repository; import java.util.ArrayList;
import java.util.List; @Repository
public class UserServiceImpl implements UserService {
private static List<User> users = null;
static {
users = new ArrayList<>();
users.add(new User(1,24,"fanqi","123456",1));
users.add(new User(2,22,"gaoxing","123456",1));
users.add(new User(3,23,"xihuan","123456",1));
}
@Override
public List<User> getAll() {
return users;
} @Override
public User getById(int Id) {
for (User user : users){
if(user.getId() == Id){
return user;
}
}
return null;
} @Override
public void addUser(User user) {
users.add(user);
} @Override
public void modifyUser(User user) {
delById(user.getId());
addUser(user);
} @Override
public void delById(int Id) {
for (User user : users){
if(user.getId() == Id){
users.remove(user);
}
}
}
}

pom添加相关依赖

     <dependency>
<groupId>com.caucho</groupId>
<artifactId>hessian</artifactId>
<version>4.0.51</version>
</dependency>

编写相应配置类

 package cn.coreqi.hessian;

 import cn.coreqi.service.UserService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.remoting.caucho.HessianServiceExporter;
import org.springframework.web.servlet.HandlerMapping;
import org.springframework.web.servlet.handler.SimpleUrlHandlerMapping; import java.util.Properties; @Configuration
public class HessianConfig {
@Bean
public HessianServiceExporter hessianExporterUserService(UserService userService){
HessianServiceExporter hessianServiceExporter = new HessianServiceExporter();
hessianServiceExporter.setService(userService);
hessianServiceExporter.setServiceInterface(UserService.class);
return hessianServiceExporter;
} @Bean
public HandlerMapping hessianMapping(){
SimpleUrlHandlerMapping mapping = new SimpleUrlHandlerMapping();
Properties mappings = new Properties();
mappings.setProperty("/user.service","hessianExporterUserService");
mapping.setMappings(mappings);
return mapping;
} }

*HessianServiceExporter是一个SpringMVC控制器,它接收Hessian请求,并将这些请求转换为对应的方法调用,我们需要DispatcherServlet拦截后缀为“*.service”的URL

 package cn.coreqi.config;

 import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

 import javax.servlet.MultipartConfigElement;
import javax.servlet.ServletRegistration;
import java.io.File; public class SpringWebAppInit extends AbstractAnnotationConfigDispatcherServletInitializer {
//Spring容器
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[]{RootConfig.class};
} //SpringMVC容器
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[]{WebConfig.class};
} //DispatcherServlet映射关系
@Override
protected String[] getServletMappings() {
return new String[]{"/","*.service"}; //添加对*.service的映射
} }

我们还需要配置一个URL映射来确保DispatcherServlet将请求转发到,我已经在上面的配置类完成了如下操作。

(3)服务消费者部分代码

pom添加依赖

     <dependency>
<groupId>com.caucho</groupId>
<artifactId>hessian</artifactId>
<version>4.0.51</version>
</dependency>

编写相应配置类

 package cn.coreqi.hessian;

 import cn.coreqi.service.UserService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.remoting.caucho.HessianProxyFactoryBean; @Configuration
public class HessianConfig {
@Bean
public HessianProxyFactoryBean userService(){
HessianProxyFactoryBean proxy = new HessianProxyFactoryBean();
proxy.setServiceUrl("http://localhost:8081/SpringRmiService_war_exploded/user.service");
proxy.setServiceInterface(UserService.class);
return proxy;
}
}

调用

 package cn.coreqi.controller;

 import cn.coreqi.entities.User;
import cn.coreqi.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody; import java.util.List; @Controller
public class HomeController {
@Autowired
private UserService userService; @GetMapping("/home/index")
@ResponseBody
public Object index(){
return userService.getAll();
}
}

SpringMVC使用Hession发布远程服务的更多相关文章

  1. SpringMVC使用HttpInvoker发布远程服务

    参考这篇文章https://www.cnblogs.com/fanqisoft/p/10283156.html 将提供者配置类中的 1 @Bean 2 public HessianServiceExp ...

  2. SpringMVC使用Burlap发布远程服务

    参考这篇文章https://www.cnblogs.com/fanqisoft/p/10283156.html 将提供者配置类中的 @Bean public HessianServiceExporte ...

  3. SpringMVC整合Hessian访问远程服务

    1.1     Hessian简介       Hessian是一个轻量级的Web服务实现工具,它采用的是二进制协议,因此很适合发送二进制数据.它的一个基本原理就是把远程服务对象以二进制的方式进行发送 ...

  4. Java实现远程服务生产与消费(RPC)的4种方法-RMI,WebService,HttpClient,RestTemplate

    目录 一. 通过rmi实现远程服务的生产与消费 远程服务提供者实现. 创建rmi-provider项目(Maven) 远程服务消费者实现 创建rmi-consumer项目 二. 通过WebServic ...

  5. Dubbo2.7源码分析-如何发布服务

    Dubbo的服务发布逻辑是比较复杂的,我还是以Dubbo自带的示例讲解,这样更方便和容易理解. Provider配置如下: <?xml version="1.0" encod ...

  6. spring远程服务知识梳理

    序:本文主要是总结和归纳spring的远程服务相关知识,可作为入门学习笔记.写博客目的也是为了进行知识梳理,便于以后查看.本文主要参考资料 spring 实战第三版 本文主要讨论内容如下: 远程调度概 ...

  7. Maven 使用Eclipse构建Maven的SpringMVC项目

    首先Eclipse需要安装Maven的插件,地址:http://m2eclipse.sonatype.org/sites/m2e. 用MyEclipse安装Maven插件,建出的Maven项目有些问题 ...

  8. Dubbo——服务发布原理

    引言 在使用Dubbo的时候你一定会好奇它是怎么实现RPC的,而要了解它的调用过程,必然需要先了解其服务发布/订阅的过程,本篇将详细讨论Dubbo的发布过程. 源码分析 发布服务 新学Dubbo大都会 ...

  9. RPC框架-hessian学习

    先说说hessian有什么优点和缺点 一.优点: 比 Java 原生的对象序列化/反序列化速度更快, 序列化出来以后的数据更小.序列化协议跟应用层协议无关, 可以将 Hessian 序列化以后的数据放 ...

随机推荐

  1. 自学Python5.1-面向对象与面向过程

    自学Python之路 自学Python5.1-面向对象与面向过程 面向过程:根据业务逻辑从上到下写代码. 优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机.嵌入式开 ...

  2. EXTRACT FILES AND IMAGES FROM A SHAREPOINT CONTENT DATABASE

    If you ever had the problem where you need to extract files from a SharePoint Content Database or no ...

  3. Spring MVC 起步

    跟踪Spring MVC的请求 在请求离开浏览器时①,会带有用户所请求内容的信息,至少会包含请求的URL. 请求旅程的第一站是Spring的DispatcherServlet.与大多数基于Java的W ...

  4. A1082. Read Number in Chinese

    Given an integer with no more than 9 digits, you are supposed to read it in the traditional Chinese ...

  5. Asp: Server.mapPath() 注意事项

    今天下午,在删除一个用户后,竟然发现该用户上传的图片还能正常显示. 郁闷了,怎么会这样? 为了再次验证这个结果,我新注册一个用户名,然后上传3张图片,接着删除这个用户,再查看刚刚上传的3张图片,竟然没 ...

  6. c基础:函数参数是 struct(结构),传的是引用,还是值?

    比如函数形式:void func(struct a data1, struct b data2); 答案: 只要不是指针或者数组都是传值,其实指针也是传递的地址值. 追问但是如果这个结构体里面有数组这 ...

  7. 关于pascal退出acm/icpc历史

    应该是很久之前的事情了,现在我才知道,有些信息滞后了,本还以为这是最近的事情呢.而2019年noip也将取消pascal,一切成为历史, 想想初中/高中阶段整片地区的使用pascal,c/c++/ja ...

  8. Deformable ConvNets

    Deformable ConvNets 论文 Deformable Convolutional Networks(arXiv:1703.06211) CNN受限于空间结构,具有较差的旋转不变性,较弱的 ...

  9. windows 下mysql 重设root密码方法

    1.首先在命令行里关闭mysql服务 net stop mysql2.在命令行里进入mysql安装目录下bin目录,以不检查权限的方式启动:mysqld-nt  --skip-grant-tables ...

  10. MySQL 5.6版本内存占用过高的解决办法

    最近在阿里云购买了一台云服务器,因为是自己测试玩的,所以配置按最低的来了,1G内存,然后啪啪啪(指键盘声音)的安装了JDK,Tomcat,MySQL(5.6)等一系列环境,开始很爽,然后噩梦开始了: ...