我有两个AEM实例,一个在本地,另一个在我们的开发机器上,它们具有相同的代码、设置等。
URL正确地解析为由路径定义的自定义servlet。但是,在客户端环境中的另一台机器上,URL解析为DefaultSlingServlet。我试着找出该环境与其他环境之间的区别,但我没有想出任何想法,因为他们有相同版本的AEM5.6.1,运行相同的JDK,使用相同的安装包。
URL端点在大多数AEM实例上解析为我们的自定义servlet,但在位于其他位置的机器上解析为默认servlet。
我们已经尝试设置servlet以按路径和resourceType进行解析,使用这两种方法,它们在第一组机器上运行良好,而在另一组机器上则不起作用。因此,这不是servlet定义中path与resourceType的区别。
有人见过这种古怪的行为吗?我想这一定与不同环境的设置有关,但到目前为止,在发现差异方面还没有运气。
谢谢你的任何想法!
(顺便说一句,当我在坏机器上发布到自定义servlet时,它会报告PersistenceException(由路径定义时)或ConstraintViolationException(由resourceType定义时)。但这是意料之中的事,因为它是默认的servlet,试图对节点做一些不允许做的事情)
您应该使用位于/system/console/components和/或/system/control/services的OSGi控制台来检查servlet服务是否实际注册,并在工作实例和非工作实例之间进行比较。
/system/console/requests页面也可以提供帮助,因为它显示了如何调度请求。
最坏的情况是,DEBUG级别的日志应该有助于准确地查看servlet是如何解析的。
正如Bertrand所指出的,您的Servlet没有在OSGi中注册。
默认情况下,所有的GET请求都由DefaultGetServlet处理,所有的POST请求都转到SlingPOSTServlet(当你发布时会出现持久性异常)
转到您的felix控制台,检查servlet是否已部署。
此外,如果您想查看为任何特定请求调用哪个servlet,请使用servlet解析器工具:
/系统/控制台/服务解析程序