Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用jax-rs的动态web项目的相对路径_Java_Jax Rs - Fatal编程技术网

Java 使用jax-rs的动态web项目的相对路径

Java 使用jax-rs的动态web项目的相对路径,java,jax-rs,Java,Jax Rs,我想在代码中使用app_config文件,并想在服务器中启动项目时加载它 package test.controller; import java.nio.file.Files; import java.nio.file.Paths; import java.sql.Connection; import javax.ws.rs.ApplicationPath; import javax.ws.rs.core.Application; import com.fasterxml.jackson

我想在代码中使用app_config文件,并想在服务器中启动项目时加载它

package test.controller;

import java.nio.file.Files;
import java.nio.file.Paths;
import java.sql.Connection;

import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import com.mysql.cj.core.util.StringUtils;

import test.config.AppConfig;
import test.connection.jdbc.JDBCConnection;

@ApplicationPath("webapp")
public class RestApplication extends Application{

    public static final String CONFIG_FILE = "C:\\Users\\chakrabo\\eclipse-workspace\\HelloWorld\\config\\src\\main\\resources\\app-config.xml";
    private static ObjectMapper objectMapper = new XmlMapper();
    public static AppConfig appConfig = getConfig();
    public static Connection con = JDBCConnection.getConnection(appConfig.getDbUrl(), 
            appConfig.getUsername(), appConfig.getPassword());

    private static AppConfig getConfig() {
        try {
            AppConfig config = objectMapper.readValue(
            StringUtils.toString(Files.readAllBytes(Paths.get(CONFIG_FILE))), AppConfig.class);
            return config;
        } catch(Exception e) {
            System.out.println("RestApplication : getConfig " +e.getMessage());
            return null;
        }
    }


}
使用实际路径,我可以读取此应用程序配置文件。但是我不知道如何根据相对路径来阅读它

上下文应该是HelloWorldproject名称,但它不起作用。即使我把这个配置文件夹放在webcontent和WEB-INF中,它仍然会显示文件未找到异常


有人能帮我吗。

要获取文件路径,请尝试使用ServletContext

在应用程序中设置字段全局实例变量,如下所示:

@Context
ServletContext servletContext;
然后使用

String path = servletContext.getRealPath("/WEB-INF/app-config.xml");
这利用了JAX-RS的内置依赖注入机制

您需要这样的Servlet API

<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>javax.servlet-api</artifactId>
  <version>3.0.1</version>
  <scope>provided</scope>
</dependency>

您可以使用以下选项:

RestApplication.getClass().getClassLoader().getResourceAsStream("app-config.xml")));

有了它,您可以从src/main/resources文件夹加载文件

它必须位于WebContent文件夹中,才能被JAX检测到。这要求它位于WebContent文件夹WEB-INF中,具体地说是数据库。我已经在webcontent中添加了配置文件。现在我无法在我的RestApplication类中导入ServletContext。org.glassfish.jersey.core jersey客户端版本:2.22.1 org.glassfish.jersey.containers jersey容器servlet版本:2.22.1这些是我的maven依赖项。我还需要别的罐子吗add@subro是的,Servlet API。我已经用正确的答案更新了答案Dependency@subro你犯了什么错误。是在编译时,还是在运行时