AEM中指定resourceType组件加载时Servlet未触发问题求助
排查Sling Servlet未触发的常见原因
核对Servlet注解配置
确保使用@SlingServlet注解时,resourceTypes值与组件的sling:resourceType完全一致(大小写、路径均不能出错),同时指定匹配的请求方法和扩展名。示例代码:@SlingServlet( resourceTypes = "harsh/components/content/mycomponent", methods = {HttpMethod.GET}, extensions = {"html"} ) public class MyComponentServlet extends SlingSafeMethodsServlet { @Override protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException { // 业务逻辑实现 } }检查组件渲染优先级
如果组件目录下存在mycomponent.html这类HTL脚本,Sling会优先使用脚本渲染,而非触发Servlet。解决方式二选一:- 删除组件对应的HTL脚本;
- 给Servlet注解添加
rank参数(如rank = 100,数值越高优先级越高),或指定独特的selectors(如selectors = "servlet"),访问时用mycomponent.servlet.html路径触发。
确认Servlet的OSGi激活状态
登录AEM的OSGi控制台(/system/console/components),搜索你的Servlet类名,查看是否处于Active状态。若未激活,去/system/console/slinglog查看日志,排查依赖缺失或配置错误。验证请求与资源匹配性
- 确认请求方法(如GET)和扩展名(如html)与Servlet注解配置一致;
- 在CRXDE Lite中检查组件节点的
sling:resourceType属性,确保确实是harsh/components/content/mycomponent; - 可在页面添加调试代码,输出
request.getResource().getResourceType(),验证请求是否正确解析到目标组件资源。
排查Servlet冲突
进入OSGi控制台的/system/console/slingservlets页面,搜索harsh/components/content/mycomponent,查看是否有其他Servlet与你的配置条件重合且优先级更高,如有则调整自身Servlet的rank值提升优先级。
内容的提问来源于stack exchange,提问作者HARSH SINHA
相关产品推荐
相关产品推荐

