如何从Web服务方法访问WebContent文件夹

时间:2012-03-26 09:20:45

标签: java jax-ws

我想从同一项目中的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 /”文件夹中的文件。我该怎么做到?

3 个答案:

答案 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/部署人员创建的文件夹。