如何将 sling.servlet.resourceType 中的 Sling serlvet 设置为相对于自身的路径(到 serlvet 的资源)?



如果我问了一个错误的问题,我会首先说出我想要实现的目标:

我在CQ5中具有以下组件结构:/apps/TEST/components/DatabaseConnection (DatabaseConnection 是一个组件名称)/apps/TEST/components/DatabaseConnection/src/ServletDatabaseConnection (这是我处理来自 TEST/components/DatabaseConnection 的 POST 请求的服务器。

在我的servlet

中,sling.servlet.resourceType设置为TEST/components/DatabaseConnection)

因此,我设置了sling.servlet.resourceTypes的相对路径,serlvet将在/apps/TEST/components/DatabaseConnection和/libs/TEST/components/DatabaseConnection/下查找resourceType

但是我希望能够将我的组件 DatabaseConnection 移动到任何其他文件夹,并且既不更改 servlet 中的任何内容,也不更改应用程序中的任何内容。但是如果我现在这样做,我将不得不将sling.servlet.resourceType更改为新的resourceType

考虑到Sling中的所有内容都是资源,而不是我的servlet也是资源,对吧?那么,也许可以相对于servlet的resourceType设置sling.servlet.resourceType?

那么,我可以相对于这个servlet的资源类型设置sling.servlet.resourceType吗?如果没有,是否有其他方法可以使我的组件"可移动",这样我就不必更改 servlet 中的任何内容?

我发现这两个资源非常有用:http://www.pro-vision.de/content/medialib/pro-vision/production/adaptto/2012/adaptto2012-apache-sling-basic-concepts-rainer-bartl-peter-manne/_jcr_content/renditions/rendition.file/adaptto2012-apache-sling-basic-concepts-rainer-bartl-peter-mannel.pdfhttp://sling.apache.org/site/resources.html但我仍然想不出解决方案

7 个月过去了,在查看了同事的代码后,我发现了如何实现我想要实现的目标:)

所以我想使组件及其 servlet 一起移动。

为此,我们不需要使用resourceType,但我们需要使用sling.servlet.paths。http://sling.apache.org/documentation/the-sling-engine/servlets.html

要使其发挥作用,我们需要做三件事。

1)在我们要发送到Servlet的形式中,设置一些操作。例:

<form name="name" id="id" action="/someaction/dothis" method="POST">
<button name="submit"> Submit </button>
</form>

2) 在 servlet 中设置 sling.servlet.paths。在我们的例子中:

@Component(immediate = true)
@Service(value=javax.servlet.Servlet.class)
@Properties(value = {
@Property(name="sling.servlet.methods", value={ "POST" }),
//
@Property(name="sling.servlet.paths", value={"/someaction/dothis"})
})
public class ServletEvaluation extends SlingAllMethodsServlet {
...
}

3) 在 OSGi console/system/console/configMgr 中配置 Apache Sling Servlet/Resource Resolver:将 sling.servlet.path 添加到执行路径。在我们的例子中,将执行路径设置为/someaction

您是否尝试设置绝对路径而不是资源类型?例如,如果将路径设置为/bin/TEST/DatabaseConnection,则资源类型无关紧要。

最新更新