快速业务通道

Hessian源码分析和Hack --让Hessian携带远程调用端的信息 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-16
ss.getInterfaces();    if (interfaces.length == 1)     return interfaces[0];    return findRemoteAPI(implClass.getSuperclass());   }   private Class loadClass(String className)    throws ClassNotFoundException   {    ClassLoader loader = Thread.currentThread().getContextClassLoader();    if (loader != null)     return Class.forName(className, false, loader);    else     return Class.forName(className);   }   private void init(Object service)    throws ServletException   {    if (service instanceof Service)     ((Service) service).init(getServletConfig());    else if (service instanceof Servlet)     ((Servlet) service).init(getServletConfig());   }   /**   * Execute a request. The path-info of the request selects the bean.   * Once the bean''s selected, it will be applied.   */   public void service(ServletRequest request, ServletResponse response)    throws IOException, ServletException   {    HttpServletRequest req = (HttpServletRequest) request;    HttpServletResponse res = (HttpServletResponse) response;    if (! req.getMethod().equals("POST")) {     res.setStatus(500, "Hessian Requires POST");     PrintWriter out = res.getWriter();     res.setContentType("text/html");     out.println("<h1>Hessian Requires POST</h1>");     return;    }    String serviceId = req.getPathInfo();    String objectId = req.getParameter("id");    if (objectId == null)     objectId = req.getParameter("ejbid");    ServiceContext.begin(req, serviceId, objectId);    try {     InputStream is = request.getInputStream();     OutputStream os = response.getOutputStream();     Hessian2Input in = new Hessian2Input(is);     AbstractHessianOutput out;     SerializerFactory serializerFactory = getSerializerFactory();     in.setSerializerFactory(serializerFactory);     int code = in.read();     if (code != ''c'') {    // XXX: deflate    throw new IOException("expected ''c'' in hessian input at " + code);     }     int major = in.read();     int minor = in.read();     if (major >= 2)    out = new Hessian2Output(os);     else    out = new HessianOutput(os);     out.setSerializerFactory(serializerFactory);     if (objectId != null)    _objectSkeleton.invoke(in, out);     else    _homeSkeleton.invoke(in, out);     out.close();    } catch (RuntimeException e) {     throw e;    } catch (ServletException e) {     throw e;    } catch (Throwable e) {     throw new ServletException(e);    } finally {     ServiceContext.end();    }   } }

Hessian源码分析和Hack --让Hessian携带远程调用端的信息(3)

时间:2011-06-25 iteye

先看init()函数,功能还是一样,初始话一些东西,读入init-param的内容,并且load这些init-param的class

主要的还是service()函数

在service函数里边会获得request和response对象的输入和输出流,用来构造Hessian2Input和Hessia

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号