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

AEM中conf目录下组件的Servlet实现方案咨询

解决AEM中模板结构组件Servlet 404问题的方案

方案1:发布模板结构组件到发布环境

模板结构里的someTeaser组件位于/conf路径下,默认可能未同步到发布实例:

  • 检查复制代理的路径规则,确保/conf/xx/settings/wcm/templates/someTemplate/structure被包含在复制范围内。
  • 在作者实例中选中该结构节点执行发布操作,确保发布实例中存在该节点。
  • 完成后访问组件的token接口,Servlet即可通过resourceType匹配到该资源。

方案2:直接绑定Servlet到页面组件路径

放弃resourceType匹配,改用路径匹配的方式绑定Servlet:

@SlingServletPaths(
        value = {"/content/*/jcr:content/root/main/container/someTeaser.token.json"}
)

这种方式直接指向页面渲染时组件的路径,无需依赖/conf下的节点,但要注意如果模板结构的组件路径变动,Servlet的路径配置需同步修改。

方案3:绑定到PAGE类型但做组件存在性校验

若必须使用PAGE的resourceType,在Servlet逻辑中添加过滤,只处理包含目标组件的页面:

@Override
protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException {
    Resource pageResource = request.getResource();
    // 查找页面结构中的目标组件
    Resource teaserResource = pageResource.getChild("jcr:content/root/main/container/someTeaser");
    
    if (teaserResource == null || !Constants.ResourceTypes.SOME_TEASER.equals(teaserResource.getResourceType())) {
        response.sendError(HttpServletResponse.SC_NOT_FOUND);
        return;
    }
    
    // 此处编写令牌生成逻辑
    // ...
}

这样只有包含someTeaser组件的页面才会响应token请求,不会影响其他页面。

方案4:在组件模板中转发请求到Servlet

在someTeaser的HTL模板里用<sling:include>调用Servlet,确保请求上下文是页面中的组件实例:

<sling:include resource="${resource}" selector="token" extension="json" />

同时保留原Servlet的@SlingServletResourceTypes注解配置,页面渲染时会自动触发Servlet逻辑,无需直接访问组件URL。

内容的提问来源于stack exchange,提问作者scura s

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 19:05:18