【问题标题】:Getting ServletContext Attribute "javax.servlet.context.tmpdir" in Controller在控制器中获取 ServletContext 属性“javax.servlet.context.tmpdir”
【发布时间】:2023-04-01 18:11:01
【问题描述】:

我真的是 Spring 和 Spring MVC 的新手,我正在开发一种上传文件的测试程序,将其写入 servlet 的临时工作目录,然后将该文件传递给程序的其余部分(这是一个 Spring Batch Job 并且工作正常)。我目前的问题是弄清楚如何在我的控制器中获取用于配置 Spring 的 DispatcherServlet 的临时文件的位置。

我在网上看到的获取临时文件位置的代码是这样的:

File directory = (File)getServletContext().getAttribute("javax.servlet.context.tmpdir");
File file = File.createTempFile("prefix", ".tmp", directory);
FileWriter out = new FileWriter(file);

但就我目前所见,无法在我用来配置 servlet 的 Controller 类中使用 getServletContext。

非常感谢任何关于如何获得我想要的东西或其他处理方法的建议。如果您需要更多详细信息,请询问。

【问题讨论】:

标签: spring servlets spring-mvc


【解决方案1】:

您是否尝试使用@Autowired 注释将ServletContext 注入您的控制器并在您的方法中访问它。

class XController {
@Autowired
private ServletContext servletContext;

}

【讨论】:

  • 当我这样做时,它看起来像 servletContext.getAttribute("javax.servlet.context.tmpdir") 正在返回 null。我还需要做些什么来让自动装配的 ServletContext 工作吗?抱歉,我仍在了解 Spring 的所有功能。
  • 我希望 javax.servlet.context.tmpdir 在您的 web.xml 中定义,不是吗?它将是String 而不是File。你应该使用new File(attributeValue);
  • 原来它是空的,因为属性是 javax.servlet.context。 tempdir 而不是 tmpdir。不幸的是,我发现的示例中有错字。我现在可以看到文件位置被正确读取。此外,getServletContext().getAttribute("javax.servlet.context.tempdir") 返回 File,而不是 String。谢谢您的帮助!我仍然有一些错误,但至少已经解决了。
猜你喜欢
  • 1970-01-01
  • 2023-03-21
  • 2016-08-23
  • 2014-10-26
  • 1970-01-01
  • 1970-01-01
  • 2011-04-04
  • 2013-06-03
  • 1970-01-01
相关资源
最近更新 更多