关于两个AEM实例使用不同servlet解析URL的可能原因的想法



我有两个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解析器工具:

/系统/控制台/服务解析程序

最新更新