ServletContext.getResource从lib中获取资源

时间:2014-10-08 07:18:20

标签: java tomcat java-ee jar

我有一个jar文件test.jar,放在WEB-INF / lib中,并在其根目录中包含一个文件:

/
|- test.jsp

现在我想从我的代码中的某个地方访问这个文件:

this.getServletContext().getResource("/test.jsp");

但是结果总是为null,尽管getResource的文档声明也搜索了WEB-INF / lib中的jar文件:

http://docs.oracle.com/javaee/6/api/javax/servlet/ServletContext.html#getResource%28java.lang.String%29

我错过了什么或为什么我不能获得资源?

2 个答案:

答案 0 :(得分:0)

您已经提供了指向javadoc的链接,引用了相关部分:

  

路径必须以/开头,并且被解释为相对于当前上下文根,或相对于JAR文件的/META-INF/resources目录在Web应用程序中/WEB-INF/lib目录。

因此它被解释为相对于jar文件中的/META-INF/resources文件夹。

但是,您使用标记表明您正在使用Tomcat。 ServletContext.getResource()的Tomcat实现有些不同。它甚至没有提到在jar文件中搜索资源。

建议:如果要使用ServletContext.getResource()访问资源,请不要将资源放在jar文件中。如果您确实需要将它们放入jar文件中,那么请使用Class.getResource()方法,例如将一个可选的空类放入jar文件中,并使用它来访问/加载资源,例如:

Jar内容:

/
|- SomeClass.class
|- test.jsp

访问test.jsp的Java代码:

SomeClass.class.getResource("/test.jsp"); // or it can even be "test.jsp"

答案 1 :(得分:0)

您可以使用线程的类加载器将文件设为<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div class="addelem"> <table class="tbl1"> <tr> <td> <input id="empid" type="text" placeholder="EmpId"> </td> <td> <input id="name" type="text" placeholder="Name"> </td> <td> <input id="pd" type="number" placeholder="Pds Delivered"> </td> <td> <input id="unp" type="number" placeholder="Unplanned leaves"> </td> <td> <input id="rsp" type="number" placeholder="Response Time"> </td> </tr> </table> <button id="submit">Submit</button> <button id="cancel">Cancel</button> </div>,如下所示:

display

方法InputStream适用于类路径中的任何文件,无论它位于目录中还是位于JAR内。