Thymeleaf获取项目路径
时间: 2025-01-03 17:30:51 浏览: 9
### 获取项目路径的方法
在 Thymeleaf 中,直接获取项目的物理路径并不是常见的做法,因为模板引擎通常用于渲染 HTML 页面而不是处理文件系统操作。然而,在某些情况下确实需要访问服务器端的资源路径。
为了实现这一点,可以借助于 Spring 的 `ServletContext` 或者通过自定义属性传递给 Thymeleaf 模型对象来间接获得项目根目录的信息[^1]。
一种方法是在控制器中设置模型属性:
```java
import javax.servlet.ServletContext;
// ...
@Controller
public class PathController {
private final ServletContext servletContext;
@Autowired
public PathController(ServletContext servletContext) {
this.servletContext = servletContext;
}
@GetMapping("/showPath")
public String showProjectPath(Model model) {
String realPath = servletContext.getRealPath("/");
model.addAttribute("projectPath", realPath);
return "pathTemplate";
}
}
```
接着可以在对应的 Thymeleaf 文件里使用 `${projectPath}` 来显示这个值:
```html
<p>Project path is: <span th:text="${projectPath}"></span></p>
```
另一种方式是利用 Java 配置类注入常量到全局范围内供所有视图共享:
```java
@Configuration
public class AppConfig implements WebMvcConfigurer {
@Bean
public static PropertySourcesPlaceholderConfigurer propertyConfigInDev() {
return new PropertySourcesPlaceholderConfigurer();
}
@Value("${catalina.base}")
private String catalinaBase;
@Override
public void addViewControllers(ViewControllerRegistry registry) {
Properties props = new Properties();
props.put("server.context-path", "/myapp");
props.put("real.path", catalinaBase); // or any other way you want to set it up
StaticApplicationContext context = new StaticApplicationContext();
context.refresh();
((StaticApplicationObjectSupport)context.getBean(PropertySourcesPlaceholderConfigurer.class))
.setProperties(props);
super.addViewControllers(registry);
}
}
```
之后就可以像之前那样在任意 Thymeleaf 页面内调用了。
需要注意的是,上述两种解决方案都是基于服务端环境变量或配置项来进行工作的;如果应用程序被打包成可执行 jar/war 并部署到了不同的环境中,则可能需要调整具体的实现逻辑以适应实际运行状况。
阅读全文