hessian基于HessianServlet方式实现,加入servlet动态代理机制!
来源:互联网 发布:遗传算法matlab 多参数 编辑:程序博客网 时间:2024/06/06 20:18
最近因为项目中需要基于hessian进行RPC的服务消息传输应用!实现方式因为hessian新版不能支持spring老的版本原因,导至无法应用集成spring 的HessianServiceExporter实现处理。只能实现HessianServlet方式了!
但考滤到应用中可能涉及到多业务需要实现,涉及到多HessianServlet.这样配置很不方便!并通过网上参考定义以下动态代理servlet!
private static final Log log = LogFactory.getLog(HessianServletProxyBean.class);
public void init() throws ServletException {
log.info("HessianServletProxyBean init.....");
String targetBean = getInitParameter("targetBean");
getServletBean(targetBean);
Map instanceMap=InstanceServletPool.get_classPool();
if(instanceMap!=null&&instanceMap.size()>0){
Iterator it = instanceMap.entrySet().iterator();
while(it.hasNext()){
Map.Entry<String, Servlet> servletBeanEntry = (Entry<String, Servlet>) it.next();
Servlet servletBean = servletBeanEntry.getValue();
servletBean.init(getServletConfig());
}
}
}
public void service(ServletRequest req, ServletResponse res)throws ServletException, IOException {
HttpServletRequest req1 = (HttpServletRequest) req;
//hessian接口 调用时url需要写入Spring中对应beanName,如:http://localhost:80/hessian/remote/basicService2.h
String requUrl=req1.getRequestURL().toString();
log.info(requUrl);
String servletBeanName=requUrl.substring(requUrl.lastIndexOf("/")+1, requUrl.lastIndexOf("."));
InstanceServletPool.get(servletBeanName).service(req, res);
}
/**
* 通过bean名称初始化多个servlet并放入实例的servlet池中
* @param targetBean 逗号分隔bean名称
*/
private void getServletBean(String targetBean) {
ApplicationContext context = WebApplicationContextUtils.getRequiredWebApplicationContext(this.getServletContext());
if(targetBean!=null&&!targetBean.trim().equals("")){
String servletBeans[]=targetBean.split(",");
for(int i=0;i<servletBeans.length;i++){
Servlet servletBean=(Servlet) context.getBean(servletBeans[i]);
InstanceServletPool.put(servletBeans[i], servletBean);
}
}
}
web.xml中配置:
<!-- 代理 hessian的servlet调用 -->
<servlet>
<servlet-name>HessianServletProxyBean</servlet-name>
<servlet-class>com.web.HessianServletProxyBean</servlet-class>
<init-param>
<param-name>targetBean</param-name>
<param-value>basicService,basicService2</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>HessianServletProxyBean</servlet-name>
<url-pattern>*.hes</url-pattern>
</servlet-mapping>
============================================================
clientTest.java
public static void main(String[] args) throws Exception{
// TODO Auto-generated method stub
//String url = "http://localhost:80/hessian/remote/basicService.hes";
String url = "http://localhost:80/hessian/remote1/basicService2.hes";
HessianProxyFactory factory = new HessianProxyFactory();
BasicAPI basic = (BasicAPI) factory.create(BasicAPI.class, url);
System.out.println("hello(): " + basic.hello());
System.out.println("getUserVo(): "+basic.getUserVo());
System.out.println("getUserVos(): "+basic.getUserVos());
}
================================================================================
private String _greeting = "Hello, world2222222222222222222222222222222222";
private DSA dsaService;
public void setGreeting(String greeting){
_greeting = greeting;
}
public String hello(){
dsaService.printlnSignature();
return _greeting;
}
public UserVo getUserVo(){
UserVo vo = new UserVo();
vo.setId("001222222222222222222222");
vo.setName("我是汉字22222222222222222");
vo.setEmail("hanzi@sina.com22222222222222222222222222");
return vo;
}
public List<UserVo> getUserVos() {
List<UserVo> vos = new ArrayList<UserVo>();
for (int i = 0; i < 10; i++) {
UserVo vo = new UserVo();
vo.setId("00222222222222222222222222"+i);
vo.setName("我是汉字2222222222222222222222"+i);
vo.setEmail("hanzi22222222222222222222222"+i+"@sina.com2222222222222222222");
vos.add(vo);
}
return vos;
}
public DSA getDsaService() {
return dsaService;
}
public void setDsaService(DSA dsaService) {
this.dsaService = dsaService;
}
}
======================================================================
spring配置:
<bean id="dsaService" class="com.dsa.security.DSAService">
<property name="publicKey" value="classpath:deciphering.publickey" />
</bean>
<bean id="basicService" class="com.baijob.search.BasicService"></bean>
<bean id="basicService2" class="com.baijob.search.BasicService2">
<property name="dsaService" ref="dsaService"/>
</bean>
完整项目下载地址: http://download.csdn.net/detail/wanj78/4015967
- hessian基于HessianServlet方式实现,加入servlet动态代理机制!
- Hessian源码分析--HessianServlet
- 动态代理实现机制
- JAVA的动态代理机制及Spring的实现方式
- JAVA的动态代理机制及Spring的实现方式
- JAVA的动态代理机制及Spring的实现方式
- JAVA的动态代理机制及Spring的实现方式
- Java的动态代理机制和Spring的实现方式
- JAVA的动态代理机制及Spring的实现方式
- Java的动态代理机制及Spring的实现方式
- Java的动态代理机制及Spring的实现方式
- Java 动态代理实现机制
- java动态代理实现机制
- 基于hessian实现webService
- JAVA动态代理实现方式
- 动态代理方式实现AOP
- 动态代理方式实现AOP
- 动态代理方式实现AOP
- 不用配置文件的wcf实例
- 拖延不是病
- 在flash cs5.5中配置flashplayer11 AIR3 Alternativa3D 8
- Java项目经验
- Draft
- hessian基于HessianServlet方式实现,加入servlet动态代理机制!
- Linux下将Oracle11gR2配置成自启动及手动启动方法
- GEF outline中添加菜单
- Python正则表达式指南
- java中final的介绍详解
- MSSQL获取当前插入的ID号及在高并发的时候处理方式
- CMOS Sensor的调试经验
- “没有定义根文件系统,请回到分区菜单以修正此错误”
- Windows下编译pydasm