我正在使用 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>
答案 0 :(得分:1)
我碰巧忽略了一个解决我问题的重要事实:
所以我只是在我的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概念,但对于你的用例,我会说这是一个很大的开销。