SpringHttpInvoker解析1-使用示例

简介: HTTP invoker是一个新的远程调用模型,作为Spring框架的一部分,来执行基于HTTP的远程调用(让防火墙可以接受),并使用Java的序列化机制。服务端定义服务接口UserServiceimport java.

HTTP invoker是一个新的远程调用模型,作为Spring框架的一部分,来执行基于HTTP的远程调用(让防火墙可以接受),并使用Java的序列化机制。

服务端

定义服务接口UserService

import java.util.List;  
import com.gosun.jws.daomain.Users;  
public interface UserService {  
    public List<Users> geAlltUsers();  
    public Users getUser(String id);   
    public void save(Users user);   
    public void saves(List<Users> users);   
}  

服务接口实现类

import java.util.List;  
import com.gosun.jws.daomain.Users;  
import com.gosun.jws.daomain.UsersFactory;   
public class UserServiceImpl implements UserService {  
    @Override  
    public List<Users> geAlltUsers() {  
        return UsersFactory.getUsers();  
    }  
    @Override  
    public Users getUser(String id) {  
        System.out.println(id);  
        return UsersFactory.getUser();  
    }  
    @Override  
    public void save(Users user) {  
        System.out.println(user.toJson());  
    }  
    @Override  
    public void saves(List<Users> users) {  
        for (Users u : users) {  
            System.out.println(u.toJson());  
        }  
    }  
}  

配置Spring的HttpInvokerServiceExporter和SimpleUrlHandlerMapping

<!-- 在Spring的httpInvoker服务 -->  
<bean id="httpInvokerUserService"  
    class="org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter">  
    <!--需要发布的实现类 -->  
    <property name="service" ref="userServiceHttpInvoker" />  
    <property name="serviceInterface" value="com.gosun.jws.httpinvoker.UserService" />  
</bean>  
<!-- 将特定的请求映射到具体的hessianservice -->  
<bean id="urlMapping1"  
    class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">  
    <property name="mappings">  
        <props>  
            <prop key="/httpInvokerUserService.service">httpInvokerUserService</prop>  
        </props>  
    </property>  
</bean>  
<bean id="userServiceHttpInvoker" class="com.gosun.jws.httpinvoker.UserServiceImpl" />  

配置DispatcherServlet控制器

<servlet>  
  <servlet-name>dispatcherServlet</servlet-name>  
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
  <init-param>  
    <param-name>contextConfigLocation</param-name>  
    <param-value>classpath:applicationContext-httpinvoker.xml</param-value>  
  </init-param>  
</servlet>  
<servlet-mapping>  
  <servlet-name>dispatcherServlet</servlet-name>  
  <url-pattern>*.service</url-pattern>  
</servlet-mapping>  

客户端

配置Spring的HttpInvokerProxyFactoryBean

<bean id="httpInvokerUserService" class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">  
  <property name="serviceUrl" value="http://localhost:8080/jws/httpInvokerUserService.service"/>  
  <property name="serviceInterface" value="com.gosun.jws.httpinvoker.UserService" />  
</bean> 

测试代码

import java.util.List;  
import org.springframework.context.ApplicationContext;  
import org.springframework.context.support.ClassPathXmlApplicationContext;  
import com.gosun.jws.daomain.Users;  
  
public class ClientDemo {  
    public static void main(String[] args) {  
        ApplicationContext ac = new ClassPathXmlApplicationContext("client-application/applicationContext-httpInvoker.xml");  
        UserService us = (UserService) ac.getBean("httpInvokerUserService");  
        Users user = us.getUser("a001");  
        System.out.println(user.toJson());  
        System.out.println("----------------------------------------");  
        List<Users> users = us.geAlltUsers();  
        for (Users u : users) {  
            System.out.println(u.toJson());  
        }  
        System.out.println("----------------------------------------");  
        us.save(user);  
        System.out.println("----------------------------------------");  
        us.saves(users);  
    }  

 

目录
相关文章
|
算法 测试技术 C语言
深入理解HTTP/2:nghttp2库源码解析及客户端实现示例
通过解析nghttp2库的源码和实现一个简单的HTTP/2客户端示例,本文详细介绍了HTTP/2的关键特性和nghttp2的核心实现。了解这些内容可以帮助开发者更好地理解HTTP/2协议,提高Web应用的性能和用户体验。对于实际开发中的应用,可以根据需要进一步优化和扩展代码,以满足具体需求。
1461 29
|
人工智能 文字识别 自然语言处理
保单AI识别技术及代码示例解析
车险保单包含基础信息、车辆信息、人员信息、保险条款及特别约定等关键内容。AI识别技术通过OCR、文档结构化解析和数据校验,实现对保单信息的精准提取。然而,版式多样性、信息复杂性、图像质量和法律术语解析是主要挑战。Python代码示例展示了如何使用PaddleOCR进行保单信息抽取,并提出了定制化训练、版式分析等优化方向。典型应用场景包括智能录入、快速核保、理赔自动化等。未来将向多模态融合、自适应学习和跨区域兼容性发展。
1141 29
|
JSON 前端开发 搜索推荐
关于商品详情 API 接口 JSON 格式返回数据解析的示例
本文介绍商品详情API接口返回的JSON数据解析。最外层为`product`对象,包含商品基本信息(如id、name、price)、分类信息(category)、图片(images)、属性(attributes)、用户评价(reviews)、库存(stock)和卖家信息(seller)。每个字段详细描述了商品的不同方面,帮助开发者准确提取和展示数据。具体结构和字段含义需结合实际业务需求和API文档理解。
|
JSON 缓存 API
解析电商商品详情API接口系列,json数据示例参考
电商商品详情API接口是电商平台的重要组成部分,提供了商品的详细信息,支持用户进行商品浏览和购买决策。通过合理的API设计和优化,可以提升系统性能和用户体验。希望本文的解析和示例能够为开发者提供参考,帮助构建高效、可靠的电商系统。
720 12
|
安全 编译器 Linux
深入解析与防范:基于缓冲区溢出的FTP服务器攻击及调用计算器示例
本文深入解析了利用缓冲区溢出漏洞对FTP服务器进行远程攻击的技术,通过分析FreeFlow FTP 1.75版本的漏洞,展示了如何通过构造过长的用户名触发缓冲区溢出并调用计算器(`calc.exe`)。文章详细介绍了攻击原理、关键代码组件及其实现步骤,并提出了有效的防范措施,如输入验证、编译器保护和安全编程语言的选择,以保障系统的安全性。环境搭建基于Windows XP SP3和Kali Linux,使用Metasploit Framework进行攻击演示。请注意,此内容仅用于教育和研究目的。
642 4
|
存储 搜索推荐 数据库
运用LangChain赋能企业规章制度制定:深入解析Retrieval-Augmented Generation(RAG)技术如何革新内部管理文件起草流程,实现高效合规与个性化定制的完美结合——实战指南与代码示例全面呈现
【10月更文挑战第3天】构建公司规章制度时,需融合业务实际与管理理论,制定合规且促发展的规则体系。尤其在数字化转型背景下,利用LangChain框架中的RAG技术,可提升规章制定效率与质量。通过Chroma向量数据库存储规章制度文本,并使用OpenAI Embeddings处理文本向量化,将现有文档转换后插入数据库。基于此,构建RAG生成器,根据输入问题检索信息并生成规章制度草案,加快更新速度并确保内容准确,灵活应对法律与业务变化,提高管理效率。此方法结合了先进的人工智能技术,展现了未来规章制度制定的新方向。
859 3
|
开发者 图形学 Java
揭秘Unity物理引擎核心技术:从刚体动力学到关节连接,全方位教你如何在虚拟世界中重现真实物理现象——含实战代码示例与详细解析
【8月更文挑战第31天】Unity物理引擎对于游戏开发至关重要,它能够模拟真实的物理效果,如刚体运动、碰撞检测及关节连接等。通过Rigidbody和Collider组件,开发者可以轻松实现物体间的互动与碰撞。本文通过具体代码示例介绍了如何使用Unity物理引擎实现物体运动、施加力、使用关节连接以及模拟弹簧效果等功能,帮助开发者提升游戏的真实感与沉浸感。
1081 1
|
前端开发 程序员 API
从后端到前端的无缝切换:一名C#程序员如何借助Blazor技术实现全栈开发的梦想——深入解析Blazor框架下的Web应用构建之旅,附带实战代码示例与项目配置技巧揭露
【8月更文挑战第31天】本文通过详细步骤和代码示例,介绍了如何利用 Blazor 构建全栈 Web 应用。从创建新的 Blazor WebAssembly 项目开始,逐步演示了前后端分离的服务架构设计,包括 REST API 的设置及 Blazor 组件的数据展示。通过整合前后端逻辑,C# 开发者能够在统一环境中实现高效且一致的全栈开发。Blazor 的引入不仅简化了 Web 应用开发流程,还为习惯于后端开发的程序员提供了进入前端世界的桥梁。
2381 1
|
JSON 前端开发 API
【淘系】商品详情属性解析(属性规格详情图sku等json数据示例返回参考),淘系API接口系列
在淘宝(或天猫)平台上,商品详情属性(如属性规格、详情图、SKU等)是商家在发布商品时设置的,用于描述商品的详细信息和不同规格选项。这些信息对于消费者了解商品特性、进行购买决策至关重要。然而,直接通过前端页面获取这些信息的结构化数据(如JSON格式)并非直接暴露给普通用户或开发者,因为这涉及到平台的商业机密和数据安全。 不过,淘宝平台提供了丰富的API接口(如淘宝开放平台API),允许有资质的开发者或合作伙伴通过编程方式获取商品信息。这些API接口通常需要注册开发者账号、申请应用密钥(App Key)和秘钥(App Secret),并遵守淘宝的API使用协议。
|
设计模式 存储 Java
掌握Java设计模式的23种武器(全):深入解析与实战示例
掌握Java设计模式的23种武器(全):深入解析与实战示例

推荐镜像

更多
  • DNS