And*_*ech 46 java jboss web-services inputstream
我在Java Web应用程序中有以下结构:
TheProject
-- [Web Pages]
-- -- [WEB-INF]
-- -- -- abc.txt
-- -- index.jsp
-- [Source Packages]
-- -- [wservices]
-- -- -- WS.java
Run Code Online (Sandbox Code Playgroud)
在WS.java,我在Web方法中使用以下代码:
InputStream fstream = this.getClass().getResourceAsStream("abc.txt");
Run Code Online (Sandbox Code Playgroud)
但它始终返回null.我需要从该文件中读取,并且我读到如果您将文件放入WEB-INF,您可以使用它来访问它们getResourceAsStream,但该方法总是返回一个null.
我可能做错了什么想法?
顺便说一句,奇怪的是这是有效的,但是在我Clean and Build对项目执行了一次后,它突然停止了工作:/
Jar*_*uba 40
据我所知,该文件必须'this'位于类所在的文件夹中,即不在WEB-INF/classes嵌套中甚至更深层嵌套(除非您在默认包中写入):
net/domain/pkg1/MyClass.java
net/domain/pkg1/abc.txt
Run Code Online (Sandbox Code Playgroud)
将文件放入java源代码应该可以工作,编译器将该文件与类文件一起复制.
Pas*_*ent 30
Class#getResourceAsStream(String)在类路径中搜索对类加载器和资源的委托的调用.换句话说,你当前的代码将无法正常工作,你应该把abc.txt在WEB-INF/classes,或者WEB-INF/lib如果打包在一个jar文件.
或使用ServletContext.getResourceAsStream(String)该允许servlet容器来使资源可从任何地点一个servlet,而无需使用一个类加载器.所以从Servlet中使用它:
this.getServletContext().getResourceAsStream("/WEB-INF/abc.txt") ;
Run Code Online (Sandbox Code Playgroud)
但有没有办法可以从我的Web服务调用getServletContext?
如果您使用的是JAX-WS,那么您可以WebServiceContext注入:
@Resource
private WebServiceContext wsContext;
Run Code Online (Sandbox Code Playgroud)
然后得到ServletContext它:
ServletContext sContext= wsContext.getMessageContext()
.get(MessageContext.SERVLET_CONTEXT));
Run Code Online (Sandbox Code Playgroud)
Mik*_*ell 22
代替
InputStream fstream = this.getClass().getResourceAsStream("abc.txt");
Run Code Online (Sandbox Code Playgroud)
使用
InputStream fstream = this.getClass().getClassLoader().getResourceAsStream("abc.txt");
Run Code Online (Sandbox Code Playgroud)
这样它将从根目录开始,而不是从当前调用类的路径看
我认为这样你可以从"任何地方"(包括服务器位置)获取文件,而你不需要关心放在哪里.
通常不得不关心这些事情.
Thread.currentThread().getContextClassLoader().getResourceAsStream("abc.properties");
Run Code Online (Sandbox Code Playgroud)
我不知道这是否适用于JAX-WS,但是JAX-RS我能够通过注入ServletContext中,然后就可以调用的getResourceAsStream()来访问文件:
@Context ServletContext servletContext;
...
InputStream is = servletContext.getResourceAsStream("/WEB-INF/test_model.js");
Run Code Online (Sandbox Code Playgroud)
请注意,至少在GlassFish 3.1中,路径必须是绝对路径,即以斜线开头.更多信息:如何使用jax-rs属性文件?
| 归档时间: |
|
| 查看次数: |
108685 次 |
| 最近记录: |