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 方法的主要内容,如果未能解决你的问题,请参考以下文章
java.lang.ClassNotFoundException: com.google.gwt.user.client.rpc.RemoteService