我正在尝试编写一个代理,用于从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等的序列化要求,我想知道我想要实现的是否可行?
任何提示都受到高度赞赏。
答案 0 :(得分:0)
您不需要使远程接口实现Servlet。相反,只是模仿远程接口中的方法。然后编写一个小的servlet存根类,它将所有调用委托给远程代理。很明显,你需要将RemoteExceptions包装在可以从Servlet方法抛出的其他异常中。
如果你想以通用的方式做这件事,那么你可以实现一个java.lang.Proxy处理程序,为你做代理(将Servlet接口方法与相关的Remote版本相匹配)。