繁体   English   中英

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

[英]Relative path for dynamic web project using 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.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;
        }
    }


}

使用实际路径,我可以读取这个 app-config 文件。 但我不知道如何根据相对路径读取它。

在此处输入图片说明

上下文应该是 HelloWorld(project name) 但它不起作用。 即使我将此配置文件夹放在 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文件夹加载文件

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM