吊销servlet请求方法属性被忽略了吗?

时间:2014-09-04 12:39:31

标签: java cq5 aem sling

也许我误解了Sling servlet中的注释或者它们控制的内容。

我有一个使用以下内容定义的servlet:

@Component(immediate = true, metatype = false, label = "File Processor Servlet")
@Service(serviceFactory = false, value = javax.servlet.Servlet.class)
@Properties(value = {
    @org.apache.felix.scr.annotations.Property(name = "sling.servlet.methods", value = { "GET" }),
    @org.apache.felix.scr.annotations.Property(name = "sling.servlet.extensions", value = { "json" }),
    @org.apache.felix.scr.annotations.Property(name = "sling.servlet.paths", value = { "/bin/FileProcessor" })

现在可以部署并且工作正常(我使用的是CQ5.3环境顺便说一句),这很好,每个人都很高兴。

然而,只有当我通过我的代码接收某人时,才意识到我已经实现了doDelete()方法也可以正常工作,但是,你可以看到,我尚未将其声明为注释中sling.servlet.methods属性中的方法。

我原以为在注释中省略DELETE作为方法会导致问题,并且会阻止servlet处理它。

我是否错过了这些注释的重点?

干杯。

1 个答案:

答案 0 :(得分:3)

仅当未设置 sling.servlet.paths 属性时,sling.servlet.resourceTypessling.servlet.selectorssling.servlet.extensionssling.servlet.methods值才有效。如果设置了paths属性,则忽略所有其他属性。

引用吊索文档。

sling.servlet.methods - servlet支持的请求方法。属性值必须是单个String,字符串数组或字符串Vector。 如果设置了sling.servlet.paths属性,则忽略此属性。如果缺少此属性,则无论servlet实际实现/处理哪些方法,该值都默认为GET。

有关详细信息,请参阅Sling Engine Documentation

编辑包括@BertrandDelacretaz评论:

在Sling中不推荐BTW在路径上注册servlet,引用相同的文档"在所需路径上创建资源,使用映射到servlet的资源类型,在大多数情况下提供相同的结果更多Sling内置功能的优势"。例如访问控制等功能。