gpt4 book ai didi

java - Sling servlet 请求方法属性被忽略了吗?

转载 作者:行者123 更新时间:2023-11-30 08:20:50 24 4
gpt4 key购买 nike

也许我误解了注释在 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 会被阻止处理它。

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

干杯。

最佳答案

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

引自 sling 文档。

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

引用Sling Engine Documentation了解更多信息。

编辑包括@BertrandDelacretaz 评论:

顺便说一句,在 Sling 中不推荐在路径上注册 servlet,引用相同的文档“在所需路径上创建资源,使用映射到 servlet 的资源类型,在大多数情况下提供相同的结果,同时利用更多吊带内置功能”。例如访问控制等功能。

关于java - Sling servlet 请求方法属性被忽略了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25665789/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com