我想从同一项目中的Web服务中的方法访问WebContent文件夹中的文件。例如:
@WebMethod
public String test() {
File configFile = new File("config.xml");
return configFile.getAbsolutePath();
}
返回“/usr/share/glassfish3/glassfish/domains/domain1/config/config.xml”。我想到目录“/ usr / share / glassfish3 / glassfish / domains / domain1 / applications / my_project_name /”文件夹中的文件。我该怎么做到?
答案 0 :(得分:1)
将以下参数添加到Web服务类:
@Context
ServletContext context;
然后,假设您的config.xml
文件位于WebContent
文件夹中,您可以通过调用方法context.getRealPath(String)
来获取其绝对路径。使用您的示例代码:
@WebMethod
public String test() {
File configFile = new File(context.getRealPath("config.xml"));
return configFile.getAbsolutePath();
}
或直接,不经过File对象:
@WebMethod
public String test() {
return context.getRealPath("config.xml");
}
答案 1 :(得分:0)
从您的代码中,我了解到您的代码是JAXWS Web服务。
在jaxws中,你可以得到HttpServletRequest,HttpServletResponse,ServletContext,
在您的webservice类中有一个私有变量,并以这种方式对其进行注释
@Resource
private WebServiceContext context;
然后在您的方法中,您可以通过这种方式获取ServletContext
ServletContext servletContext =
(ServletContext) context.getMessageContext().get(MessageContext.SERVLET_CONTEXT);
从servletContext,您可以获取路径。
假设您需要获取HttpServletRequest,您可以通过这种方式获取它
HttpServletRequest request =
(HttpServletRequest) context.getMessageContext().get(MessageContext.SERVLET_REQUEST);
您可以获得应用的上下文路径,例如
request.getContextPath() ;
答案 2 :(得分:0)
我使用的最佳方法是:
Thread.currentThread().getContextClassLoader().getResource("myFile.txt").getPath()
这给出了放置在WebApp的myFile.txt
文件夹内/WEB-INF/classes/
目录中的任何文件WebContent
的路径。
在Eclipse JEE环境中,您需要将myFile.txt
文件(可能要在Web服务中读取)保存在src
文件夹中,以便将其传输到/WEB-INF/classes/
部署人员创建的文件夹。