1 实体,必须序列化
public class UcServiceEntity implements Serializable{ /** * @Fields serialVersionUID : TODO */ private static final long serialVersionUID = 1L; private String name; private String age ; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } }
2 服务端与客户端的接口
package com.mainbo.u3.service; import java.util.Map; public interface UcService { public String getUserInfobyName(String userName); public int recordLog(String username, String point, String operate, String desc); public Map getUserInfobyName(Map userMap); public UcServiceEntity getUserInfobyName(UcServiceEntity entity); }
3 服务端接口实现
@Service("ucService") public class UCServiceImpl implements UcService { private static Logger pointrecordlog = Logger.getLogger("pointrecordlog"); private static Logger logger = Logger.getLogger(UCServiceImpl.class); public String getUserInfobyName(String userName) { return userName+"12" ; } public int recordLog(String username, String point, String operate, String desc) { int result = 0; try { pointrecordlog.info(username + " - " + point + " - " + operate + " - " + desc); } catch (Throwable t) { result = -1; logger.error(t); } return result; } @Override public Map getUserInfobyName(Map userMap) { System.out.println( userMap); Map map = new HashMap(); map.put("userName", "王战涛"); return map; } @Override public UcServiceEntity getUserInfobyName(UcServiceEntity entity) { System.out.println( entity.getName()); entity.setName("getUserInfobyName"); return entity; } }
4 映射mapping ,在springmvc 的配置文件中*-servlet.xml中
<bean class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter"/> <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="mappings"> <props> <prop key="/httpService">httpService</prop> </props> </property> </bean>
5 ApplicationContext.xml中配置HttpInvoker
<bean id="httpService" class="org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter"> <property name="service"> <ref bean="ucService" /> </property> <property name="serviceInterface" value=" com.mainbo.u3.service.UcService"> </property> </bean>
6 web.xml中暴漏接口
<servlet> <servlet-name>u3</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>3</load-on-startup> </servlet> <servlet-mapping> <servlet-name>u3</servlet-name> <url-pattern>/service/*</url-pattern> </servlet-mapping>
7 客户端配置ApplicationContext.xml ,暴漏访问url
<bean id="httpService" class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean"> <property name="serviceUrl" value="http://localhost:80/service/httpService" /> <property name="serviceInterface" value=" com.mainbo.u3.service.UcService" /> </bean>
8 主函数进行测试
public static void main(String[] args) { ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext( new String[] {"u3-core.xml" }); UcService us = (UcService)ctx.getBean("httpService"); String userName = us.getUserInfobyName("111111"); System.out.println( userName ); Map map = new HashMap(); map.put("userName", "王涛1"); Map mapUser = us.getUserInfobyName(map ); System.out.println(mapUser.get("userName") ); UcServiceEntity entity = new UcServiceEntity(); entity.setName("传递实体"); UcServiceEntity entity2 = us.getUserInfobyName(entity); System.out.println(entity2 ); }
相关推荐
1. **数据序列化与反序列化**:默认情况下,Spring HttpInvoke 使用 Java 对象序列化进行数据交换,这可能会成为性能瓶颈。为了提升效率,可以考虑使用更高效的序列化框架,如 Protobuf 或 JSON 格式(如 Jackson 或...
上文我们利用Spring rmi实现了Spring的远程访问(Spring 实现远程访问详解——rmi),本文主要讲解利用HttpInvoke实现远程访问。 Spring httpInvoker使用标准java序列化机制,通过Http暴露业务服务。如果你的参数和...
采用了httpInvoke远程调用技术,为了简单只用了jsp->controller->dao分层。。其中的jsp controller 放在_web工程中,业务逻辑放在_svc中,分开下载,如果觉得没有,就可以不用下载另外一个工程了,持久层用mybatis,...
上述配置中,`httpInvoke-dispatcher` 表示 Servlet 的名称,`org.springframework.web.servlet.DispatcherServlet` 是 `DispatcherServlet` 的全限定类名,`*.service` 表示任何以 `.service` 结尾的 URL 都将由 `...
这个实例中的`httpinvoke`目录可能包含服务端和客户端的源代码、配置文件以及运行脚本。通过分析和运行这些代码,你可以更深入地理解HTTPInvoker的工作原理和使用方式。同时,学习这个实例也能帮助你掌握Spring框架...
4. **http协议**:基于Http表单提交,使用Spring的HttpInvoke实现,适用于提供者数量多于消费者的场景,适合应用程序和浏览器JS调用。 5. **hessian协议**:集成了Hessian服务,基于HTTP通讯,使用Servlet暴露服务...
- **HTTP协议**:使用Spring的Httpinvoke实现,适合JS调用或给Web应用使用。 - **Hessian协议**:基于HTTP通讯,提供与Hessian服务的互操作,适合中等大小的数据传输。 - **Memcache和Redis协议**:基于这两个数据库...
- 使用Spring的HttpInvoke实现,适合提供者数量多于消费者的场景,尤其是需要为应用程序和浏览器JS调用的情况。基于HTTP的短连接传输。 5. **Hessian协议**: - 基于HTTP通讯,使用Servlet暴露服务,Dubbo内嵌...
4. HTTP 协议:基于 Http 表单提交的远程调用协议,使用 Spring 的 HttpInvoke 实现。多个短连接,传输协议 HTTP,传入参数大小混合,提供者个数多于消费者,需要给应用程序和浏览器 JS 调用。 5. Hessian 协议:...
- 基于Http表单提交,使用Spring的HttpInvoke实现。 - 多个短连接,通过HTTP传输,适用于提供者多于消费者的场景,如Web应用和JavaScript调用。 5. **hessian协议**: - 集成了Hessian服务,基于HTTP通讯,使用...
4. http协议:使用基于Http表单提交的远程调用协议,通过Spring的HttpInvoke实现。它支持HTTP协议,适用于提供者数量多于消费者,需要支持应用程序和浏览器JS调用的场景。 5. hessian协议:基于Hessian服务,采用...
- **特点**:基于Http表单提交的远程调用协议,使用Spring的HttpInvoke实现。 - **传输协议**:HTTP - **应用场景**:适用于需要给应用程序和浏览器JS调用的场景。 - **优点**:易于理解和使用。 - **缺点**:性能...
使用了并发工具类库,线程安全就高枕无忧了吗?:concurrenttool 代码加锁:不要让“锁”事成为烦心事:lock 线程池:业务代码最常用也最容易犯错的组件:threadpool HTTP调用:你考虑到超时、重试、并发了吗?:...
- **特点**:基于HTTP表单提交的远程调用协议,使用Spring的HttpInvoke实现。 - **应用场景**:适用于需要给应用程序和浏览器JS调用的场景。 - **优点**:简单易用,易于调试。 - **缺点**:性能不是最优,安全性...