在eclipse c2dm连接项目中,为您生成c2dm-server.jar并添加到您的项目中。如果你挖掘它的源代码,你会发现它与原始chrometophone项目的源代码几乎相同:
但是有一个很大的区别:InputStream行改为:
InputStream is = this.getClass().getClassLoader()
.getResourceAsStream("/dataMessagingToken.txt");
要
InputStream is = servletContext.getResourceAsStream("/dataMessagingToken.txt");
最大的区别在于你现在需要一个ServletContext,而不仅仅是任何类从战争中获取dataMessagingToken.txt资源。我问的唯一原因是因为我正在尝试恢复旧的样式行,因此不需要ServletContext来获取该资源,但无论出于何种原因,该行不再有效且它永远无法找到该文件。 (很明显,我已经尝试将该文件放在war的基目录中,因为默认项目有它,并且也像其他人建议的那样放在/ WEB-INF / classes目录中)
最后一件事,对于那些想知道我为什么要这样做而不只是传递ServletContext的人。这是因为我想从任务队列发送而不是从任何用户交互发送。所以我可能会以错误的方式解决这个问题,但我觉得我很接近。
谢谢!
答案 0 :(得分:1)
你可以解决这个问题,或者我认为你会发现任务队列中的任务是作为servlet执行的,并且还有一个ServletContext。
此外,如果没有通过您的通话传递,您应该可以通过以下方式获取它:
getThreadLocalRequest()。的getSession()。getServletContext()方法