序列化代理对象以访问远程servlet

时间:2011-03-31 23:12:13

标签: java servlets rmi

我正在尝试编写一个代理,用于从Java中的本地HttpServlet容器调用远程servlet对象,而且我在某种程度上坚持使用Howtos。

在第一步,我尝试编写一个扩展Servlet和Remote的接口,以便在服务器端我可以将其注册到我的servlet容器并使用它作为代理来序列化对servlet对象的调用在客户端上。类似下面的代码:

public interface IServletRemote extends Remote, Servlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws RemoteException;

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws RemoteException;

    public void init() throws RemoteException;

    public void init(ServletConfig config) throws ServletException, RemoteException;

    public void destroy() throws RemoteException;
}

我不能过去构建接口,因为上面的代码导致以下错误,这是合理的知道Java的多态/继承约束:

RemoteException与Servlet.init(ServletConfig)中的throws子句不兼容

我不完全确定是否/如何找到从本地servlet容器远程调用servlet对象的解决方案。换句话说,考虑到HttpServletRequest,HttpServletResponse等的序列化要求,我想知道我想要实现的是否可行?

任何提示都受到高度赞赏。

1 个答案:

答案 0 :(得分:0)

您不需要使远程接口实现Servlet。相反,只是模仿远程接口中的方法。然后编写一个小的servlet存根类,它将所有调用委托给远程代理。很明显,你需要将RemoteExceptions包装在可以从Servlet方法抛出的其他异常中。

如果你想以通用的方式做这件事,那么你可以实现一个java.lang.Proxy处理程序,为你做代理(将Servlet接口方法与相关的Remote版本相匹配)。