如何从HttpServlet调用RemoteServiceServlet中的方法?

时间:2013-05-21 08:46:53

标签: java gwt servlets

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

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()?

2 个答案:

答案 0 :(得分: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:

替换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:)

答案 1 :(得分: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概念,但对于你的用例,我会说这是一个很大的开销。