【问题标题】:Access to ServletContext in Jersey [duplicate]在泽西岛访问 ServletContext [重复]
【发布时间】:2013-11-08 12:35:13
【问题描述】:

我正在推进 jee 编程。从基本教程中,如果我想在扩展 HttpServlet 的类中阅读我的应用程序目录,我使用 getServletContext().getRealPath(relativePath)。但就我而言,我使用泽西岛进行序列化。 Servlet 未扩展 HttpServlet,请查看 image 。我主要是前端程序员,所以这可能是个愚蠢的问题,但我想要简单的静态/实用方法来解析我的 webapp 中不同静态资源的路径。我在Tomcat上运行它。一个也是唯一的 servlet,如图所示。

【问题讨论】:

    标签: java tomcat servlets jersey


    【解决方案1】:

    根据规范(JAX-RS 1.1,第 6.1 章),将其添加到您的资源类中:

    @Context
    private ServletContext application;
    

    完全合格的名称是:

    import javax.servlet.ServletContext;
    import javax.ws.rs.core.Context;
    

    【讨论】:

    • 上下文绑定由容器管理,所以如果我尝试使用它,servlet 构造函数或静态方法上下文为空。
    【解决方案2】:

    webApp/WEB-INF/classes 目录的绝对路径可以访问如下:

    URL resource = getClass().getResource("/");
    String path = resource.getPath();
    

    这将返回一个像这样的绝对路径:

    /C:/SERVERS/x/y/x/yourApp/WEB-INF/classes
    

    从这里你可以得到 webapp 目录的路径:

    path = path.replace("WEB-INF/classes/", "");
    

    现在,如果您的静态资源直接位于 webapp 下,您可以使用以下命令访问该资源:

    path = path + "resource_name"; 
    

    【讨论】:

    • 看起来简单而正确。我稍后会尝试。现在我发现我的资源必须在 webapp 目录之外。
    猜你喜欢
    • 1970-01-01
    • 2014-10-06
    • 1970-01-01
    • 2011-08-02
    • 2017-05-13
    • 2013-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多