====== spring整合hessian ====== ===== hessian介绍 ===== Hessian是一个轻量级的remoting onhttp工具,使用简单的方法提供了RMI的功能。 相比WebService,Hessian更简单、快捷。采用的是二进制RPC协议,因为采用的是二进制协议,所以它很适合于发送二进制数据。 ===== 加入pom依赖 ===== com.caucho hessian 4.0.38 ===== web.xml ===== contextConfigLocation classpath*:/hessian-servlet.xml hessian org.springframework.web.servlet.DispatcherServlet 4 hessian /hessian/* ===== hessian-servlet.xml ===== ===== RmiRequest.java ===== package com.gxx.record.dto; import java.io.Serializable; /** * *
*
Title:
*
* RMI远程调用请求 *
*
Description:
*
*

none *

*
* * @author Administrator * @version 1.0, 2015年8月2日 * @since record * */ public class RmiRequest implements Serializable { private static final long serialVersionUID = 8407796832554234397L; public String businessCode;//业务代码 public String name;//姓名 public String password;//密码 public String getBusinessCode() { return businessCode; } public void setBusinessCode(String businessCode) { this.businessCode = businessCode; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
===== RmiResponse.java ===== package com.gxx.record.dto; import java.io.Serializable; /** * *
*
Title:
*
* RMI远程调用返回 *
*
Description:
*
*

none *

*
* * @author Administrator * @version 1.0, 2015年8月2日 * @since record * */ public class RmiResponse implements Serializable { private static final long serialVersionUID = -1241624069216870728L; public boolean isSuccess;//是否成功 public String message;//信息 public boolean isMutiple;//是否多条 public boolean isSuccess() { return isSuccess; } public void setSuccess(boolean isSuccess) { this.isSuccess = isSuccess; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public boolean isMutiple() { return isMutiple; } public void setMutiple(boolean isMutiple) { this.isMutiple = isMutiple; } }
===== RmiService.java ===== package com.gxx.record.service; import com.gxx.record.dto.RmiRequest; import com.gxx.record.dto.RmiResponse; /** * *
*
Title:
*
* RMI远程调用接口 *
*
Description:
*
*

none *

*
* * @author Administrator * @version 1.0, 2015年8月2日 * @since record * */ public interface RmiService { /** * 远程调用 * @param request * @return * @throws Exception */ public RmiResponse process(RmiRequest request) throws Exception; }
===== RmiServiceImpl.java ===== package com.gxx.record.service.impl; import org.apache.commons.lang3.StringUtils; import com.gxx.record.dto.RmiRequest; import com.gxx.record.dto.RmiResponse; import com.gxx.record.service.RmiService; /** * *
*
Title:
*
* RMI远程调用接口实现类 *
*
Description:
*
*

none *

*
* * @author Administrator * @version 1.0, 2015年8月2日 * @since record * */ public class RmiServiceImpl implements RmiService { public static final String BUSINESS_CODE_CHECK_USER_PASSWORD = "CHECK_USER_PASSWORD"; /** * 远程调用 * @param request * @return * @throws Exception */ public RmiResponse process(RmiRequest request) throws Exception { RmiResponse response = new RmiResponse(); if(StringUtils.equals(request.getBusinessCode(), BUSINESS_CODE_CHECK_USER_PASSWORD)){ if(StringUtils.equals("gxx", request.getName())){ if(StringUtils.equals("123456", request.getPassword())){ response.setSuccess(true); response.setMessage("密码验证成功"); } else { response.setSuccess(false); response.setMessage("该用户名[" + request.getName() + "]密码有误"); } } else { response.setSuccess(false); response.setMessage("不存在该用户名[" + request.getName() + "]"); } } else { response.setSuccess(false); response.setMessage("该业务代码[" + request.getBusinessCode() + "]无效"); } return response; } }
===== RmiServiceTest.java(测试单元调用) ===== package com.gxx.record.rmi; import junit.framework.TestCase; import com.caucho.hessian.client.HessianProxyFactory; import com.gxx.record.dto.RmiRequest; import com.gxx.record.dto.RmiResponse; import com.gxx.record.service.RmiService; /** * *
*
Title:
*
* 远程调用测试类 *
*
Description:
*
*

none *

*
* * @author Administrator * @version 1.0, 2015年8月2日 * @since record * */ public class RmiServiceTest extends TestCase { /** * 测试RMI * @throws Exception */ public void testRmi() throws Exception{ String url = "http://localhost/record/hessian/rmi"; HessianProxyFactory factory = new HessianProxyFactory(); RmiService service = (RmiService)factory.create(RmiService.class, url); RmiRequest request = new RmiRequest(); request.setBusinessCode("CHECK_USER_PASSWORD"); request.setName("gxx"); request.setPassword("123456"); RmiResponse response = service.process(request); System.out.println("结果:" + response.isSuccess() + ",信息:" + response.getMessage()); } }
===== application-hessian-client.xml(spring注入调用) ===== ===== RmiController.java ===== package com.gxx.record.web.rmi; import javax.servlet.http.HttpServletRequest; import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import com.gxx.record.dto.RmiRequest; import com.gxx.record.dto.RmiResponse; import com.gxx.record.service.RmiService; /** * RmiController * * @author gxx */ @Controller @RequestMapping("/rmi/") public class RmiController { /** * 日志处理器 */ private final Logger logger = Logger.getLogger(RmiController.class); @Autowired private RmiService rmiService; @RequestMapping(value = "/preRmiFtl", method = RequestMethod.GET) public String preRmiFtl() { return "rmi/preRmiFtl"; } /** * 远程调用 * @param request * @param rmiRequest * @return */ @RequestMapping(value = "/process",produces="application/json") public @ResponseBody RmiResponse process(HttpServletRequest request, RmiRequest rmiRequest) throws Exception { logger.info("远程调用:功能号=[" + rmiRequest.getBusinessCode() + "],用户名=[" + rmiRequest.getName() + "]," + "密码=[" + rmiRequest.getPassword() + "]"); return rmiService.process(rmiRequest); } } ===== preRmiFtl.ftl ===== rmi页面
功能号:
姓名:
密码:
===== 演示 ===== {{ :分享:技术:hessian:hessian_1.png?300 |}} {{ :分享:技术:hessian:hessian_2.png?500 |}} {{ :分享:技术:hessian:hessian_3.png?300 |}} {{ :分享:技术:hessian:hessian_4.png?500 |}}