You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Liferay中Web-ContextPath配置无效问题排查求助

解决Liferay 7 SPA静态资源404问题

我之前在构建Liferay 7集成JAX-RS的SPA时也碰到过一模一样的404问题,折腾了好一会儿才搞定。下面是几个你需要排查的关键配置点:

1. 确保Bundle被识别为Web Bundle并处于Active状态

首先,你的Bundle必须是Active状态,而且Liferay要把它当成Web Bundle处理:

  • 打开Liferay的Gogo Shell(通常是telnet localhost 11311或者在控制面板的Gogo Shell工具里),输入lb | grep demo-spa-react,确认你的Bundle状态是Active,而不是Resolved或Installed。如果状态不对,检查日志里的依赖缺失信息。
  • 在bnd.bnd里,除了Web-ContextPath: /demo-spa-react,还要确保有正确的类路径配置,比如:
    Bundle-ClassPath: .,WEB-INF/classes
    Web-ContextPath: /demo-spa-react
    

2. 正确依赖Servlet API

Liferay 7使用Servlet 3.1+,你需要在bnd.bnd里明确导入正确版本的Servlet包,而不是仅仅强制依赖:

Import-Package: javax.servlet;version="[3.1,4)",
 javax.servlet.http;version="[3.1,4)"

这能确保你的Bundle能访问到Liferay提供的Servlet容器服务,从而正确处理静态资源请求。

3. 避免JAX-RS路由拦截静态资源

如果你的JAX-RS应用设置了@ApplicationPath("/"),它会拦截所有请求,包括静态资源的访问!这是最容易踩的坑之一:

  • 修改你的JAX-RS应用类,把@ApplicationPath设置为一个特定的前缀,比如/api:
    @ApplicationPath("/api")
    public class YourJaxRsApplication extends Application {
        // 你的JAX-RS配置
    }
    
    这样JAX-RS只会处理/o/demo-spa-react/api/*的请求,静态资源请求就会被Liferay正确路由到META-INF/resources下的文件。

4. 检查静态资源路径和上下文路径冲突

  • 确认index.html是直接放在META-INF/resources根目录下,而不是子文件夹里。如果在子文件夹,访问路径要对应调整(比如/o/demo-spa-react/subfolder/index.html)。
  • 进入Liferay控制面板的Configuration > System Settings > Web > Web Contexts,查看是否有其他Bundle使用了/demo-spa-react这个上下文路径,冲突会导致你的资源无法被正确映射。

5. 查看部署日志排查错误

如果以上都没问题,去Liferay的日志文件(比如tomcat/logs/liferay.log)里搜索你的Bundle名称,看看部署过程中有没有报错,比如资源加载失败、依赖缺失或者配置冲突的信息,这些往往能直接指出问题所在。

内容的提问来源于stack exchange,提问作者Vasily Pankratov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:10:33