longgangbai 发表于 2013-2-7 08:58:18

远程技术的研究

服务方法在用户请求调用处理用户的信息
    public void service(ServletRequest request, ServletResponse response)
      throws IOException, ServletException
    {
      HttpServletRequest req = (HttpServletRequest)request;
      HttpServletResponse res = (HttpServletResponse)response;
      由此处代码可以知道客户端请求必须使用post方式,否则报错500,显示必须使用post方式发送
      if(!req.getMethod().equals("POST"))
      {
            res.setStatus(500, "Burlap Requires POST");
            PrintWriter out = res.getWriter();
            res.setContentType("text/html");
            out.println("<h1>Burlap Requires POST</h1>");
            return;
      }
      使用线程锁用于处理多个用户的操作
synchronized(_service)
      {
            创建远程客户端访问的骨架
            if(_skeleton == null)
                _skeleton = new BurlapSkeleton(_service);
            String serviceId = req.getPathInfo();
            String objectId = request.getParameter("ejbid");
            设置服务的处理对象的方法
            if(_service instanceof Service)
                ((Service)_service).setRequestObject(request, serviceId, objectId);
            java.io.InputStream is = request.getInputStream();
            java.io.OutputStream os = response.getOutputStream();
            将接受到的请求信息和响应信息转换
            BurlapInput in = new BurlapInput(is);
            BurlapOutput out = new BurlapOutput(os);
            try
            {
                  调用响应的骨架的方法
                _skeleton.invoke(in, out);
            }
            catch(Throwable e)
            {
                throw new ServletException(e);
            }
      }
    }

    private Class _serviceClass;
    private Object _service;
    private BurlapSkeleton _skeleton;
    private boolean _isService;
}
下面提供关于Burlap服务类的源代码
此类定义的信息类似一个Burlap的”生命周期“!!!!!!!
关于此处的"生命周期"纯属笔人个人看法?有什么不妥之处请不惜赐教??谢谢!
服务代理工厂类
public class BurlapProxyFactory   implements ObjectFactory
备注此类打开远程连接URLConnection使用将用户名和密码一起使用base64加密发送到服务端。

远程模型类BurlapRemote类必须知道URL 和type

服务类:此类类似HttpServlet中接口类Servlet
package com.caucho.services.server;

import javax.servlet.*;
服务类接口的
public interface Service
{
   
   在Servlet启动时初始化一次
    public abstract void init(ServletConfig servletconfig)
      throws ServletException;
   在客户端每一次请求时调用此方法处理服务信息
    public abstract void setRequestObject(ServletRequest servletrequest, String s, String s1)
      throws ServletException;
    在服务销毁时使用
    public abstract void destroy();
}


页: [1]
查看完整版本: 远程技术的研究