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

本地环境中AEM CQ5 Servlet未被调用问题求助

排查本地AEM Servlet不触发的问题

作为刚接触AEM开发的新手,遇到本地代码和服务器完全一致但Servlet就是不触发的情况,确实挺闹心的。结合AEM的OSGi Servlet机制,我给你梳理几个最可能的本地配置问题,你可以逐一排查:

  • 补全并核对Servlet注解
    你贴的注解内容没写完,AEM的Servlet要触发,必须明确匹配请求的关键条件。比如下载资产场景,通常需要指定请求方法、扩展名,完整的注解示例应该是这样的:

    @Component(metatype = false)
    @Service
    @Properties({
        @Property(name = "sling.servlet.resourceTypes", value = "sling/servlet/default"),
        @Property(name = "sling.servlet.methods", value = "GET"),
        @Property(name = "sling.servlet.extensions", value = {"jpg", "pdf", "png"}),
        // 如果是绑定特定路径,还要加上这行
        // @Property(name = "sling.servlet.paths", value = "/bin/download-asset")
    })
    

    你要确认自己有没有遗漏methods、extensions这类核心匹配属性,缺少任何一个都可能导致Servlet无法被匹配到。

  • 检查本地Bundle的启动状态
    打开本地AEM的Felix控制台(http://localhost:4502/system/console/bundles),找到你项目对应的Bundle,看看它的状态是不是Active。如果是Installed或者Resolved,说明Bundle启动失败了,去日志页面(http://localhost:4502/system/console/slinglog)翻找错误信息,大概率是依赖缺失或者代码编译有问题。

  • 同步OSGi配置与服务器
    有时候服务器上会有额外的OSGi配置项(比如Servlet的自定义参数),但本地没同步过来。去Felix控制台的Configuration页面,搜索你的Servlet对应的PID,对比本地和服务器的配置是否完全一致。

  • 清除缓存干扰
    本地测试很容易碰到缓存问题:浏览器缓存了旧响应,或者本地配置的Dispatcher拦截了请求。先试试用浏览器的无痕模式测试,或者手动清空浏览器缓存;如果本地搭了Dispatcher,暂时关掉它再验证。

  • 排查Servlet匹配优先级
    AEM的Servlet是按匹配优先级来触发的,如果本地有其他Servlet也匹配了相同的resourceType、method和extension,就可能把你的Servlet挤掉。去Felix控制台的Servlets页面(http://localhost:4502/system/console/servlets)搜索你的Servlet,看看它的匹配顺序是不是靠前,有没有被其他Servlet抢占了请求。

  • 核对本地资产的属性
    就算代码一致,本地AEM实例里的资产内容可能和服务器不一样。检查你测试的资产的jcr:primaryType和sling:resourceType属性,确保和你Servlet注解里的resourceTypes值完全匹配。

内容的提问来源于stack exchange,提问作者Kimberly Anne

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:48:37