【问题标题】:Load JSON File on the server side in GWT在 GWT 中的服务器端加载 JSON 文件
【发布时间】:2011-09-12 00:26:41
【问题描述】:

我有一个 GWT 应用程序,我在服务器端加载了一个 .json 文件,如下所示:

InputStream source = new FileInputStream(testFile.json); 

当我直接在 Eclipse 中启动应用程序时,这非常有效。但是,当我在 tomcat 上部署应用程序时,它不起作用。看起来,应用程序正在 tomcat (???) 的 bin 文件夹中查找该文件。但是,正确的路径是 tomcat/webapps/myProject/testFile.json。

有谁知道如何获得正确的路径(无需编码)?

【问题讨论】:

    标签: gwt tomcat


    【解决方案1】:

    FileInputStream 根据当前工作目录定位文件,这又取决于您启动应用程序的方式,因此无法从应用程序内部控制。对于web应用,需要ServletContext#getResourceAsStream()而不是FileInputStream来获取web应用自己的资源。它采用相对于 Web 内容文件夹的路径。

    InputStream input = getServletContext().getResourceAsStream("/testfile.json");
    // ...
    

    另见:

    【讨论】:

    • 你的意思是 'servletContext' 是调用 getResourceAsStream(..) 函数的类的文件名吗?
    • 不,这是ServletContext 类。另请参阅我的答案中的 ServletContext#getResourceAsStream() 链接。在从Servlet 扩展的类中,它可以通过继承的getServletContext() 方法获得。
    • 所以,如果您的 servlet 类从 RemoteServiceServlet 扩展,那么您应该可以通过 getServletContext() 获得它。
    • 如果我需要一个不继承自 RemoteServiceServlet 的类中的路径怎么办?我不想通过所有方法调用传递 ServletContext。只是在另一个类中实例化一个新的 RemoteServiceServlet 似乎是非常错误的:s
    • 我不做 GWT,但 Google 告诉我 Spring 在通过接口提供这些信息方面非常有帮助。作为一种完全不同的选择,您也可以将该文件放在类路径中(当然,如果它在没有 GWT servlet 干预的情况下从未被请求过),那么您可以从上下文的类加载器中获取它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多