通过servlet属性(服务器端)或“依赖注入”将对象传递给GWT servlet

时间:2011-01-17 17:47:17

标签: java gwt tomcat servlets dependency-injection

如何将非GWT服务器端代码(例如常规服务器代码)中的对象传递给GWT“servlet”(仍为服务器端代码),特别是RemoteServiceServlet

我的GWT服务器端代码由RPC类型RemoteServiceServlet组成,我似乎无法获取引用,因此我无法在测试模式下传入我的真/假对象或添加servlet属性。我无法看到任何方式简单地传递对象(依赖注入样式),因为我无法访问Server对象,因为GWT似乎在其内部深处实例化它,那么我的选择是什么?

P.S。我不想使用像GIN / Juice这样的完整DI框架 - 我发现它们非常神奇。我只想要一种方法来访问GWT servlet的实例并将内容传递给它。

2 个答案:

答案 0 :(得分:2)

首先我要说的是,如果你还没有,我强烈建议你看this Google I/O presentation on GWT Architecture best practices。我发现它非常有用,而且大部分都来自这里。

我所做的是创建一个抽象的“dispatch”servlet,它扩展了GWT的RemoteServiceServlet。我拥有的每个模块只有一个服务(扩展我的抽象调度服务),我用它来注册一组请求处理程序。给定GWT模块的所有GWT服务调用都进入该模块的调度服务,该服务查看请求的类型并将其分派给适当的请求处理程序。实际上,请求处理程序处理先前驻留在服务servlet中的工作。除了通过在web.xml中注册更少的servlet(更不用说避免GWT需要的额外接口)来使您的生活更轻松,您可以更轻松地控制处理所有实际调度的调度程序对象。例如,您可以将您喜欢的任何实际/模拟对象传递给这些请求处理程序,因为您而不是Web容器负责实例化它们。

尽管我自己动手,但gwt-dispatch项目仍然是出于此目的。

希望这有帮助。

答案 1 :(得分:1)

Servlet容器旨在不允许直接访问它们托管的servlet;这就是为什么你发现很难获得任何类型的servlet句柄。

相反,将当前位于servlet中的代码重构为单独的请求处理程序类,并让serlvets调用它们。

出于测试目的,您可以直接将测试框架或客户端代码挂钩到请求处理程序类。这就是人们通常如何解决你遇到的问题。