GWT 从服务器端调用 RemoteServiceServlet 方法

Posted

技术标签:

【中文标题】GWT 从服务器端调用 RemoteServiceServlet 方法【英文标题】:GWT invoke RemoteServiceServlet method from server side 【发布时间】:2017-06-20 12:13:16 【问题描述】:

我已经完成了一些使用 GWT-RPC 从客户端启动的冗长方法的工作。做某事()

假设有以下类:(复制自GWT: invoke the same RPC-methods on the server-side as on the client-side)

//MyClassService.java - client package
@RemoteServiceRelativePath("myService")
public interface MyClassService extends RemoteService
   public doSomething();


//MyClassServiceAsync.java - client package
public interface MyClassServiceAsync
   public void doSomething(AsyncCallback<Void> callback);


//MyClassServiceImpl.java - server package
public class MyClassServiceImpl extends RemoteServiceServlet implements MyClassService
   @Override
   public void doSomething()
   
      //interacts with DB and another stuff
   

现在我希望从我的 ScheduledTask 基础架构中启动完全相同的方法,但我不知道这是否可行。 ScheduledTask 基础结构位于服务器端。我几乎没有在任何语言的网络方面工作过,我迷路了。到目前为止,我已经尝试过:

    MyClassServiceImpl a = new MyClassServiceImpl();
    a.doSomething();

当它遇到第一个 doSomething() 行并调用 getServletConfig().getServletContext() 时,问题就会出现 (NullPointerException),因为它返回 null。

另外,我重写的 MyClassServiceImpl init() 方法,它从 web.xml 读取一些参数,也没有被调用。

提前谢谢!

【问题讨论】:

***.com/questions/32741692/… 很抱歉我没有看到答案。客户端/前端与我的问题无关 【参考方案1】:

与 GWT 无关,但:

1) 将您的初始化参数移出web.xml。这是一个糟糕的机制,不应该出现在 servlet 规范中。如果构建war文件,则意味着每次参数更改时都必须重新构建war文件。如果您需要为 dev、acceptance 和 prod 设置不同的参数,这意味着三个单独的 war 文件。而是在文件系统的某处放置一个属性文件。使用额外的 Java 参数启动您的 Web 容器,为自定义属性设置一个值,例如 -Dmyapp.conf=d:\\conf\\apps\\myapp.conf

2) 现在您已将参数移出 web.xml,您可以编写一个独立的类,该类从系统定义的参数文件 (System.getProperty("myapp.conf")) 中初始化自身,而不依赖于任何与 servlet 相关的内容。

3) 使用 GWT servlet、调度程序等中的类...

【讨论】:

以上是关于GWT 从服务器端调用 RemoteServiceServlet 方法的主要内容,如果未能解决你的问题,请参考以下文章

Gwt中不兼容的RemoteService异常?

java.lang.ClassNotFoundException: com.google.gwt.user.client.rpc.RemoteService

GWT 从服务器端调用 RemoteServiceServlet 方法

使用 RPC 服务创建 GWT.create 的目的是啥?

从 JSP 页面调用我的 GWT 后端方法

Gwt rpc AsyncCallbak 之后的代码不会被执行?