【问题标题】:Cannot get context-param in web.xml from Spring Boot Controller无法从 Spring Boot Controller 获取 web.xml 中的上下文参数
【发布时间】:2017-07-04 02:49:12
【问题描述】:

我有一个简单的 webapp,它使用 Spring Boot web 和 我有一个 web.xml 文件 src/main/webapp/WEB-INF 包含这样的上下文参数

<context-param>
    <description>Directory containing the configuration files</description>
    <param-name>confDir</param-name>
    <param-value>/opt/rasdaman/etc/</param-value>
</context-param>

在 Servlet 控制器中,我可以获得 Servlet 上下文

@Autowired
private ServletContext servletContext;  

但是当我尝试获取参数时,它返回 null

servletContext.getInitParameter("confDir");

当我试图获取 servletContext 的真实路径时

servletContext.getRealPath(File.separator);

它返回

 "..../src/main/webapp/"

如何获取 web.xml 中的配置变量?

谢谢

【问题讨论】:

  • 为什么不把你的参数放在属性文件中?
  • 这是一个使用 web.xml 配置的遗留源,所以我无法移动到其他文件。

标签: java xml spring spring-mvc servlets


【解决方案1】:

感谢sudakatux 问题是我使用 jar 部署 Spring Boot 而不是战争然后无法从 web.xml 读取

关注here改war并正常用tomcat EE部署

【讨论】:

    【解决方案2】:

    我自己没试过,但是。如果您让控制器实现 ServletContextAware,我认为您可以从以下位置获取上下文参数:http://docs.spring.io/spring/docs/3.0.x/javadoc-api/org/springframework/web/context/ServletContextAware.html

    这个想法是

    public class MyCoolController implements ServletContextAware {
    
    
        @Override
        setServletContext(ServletContext servletContext) {
            String confDir = servletContext.getInitParameter("confDir");
        }
    }
    

    试一试

    【讨论】:

    • 您是否将应用程序部署为战争文件?
    • 这是一个 jar 文件,因为 Spring Boot 像这样启动 public static void main(String[] args) { ApplicationContext app = SpringApplication.run(ApplicationMain.class, args);
    • 你应该看看这个然后spring.io/guides/gs/convert-jar-to-war
    • 我尝试更改为 war 并将依赖项添加为 maven 的 docs.spring.io/spring-boot/docs/current/reference/htmlsingle/…,但对于 web.xml 中的配置变量仍然为 null。
    • 当你的战争被打包时。您是否在相应目录的 war 文件中看到您的 web.xml?
    猜你喜欢
    • 2014-03-16
    • 1970-01-01
    • 2010-11-06
    • 1970-01-01
    • 2018-11-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-26
    • 1970-01-01
    相关资源
    最近更新 更多