实际代码位于无法访问互联网的服务器上,因此我将在此处使用伪代码来尝试解释我想要完成的任务。
我有一个名为 MyCoolHMI 的项目 其中包含一个带有多个客户端/服务器/共享子包的 GWT 网站 对于此示例,我正在 MyCoolHMI/com/src/foods/cookies/client/ShowCookieList.java
我在同一个工作区中有另一个项目,名为 IGotYerCookies,其中包含一个数据库 DAO/DTO,允许访问 the_best_cookies 表。 dao 和 dto 称为 com.src.gotyercookies.database.TheBestCookiesDAO.java 和 com.src.gotyercookies.database.TheBestCookiesDTO.java 我需要调用 TheBestCookiesDAO.getBestCookie(),它返回包含 ShowCookieList.java 中前 3 个 cookie 的列表。
为了让 ShowCookieList.java(除了类路径内容之外)使用 TheBestCookiesDAO 和 TheBestCookiesDTO,我到底需要做什么?
我已经编写了 Service 和 ServiceAsync 类,并将它们放置在 MyCoolHMI/com/src/foods/cookies/shared 中作为 DAO 和 DTO。 我还为 DAO 和 DTO 编写了 ServiceAsyncImpl,并将它们与 IGotYerCookies 中的 TheBestCookiesDAO/DTO 放在同一目录中。
我无法思考如何在 DTO 从回调返回时处理 DTO,或者如何设置安排实际调用以返回 DTO。
最终服务器是 Impl 类必须去的地方,共享是 Service 和 ServiceAsync 结束的地方。然后我必须在 web.xml 文件中添加一个条目。
最佳答案
您将无法在客户端使用这些类。最简单的解决方案是使用 GWT RPC 来访问这些对象。阅读此页http://www.gwtproject.org/doc/latest/tutorial/RPC.html关于如何使用GWT RPC。
这是您在客户端访问它的方式
BestCookiesServiceAsync service = (BestCookiesServiceAsync) GWT.create(BestCookiesService.class);
客户端部分的BestCookiesService接口(interface)
@RemoteServiceRelativePath("BestCookiesService")
public interface BestCookiesService extends RemoteService {
// methods
// Cookie should implement IsSerializable
Cookie[] getBestCookies();
}
BestCookiesServiceAsync 接口(interface)(之前的副本,但带有 AsyncCallbacks)
public interface BestCookiesServiceAsync {
// same methods but with callbacks
}
BestCookiesServiceImpl 类。它是服务器端第一个接口(interface)的实现。
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;
}
}
关于java - 在 GWT Web 应用程序中使用外部对象到底需要什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27255746/