http invoker_Http Invoker的Spring Remoting支持

http invoker

Spring HTTP Invoker是Java到Java远程处理的重要解决方案。 该技术使用标准的Java序列化机制通过HTTP公开服务,并且可以看作是替代方法,而不是Hessian和Burlap中的自定义序列化。 而且,它仅由Spring提供,因此客户端和服务器应用程序都必须基于Spring。

Spring通过HttpInvokerProxyFactoryBean和HttpInvokerServiceExporter支持HTTP调用程序基础结构。 HttpInvokerServiceExporter,它将指定的服务bean导出为HTTP调用程序服务终结点,可通过HTTP调用程序代理访问。 HttpInvokerProxyFactoryBean是用于HTTP调用程序代理的工厂bean。

此外,还提供了有关Spring Remoting简介和RMI Service&Client示例项目的Spring Remoting支持和RMI文章。

让我们看一下Spring Remoting支持以开发Http Invoker Service&Client。

二手技术:

  • JDK 1.6.0_31
  • 春天3.1.1
  • Tomcat 7.0
  • Maven的3.0.2

步骤1:建立已完成的专案

创建一个Maven项目,如下所示。 (可以使用Maven或IDE插件创建)。

步骤2:图书馆

Spring依赖项已添加到Maven的pom.xml中。

<!-- Spring 3.1.x dependencies -->
<properties><spring.version>3.1.1.RELEASE</spring.version>
</properties><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-remoting</artifactId><version>2.0.8</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring.version}</version></dependency>
<dependencies>

步骤3:建立使用者类别

创建一个新的用户类。

package com.otv.user;import java.io.Serializable;/*** User Bean** @author  onlinetechvision.com* @since   24 Feb 2012* @version 1.0.0**/
public class User implements Serializable {private long id;private String name;private String surname;/*** Get User Id** @return long id*/public long getId() {return id;}/*** Set User Id** @param long id*/public void setId(long id) {this.id = id;}/*** Get User Name** @return long id*/public String getName() {return name;}/*** Set User Name** @param String name*/public void setName(String name) {this.name = name;}/*** Get User Surname** @return long id*/public String getSurname() {return surname;}/*** Set User Surname** @param String surname*/public void setSurname(String surname) {this.surname = surname;}@Overridepublic String toString() {StringBuilder strBuilder = new StringBuilder();strBuilder.append("Id : ").append(getId());strBuilder.append(", Name : ").append(getName());strBuilder.append(", Surname : ").append(getSurname());return strBuilder.toString();}
}

步骤4:建立ICacheService介面

创建了代表远程缓存服务接口的ICacheService接口。

package com.otv.cache.service;import java.util.concurrent.ConcurrentHashMap;import com.otv.user.User;/*** Cache Service Interface** @author  onlinetechvision.com* @since   10 Mar 2012* @version 1.0.0**/
public interface ICacheService {/*** Get User Map** @return ConcurrentHashMap User Map*/public ConcurrentHashMap<Long, User> getUserMap();}

步骤5:创建CacheService类

CacheService类是通过实现ICacheService接口创建的。 它提供对远程缓存的访问…

package com.otv.cache.service;import java.util.concurrent.ConcurrentHashMap;import com.otv.user.User;/*** Cache Service Implementation** @author  onlinetechvision.com* @since   10 Mar 2012* @version 1.0.0**/
public class CacheService implements ICacheService {//User Map is injected...ConcurrentHashMap<Long, User> userMap;/*** Get User Map** @return ConcurrentHashMap User Map*/public ConcurrentHashMap<Long, User> getUserMap() {return userMap;}/*** Set User Map** @param ConcurrentHashMap User Map*/public void setUserMap(ConcurrentHashMap<Long, User> userMap) {this.userMap = userMap;}}

步骤6:建立IHttpUserService接口

创建了代表Http用户服务接口的IHttpUserService。 此外,它为Http客户端提供了远程方法。

package com.otv.http.server;import java.util.List;import com.otv.user.User;/*** Http User Service Interface** @author  onlinetechvision.com* @since   10 Mar 2012* @version 1.0.0**/
public interface IHttpUserService {/*** Add User** @param  User user* @return boolean response of the method*/public boolean addUser(User user);/*** Delete User** @param  User user* @return boolean response of the method*/public boolean deleteUser(User user);/*** Get User List** @return List user list*/public List<User> getUserList();}

步骤7:创建HttpUserService类

HttpUserService类是通过实现IHttpUserService接口创建的。

package com.otv.http.server;import java.util.ArrayList;
import java.util.List;
import org.apache.log4j.Logger;import com.otv.cache.service.ICacheService;
import com.otv.user.User;/*** Http User Service Implementation** @author  onlinetechvision.com* @since   10 Mar 2012* @version 1.0.0**/
public class HttpUserService implements IHttpUserService {private static Logger logger = Logger.getLogger(HttpUserService.class);//Remote Cache Service is injected...ICacheService cacheService;/*** Add User** @param  User user* @return boolean response of the method*/public boolean addUser(User user) {getCacheService().getUserMap().put(user.getId(), user);logger.debug("User has been added to cache. User : "+getCacheService().getUserMap().get(user.getId()));return true;}/*** Delete User** @param  User user* @return boolean response of the method*/public boolean deleteUser(User user) {getCacheService().getUserMap().remove(user.getId());logger.debug("User has been deleted from cache. User : "+user);return true;}/*** Get User List** @return List user list*/public List<User> getUserList() {List<User> list = new ArrayList<User>();list.addAll(getCacheService().getUserMap().values());logger.debug("User List : "+list);return list;}/*** Get Remote Cache Service** @return ICacheService Remote Cache Service*/public ICacheService getCacheService() {return cacheService;}/*** Set Remote Cache Service** @param ICacheService Remote Cache Service*/public void setCacheService(ICacheService cacheService) {this.cacheService = cacheService;}}

步骤8:创建HttpUserService-servlet.xml

HttpUserService应用程序上下文如下所示。 此xml必须命名为your_servlet_name-servlet.xml

<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:util="http://www.springframework.org/schema/util"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsdhttp://www.springframework.org/schema/utilhttp://www.springframework.org/schema/util/spring-util-3.0.xsd"><!-- User Map Declaration --><bean id="UserMap" class="java.util.concurrent.ConcurrentHashMap" /><!-- Cache Service Declaration --><bean id="CacheService" class="com.otv.cache.service.CacheService"><property name="userMap" ref="UserMap"/></bean>   <!-- Http User Service Bean Declaration --><bean id="HttpUserService" class="com.otv.http.server.HttpUserService" ><property name="cacheService" ref="CacheService"/></bean><!-- Http Invoker Service Declaration --><bean id="HttpUserServiceExporter" class="org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter"><!-- service represents Service Impl --><property name="service" ref="HttpUserService"/><!-- serviceInterface represents Http Service Interface which is exposed --><property name="serviceInterface" value="com.otv.http.server.IHttpUserService"/></bean><!-- Mapping configurations from URLs to request handler beans --><bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"><property name="mappings"><props><prop key="/HttpUserService">HttpUserServiceExporter</prop></props></property></bean></beans>

步骤9:创建web.xml

web.xml的配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"><display-name>OTV_SpringHttpInvoker</display-name><!-- Spring Context Configuration' s Path definition --><context-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/HttpUserService-servlet.xml</param-value></context-param><!-- The Bootstrap listener to start up and shut down Spring's root WebApplicationContext. It is registered to Servlet Container --><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><!-- Central dispatcher for HTTP-based remote service exporters. Dispatches to registered handlers for processing web requests.--><servlet><servlet-name>HttpUserService</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><load-on-startup>2</load-on-startup></servlet><!-- Servlets should be registered with servlet container and mapped with url for the http requests. --><servlet-mapping><servlet-name>HttpUserService</servlet-name><url-pattern>/HttpUserService</url-pattern></servlet-mapping><welcome-file-list><welcome-file>/pages/index.xhtml</welcome-file></welcome-file-list></web-app>

步骤10:创建HttpUserServiceClient类

HttpUserServiceClient类已创建。 它调用远程Http用户服务并执行用户操作。

package com.otv.http.client;import org.apache.log4j.Logger;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;import com.otv.http.server.IHttpUserService;
import com.otv.user.User;/*** Http User Service Client** @author  onlinetechvision.com* @since   24 Feb 2012* @version 1.0.0**/
public class HttpUserServiceClient {private static Logger logger = Logger.getLogger(HttpUserServiceClient.class);/*** Main method of the Http User Service Client**/public static void main(String[] args) {logger.debug("Http User Service Client is starting...");//Http Client Application Context is started...ApplicationContext context = new ClassPathXmlApplicationContext("httpClientAppContext.xml");//Remote User Service is called via Http Client Application Context...IHttpUserService httpClient = (IHttpUserService) context.getBean("HttpUserService");//New User is created...User user = new User();user.setId(1);user.setName("Bruce");user.setSurname("Willis");//The user is added to the remote cache...httpClient.addUser(user);//The users are gotten via remote cache...httpClient.getUserList();//The user is deleted from remote cache...httpClient.deleteUser(user);logger.debug("Http User Service Client is stopped...");}
}

步骤11:创建httpClientAppContext.xml

Http客户端应用程序上下文如下所示:

<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsd"><!-- Http Invoker Client Declaration --><bean id="HttpUserService" class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean"><!-- serviceUrl demonstrates Http Service Url which is called--><property name="serviceUrl" value="http://remotehost:port/OTV_SpringHttpInvoker-0.0.1-SNAPSHOT/HttpUserService"/><!-- serviceInterface demonstrates Http Service Interface which is called --><property name="serviceInterface" value="com.otv.http.server.IHttpUserService"/></bean></beans>

步骤12:部署项目

OTV_SpringHttpInvoker Project部署到Tomcat之后,将启动Http用户服务客户端,并且输出日志如下所示:

....
15.03.2012 21:26:41 DEBUG (DispatcherServlet.java:819) - DispatcherServlet with name 'HttpUserService' processing POST request for [/OTV_SpringHttpInvoker-0.0.1-SNAPSHOT/HttpUserService]
15.03.2012 21:26:41 DEBUG (AbstractUrlHandlerMapping.java:124) - Mapping [/HttpUserService] to HandlerExecutionChain with handler [org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter@f9104a] and 1 interceptor
15.03.2012 21:26:41 DEBUG (RemoteInvocationTraceInterceptor.java:73) - Incoming HttpInvokerServiceExporter remote call: com.otv.http.server.IHttpUserService.addUser
15.03.2012 21:26:41 DEBUG (HttpUserService.java:33) - User has been added to cache. User : Id : 1, Name : Bruce, Surname : Willis
15.03.2012 21:26:41 DEBUG (RemoteInvocationTraceInterceptor.java:79) - Finished processing of HttpInvokerServiceExporter remote call: com.otv.http.server.IHttpUserService.addUser
15.03.2012 21:26:41 DEBUG (DispatcherServlet.java:957) - Null ModelAndView returned to DispatcherServlet with name 'HttpUserService': assuming HandlerAdapter completed request handling
15.03.2012 21:26:41 DEBUG (FrameworkServlet.java:913) - Successfully completed request
15.03.2012 21:26:41 DEBUG (DispatcherServlet.java:819) - DispatcherServlet with name 'HttpUserService' processing POST request for [/OTV_SpringHttpInvoker-0.0.1-SNAPSHOT/HttpUserService]
15.03.2012 21:26:41 DEBUG (AbstractUrlHandlerMapping.java:124) - Mapping [/HttpUserService] to HandlerExecutionChain with handler [org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter@f9104a] and 1 interceptor
15.03.2012 21:26:41 DEBUG (RemoteInvocationTraceInterceptor.java:73) - Incoming HttpInvokerServiceExporter remote call: com.otv.http.server.IHttpUserService.getUserList
15.03.2012 21:26:41 DEBUG (HttpUserService.java:57) - User List : [Id : 1, Name : Bruce, Surname : Willis]
15.03.2012 21:26:41 DEBUG (RemoteInvocationTraceInterceptor.java:79) - Finished processing of HttpInvokerServiceExporter remote call: com.otv.http.server.IHttpUserService.getUserList
15.03.2012 21:26:41 DEBUG (DispatcherServlet.java:957) - Null ModelAndView returned to DispatcherServlet with name 'HttpUserService': assuming HandlerAdapter completed request handling
15.03.2012 21:26:41 DEBUG (FrameworkServlet.java:913) - Successfully completed request
15.03.2012 21:26:41 DEBUG (DispatcherServlet.java:819) - DispatcherServlet with name 'HttpUserService' processing POST request for [/OTV_SpringHttpInvoker-0.0.1-SNAPSHOT/HttpUserService]
15.03.2012 21:26:41 DEBUG (AbstractUrlHandlerMapping.java:124) - Mapping [/HttpUserService] to HandlerExecutionChain with handler [org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter@f9104a] and 1 interceptor
15.03.2012 21:26:41 DEBUG (RemoteInvocationTraceInterceptor.java:73) - Incoming HttpInvokerServiceExporter remote call: com.otv.http.server.IHttpUserService.deleteUser
15.03.2012 21:26:41 DEBUG (HttpUserService.java:45) - User has been deleted from cache. User : Id : 1, Name : Bruce, Surname : Willis
15.03.2012 21:26:41 DEBUG (RemoteInvocationTraceInterceptor.java:79) - Finished processing of HttpInvokerServiceExporter remote call: com.otv.http.server.IHttpUserService.deleteUser
15.03.2012 21:26:41 DEBUG (DispatcherServlet.java:957) - Null ModelAndView returned to DispatcherServlet with name 'HttpUserService': assuming HandlerAdapter completed request handling
15.03.2012 21:26:41 DEBUG (FrameworkServlet.java:913) - Successfully completed request
...

步骤13:下载

OTV_SpringHttpInvoker

参考: Online Technology Vision博客上的JCG合作伙伴 Eren Avsarogullari 提供的Http Invoker的Spring Remoting支持 。


翻译自: https://www.javacodegeeks.com/2012/04/spring-remoting-support-with-http.html

http invoker

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/356936.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端实现数字快速递增_天正CAD教程之递增文字应用实例

好课推荐&#xff1a;1、CAD2014&#xff1a;点击查看 2、室内&全屋&#xff1a;点击查看 3、CAD2019&#xff1a;点击查看4、CAD2018&#xff1a;点击查看5、Bim教程&#xff1a;点击查看 6、室内手绘&#xff1a;点击查看7、CAD三维&#xff1a;点击查看8、全屋定制&…

模板设计模式示例

本文是我们名为“ Java设计模式 ”的学院课程的一部分。 在本课程中&#xff0c;您将深入研究大量的设计模式&#xff0c;并了解如何在Java中实现和利用它们。 您将了解模式如此重要的原因&#xff0c;并了解何时以及如何应用模式中的每一个。 在这里查看 &#xff01; 目录 …

账号被暂时禁用使用VScode不能上传代码的解决办法

最近项目在开发的过程中突然不能提交代码&#xff0c;然后使用git账号登录gitee&#xff0c;发现账号账号不能登录了&#xff0c;不知道什么原因导致的禁用&#xff0c;这个账号sunjiaoshou01是被行方同步数据导致的禁用&#xff0c;一问管理员就说是可能一个月没登录会自动封禁…

地图库地之图地图窝_「方舆」秦朝地图及行政区划

秦朝是中国历史上一个极为重要的朝代&#xff0c;由战国时期的秦国发展起来的统一大国&#xff0c;它结束了自春秋起五百年来分裂割据的局面&#xff0c;成为中国历史上第一个大一统的中央集权制国家。秦朝统一六国时&#xff0c;国土面积为214万平方公里&#xff0c;后北收河套…

智能柜台C端代码规范

语法上建议&#xff1a;一、建议尽量使用””代替””上述比较好上述HX0188是一个字符串&#xff0c;用!替代比较好二、引用的组件/插件在当前vue文件内并未使用例&#xff1a;chk_bcip\src\business\common\views\ common-auditwait.vueDevice._$和Utils.AppUtils 都未使用&am…

华为云电脑和马云无影比_阿里云打造未来电脑无影,却因为5G限制,很难达到普及...

在9月17日&#xff0c;在2020阿里巴巴云栖大会上&#xff0c;阿里云发布了第一台云电脑"无影"&#xff0c;极致的简约&#xff0c;一张卡片大小的机器就等于一台电脑了。看到这款电脑的宣传片&#xff0c;真的是极致的未来感&#xff0c;随随便便一块小透明玻璃就是电…

SQL SERVER 2016研究三

2016 SQL SEVER 全程加密程式 column encryption settingEnabled; 重点&#xff1a;需要使用.Net Framework 4.6 新建一个程式如下&#xff1a; 1、创建链接数据库&#xff0c;必选栏位&#xff0c;影响加密。 2、或者在web.config文件数据链接字符串增加如下语句&#xff1a; …

小车故障灯亮显示大全_史上最全汽车故障灯大全,留着一定有用!

大家好&#xff0c;我是汽修小诺&#xff0c;喜欢有关汽车知识的小伙伴请关注我哦&#xff0c;感谢大家&#xff01;现在有车的朋友越来越多&#xff0c;开车途中难免会遇到汽车故障显示灯亮&#xff0c;从而不知道什么原因&#xff0c;有的朋友不敢开&#xff0c;等修理厂来检…

策略设计模式示例

本文是我们名为“ Java设计模式 ”的学院课程的一部分。 在本课程中&#xff0c;您将深入研究大量的设计模式&#xff0c;并了解如何在Java中实现和利用它们。 您将了解模式如此重要的原因&#xff0c;并了解何时以及如何应用模式中的每一个。 在这里查看 &#xff01; 目录 …

vscode修改json.maxItemsComputed配置解决提示

由于要测试明细查询打印业务&#xff0c;分页每页显示30行&#xff0c;要打印30页以上的数据&#xff0c;在打印的过程中会出现分页的问题&#xff0c;这里使用仿真工具测试&#xff0c;需要修改mock数据&#xff0c;造数据&#xff0c;超过5000行就有提示了&#xff0c;需要扩…

【面试题系列|前端面试题】前端高频面试题总结(2021年最新版)

面试过不少前端从业者&#xff0c;简历写的平平淡淡&#xff0c;别人会的技能他也都会&#xff0c;看起来什么都掌握一些&#xff1b;有些会请过来当面聊一下&#xff0c;有些就直接拒绝了&#xff08;如果是公司内要求独立完成项目的岗位&#xff0c;简历里放很多学习时候的DE…

观察者设计模式示例

本文是我们名为“ Java设计模式 ”的学院课程的一部分。 在本课程中&#xff0c;您将深入研究大量的设计模式&#xff0c;并了解如何在Java中实现和利用它们。 您将了解模式如此重要的原因&#xff0c;并了解何时以及如何应用模式中的每一个。 在这里查看 &#xff01; 目录 …

震惊!2021年数十个技术领域图谱曝光,包含Golang、区块链、人工智能、架构师等领域学习路线

前言:不知道你是否和我一样,刚开始学习某个技术领域的时候缺乏坚持的动力,没有一个清晰的学习路线,学习的过程中没有人指导,遇到问题没人一起解答,想深入学习某个领域而又无从下手,不知道该从何处学起?这不,你想要的技术图谱来啦。有了这款武功秘籍,不光能开阔视野,…

70多套java必练项目,适合小白上手!

导读&#xff1a;这些项目不管是找工作练手&#xff0c;还是公司使用当作模板进一步改进&#xff0c;亦或者是当作毕业设计&#xff0c;都很有借鉴意义&#xff01; 编译器建议使用&#xff1a;IDEA,Myeclipse,eclipse,HB-X等都可以。 数据库建议使用&#xff0c;mysql,oracle,…

mysql mycat 路由规则_Mycat分库路由规则

Mycat分库路由规则发布时间&#xff1a;2020-06-15 16:54:10来源&#xff1a;51CTO阅读&#xff1a;11651作者&#xff1a;lzf05303774一、Mycat分库路由分为连续路由和离散路由。1、连续路由&#xff1a;(1)、常用的路由方式&#xff1a;auto-sharding-long、sharding-by-date…

孙叫兽CSDN社区云----WebIT已创建,欢迎大家前端全栈小伙伴踊跃加入

目录 社区云是什么&#xff1f; 创建CSDN社区云WebIT的目的 推荐分享的技术点&#xff08;如下图所示&#xff09; 社区成员权益 版主权益 管理员权益 WebIT社区云积分规则 WebIT优质版主及管理员可以申请直播分享前端技术 WebIT社区云将为社区运营者提供&#xff1a; …

迭代器设计模式示例

本文是我们名为“ Java设计模式 ”的学院课程的一部分。 在本课程中&#xff0c;您将深入研究大量的设计模式&#xff0c;并了解如何在Java中实现和利用它们。 您将了解模式如此重要的原因&#xff0c;并了解何时以及如何应用模式中的每一个。 在这里查看 &#xff01; 目录 …

uibinder表单提交_使用UIBinder的GWT自定义按钮

uibinder表单提交这是一个有关如何在GWT上使用UIBinder创建自定义按钮的示例。 public class GwtUIBinderButton implements EntryPoint {public void onModuleLoad() {Button button new Button();button.setText("Button");button.addClickHandler(new ClickHandl…

python用import xlwt出现红字_如何用python处理excel

最近看到有很多的python课程是教人怎么用python处理excel,我看了一下价格收费还贼高...这么初级毫无水平的操作我的粉丝们就不要花钱去报课程了..我免费教你们怎么做.首先我们先要安装两个模块,一个叫做xlrd,一个是xlwt.安装如下:打开cmd输入pip install xlrd等待安装成功,成功…

什么是升职率?

我确实相信您熟悉彼得原则 。 一般而言&#xff0c;该原则是一种观察&#xff0c;即晋升可能并且将导致晋升人员不再符合该职位的条件。 对于JVM&#xff0c;存在类似的问题。 太快地提升对象可能会对性能产生重大影响。 在这篇文章中&#xff0c;我们将探讨提升率的概念&…