Java 弹簧加载文件

Java 弹簧加载文件,java,spring,jakarta-ee,Java,Spring,Jakarta Ee,我需要使用Spring从WAR根目录中加载一个文件 这是目录结构 rootOfWar --static-dir ---- my-file.css --WEB-INF ---- classes ..... 这是一场正常的战争 在Spring@RestController中,我需要能够读写my-file.css文件。获取文件的最佳方式是什么,ServletContextResource还是 更多详细信息 -文件的位置超出我的控制,我无法移动文件。 -jee容器是Tomcat。 -Spring版本是

我需要使用Spring从WAR根目录中加载一个文件 这是目录结构

rootOfWar
--static-dir
---- my-file.css
--WEB-INF
---- classes
.....
这是一场正常的战争

在Spring@RestController中,我需要能够读写my-file.css文件。获取文件的最佳方式是什么,ServletContextResource还是

更多详细信息
-文件的位置超出我的控制,我无法移动文件。
-jee容器是Tomcat。
-Spring版本是当前的4.1.6
-Spring环境不使用WebApplicationInitializer、WebMVCConfigureAdapter和注释配置类的仅XML注释

有没有其他方法可以做到这一点,比如在配置中指定一个文件作为资源,以便由框架加载并在应用程序中访问它


基本上我有JEE知识,但是我的Spring知识缺乏关于读/写的最佳实践。

如果你需要修改文件,你不应该让它成为战争的一部分。将其存储在web包之外的某个位置,并在那里引用它。其他一切都会导致问题,特别是当您部署到Websphere时,Websphere通常在拒绝写入的受限环境中运行

<>但是我考虑在Web路径坏设计中重写文件,因为您可能会遇到缓存问题。最好编写一个servlet来生成所需的CSS。如果您能够命名应该覆盖css文件的内容,那么您还可以动态地呈现该内容

这样的事情可能已经足够了:

@RequestMapping(value = "/my.css", produces = "text/css;charset=UTF-8")
public String showCss() {
    return "<here goes your css>";
}
@RequestMapping(value=“/my.css”,products=“text/css;charset=UTF-8”)
公共字符串showCss(){
返回“”;
}
(这是根据我的记忆编写的,未经测试)


好的是,您可以随时修改css,甚至可以根据需要设置缓存信息。

您不能写入WAR文件。(好吧,我的意思是你可以,但不是以你想要的方式。)@DaveNewton通常我会使用类路径并向其写入,你可以,但在这种情况下我没有选项,结构超出了我的控制。如果只能使用ServletContextResource完成,那么我想这就是答案。有人告诉我,Spring除了使用ServletContext之外,在战争中还有其他选项可以实现读/写。你会如何用你描述它的方式将它保存在数据库中,也许?谢谢你的回复@DaveNewton,因为我说过我无法控制这个结构,它是由其他人定义的。它也可以是平面文件数据库;-)。但无论如何我都不能移动这个文件。那么,我假设在Spring中使用ServletContextResource是加载此文件的唯一方法?它的工作原理与战争根目录下的rear/write类似。您好,谢谢您的回复。这是一个受控的软设备环境Tomcat。对于WebSphere,您需要添加WAS策略文件,然后可以控制要写入的位置。对于使用deployment manager的配置目录的WAS群集,您可以确保所有节点都同步。该文件存储在战争中,我对此没有控制权。管理(写入)CSS文件的应用程序与读取CSS文件的应用程序不同。@Gurnard如果我在编写答案时知道这些详细信息,那么答案会有所不同;-)如果您的问题不包含找到符合您要求的解决方案所需的所有细节,我们如何给出合适的答案?我猜否决票不是你的?我已经更新了我的问题,使之更完整。我试图避免听起来像是讨论,更像是直接的问题,因为我知道这是这么做的目的。我同意这是一个糟糕的设计,但我没有权力。