我有两个AEM实例,一个本地,一个在我们的开发机器上,具有相同的代码,设置等。
URL正确解析为由路径定义的自定义servlet。但是,在客户端环境中的另一台计算机上,URL将解析为DefaultSlingServlet。我试图找出该环境与其他环境之间的差异,但我没有提出任何想法,因为它们具有相同版本的AEM 5.6.1,运行相同的JDK,使用相同的精确安装包。
URL端点正在解析大多数AEM实例上的自定义servlet,但是解析为位于其他位置的计算机上的默认servlet。
我们已经尝试设置servlet以通过路径和resourceType来解析,并且使用这两种方法,它们在第一组计算机上工作正常,而在另一台计算机上则无效。所以它不是servlet定义中路径与resourceType的关系。
有没有人遇到这种古怪的行为?我想它必须与不同环境的设置相关,但到目前为止找不到差异是没有好运的。
感谢您的任何想法!
(顺便说一句,当我发布到坏机器上的自定义servlet时,它会报告PersistencException(由path定义)或ConstraintViolationException(当由resourceType定义时)。但这是预期的,因为它是默认的servlet尝试对不允许的节点做某事)
答案 0 :(得分:1)
您应该使用/ system / console / components和/或/ system / console / services中的OSGi控制台检查servlet服务是否已实际注册,并在工作和非工作实例之间进行比较。
/ system / console / requests页面也可以帮助显示如何分派请求。
最糟糕的情况是,DEBUG级别日志应该有助于确切了解如何解析servlet。
答案 1 :(得分:0)
正如Bertrand所指出的,您的Servlet未在OSGi中注册。
默认情况下,所有GET请求都由DefaultGetServlet处理,所有POST请求都转到SlingPOSTServlet(在发布时会产生持久性异常)
转到您的felix控制台并检查是否部署了servlet。
此外,如果您想查看为任何特定请求调用哪个servlet,请使用servlet解析器工具:
/系统/控制台/ servletresolver