1

我正在使用GWT,并且希望能够incrementProduct(String productName)通过在浏览器中键入以下 URL 来调用主 RemoteServiceServlet 中的方法:

http://mywebshop.appspot.com/increment?name=pillow

为了处理这个请求,我创建了以下 HttpServlet:

public class IncrementServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        System.out.println("IncrementServlet called!");
        String name = request.getParameter("name");
        // Call MyRemoteServiceServlet.incrementProduct(name) somehow
    }
}

并将其添加到 web.xml:

<servlet>
    <servlet-name>IncrementServlet</servlet-name>
    <servlet-class>x.y.z.IncrementServlet</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>IncrementServlet</servlet-name>
    <url-pattern>/increment</url-pattern>
</servlet-mapping>
  • 问题1:这是一种明智的做法吗?
  • 问题 2:如何从 HttpServlet 调用 incrementProduct()?
4

2 回答 2

1

我碰巧忽略了解决我的问题的一个重要事实:

  • RemoteServiceServlet继承HttpServlet

所以我只是在我的 RemoteServiceServlet 中实现了 doGet() ,如下所示:

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException {

    switch (req.getServletPath()) {
    case "/increment":
        incrementProduct(req.getParameter("name"));
        break;
    }
}

并将 web.xml 中的 IncrementServlet 替换为:

<servlet-mapping>
    <servlet-name>MyRemoteServiceServlet</servlet-name>
    <url-pattern>/increment</url-pattern>
</servlet-mapping>

这允许我通过在浏览器中输入此 URL 来调用 incrementProduct(...):

http://mywebshop.appspot.com/increment?name=pillow

这正是我想要的!根本不需要另一个HttpServlet :)

于 2013-05-22T09:08:20.690 回答
0

问题 1一般来说,作为经典的 servlet 代码,这很好。作为 GWT 应用程序,它不使用来自 GWT 的任何东西。

问题2 GWT 会生成所有的servlet 代码,你不必将它包装在另一个servlet(IncrementServlet)中。要将其转换为 GWT 应用程序,您必须在客户端入口点 (onModuleLoad()) 上实现 AsyncCallback,而在服务器端您必须像之前那样实现 RemoteServiceServlet,现在缺少的是绑定部分 - 一个接口定义扩展 RemoteService 与与您的服务方法具有相似签名的方法。通常,任何 IDE 中的 GWT 插件都会生成绑定部分,如果没有,您可以手动完成。请参阅带有分步指南的 GWT 文档。https://developers.google.com/web-toolkit/doc/1.6/DevGuideServerCommunication

请注意,异步 rpc 有点旧,并且有一些缺点。GWT 现在有 RequestFactory 概念,但对于您的用例,我会说这是一个很大的开销。

于 2013-05-21T10:51:45.487 回答