在GWT Web应用程序中使用外部对象到底需要什么

时间:2014-12-02 17:46:54

标签: java gwt gwt-rpc

实际代码位于无法访问互联网的服务器上,因此我将在此处使用伪代码来尝试解释我想要完成的任务。

我有一个名为MyCoolHMI的项目 其中包含一个GWT网站,其中包含多个客户端/服务器/共享子包 对于此示例,我在MyCoolHMI /com/src/foods/cookies/client/ShowCookieList.java中工作

我在同一工作区中有另一个名为IGotYerCookies的项目,其中包含允许访问the_best_cookies表的数据库DAO / DTO。 dao和dto名为com.src.gotyercookies.database.TheBestCookiesDAO.java和com.src.gotyercookies.database.TheBestCookiesDTO.java 我需要调用TheBestCookiesDAO.getBestCookie(),它返回包含来自ShowCookieList.java的前3个cookie的List。

我需要做什么才能(除了类路径的东西)ShowCookieList.java使用TheBestCookiesDAO和TheBestCookiesDTO?。

我编写了Service和ServiceAsync类,并将它们放在MyCoolHMI / com / src / foods / cookies / shared中,用于DAO和DTO。 我还为DAO和DTO编写了ServiceAsyncImpl,并将它们与IGotYerCookies中的TheBestCookiesDAO / DTO放在同一目录中。

当我从回调中回来时,我无法解决如何处理DTO的问题,或者如何设置安排实际调用以获得回复...

最终服务器是Impl类必须去的地方,共享是Service和ServiceAsync结束的地方。然后我不得不在web.xml文件中添加一个条目。

1 个答案:

答案 0 :(得分:2)

您将无法在客户端使用这些类。最简单的解决方案是使用GWT RPC来访问这些对象。阅读本页http://www.gwtproject.org/doc/latest/tutorial/RPC.html,了解如何使用GWT RPC。

您可以在客户端访问它

BestCookiesServiceAsync service = (BestCookiesServiceAsync) GWT.create(BestCookiesService.class);

客户端部分的BestCookiesService接口

@RemoteServiceRelativePath("BestCookiesService")
public interface BestCookiesService extends RemoteService {

   // methods
   // Cookie should implement IsSerializable
   Cookie[] getBestCookies(); 

}

BestCookiesServiceAsync接口(以前的副本但使用AsyncCallbacks)

public interface BestCookiesServiceAsync {

    // same methods but with callbacks
}

BestCookiesServiceImpl类。它是服务器端第一个接口的实现。

public class BestCookiesServiceImpl extends RemoteServiceServlet implements BestCookiesService {

    // you can access your DAOs here
    @Override
    public Cookie[] getBestCookies() {
         BestCookiesDAO dao = getBestCookiesDAO();
         BestCookiesList list = dao.getBestCookies();

         Cookie[] array = new Cookie[list.size()];
         for (int i = 0; i < list.size(); i++) {
             array[i] = new Cookie(list.get(i).getIngredients());
         }

         return array;
    }

}