Как установить sling.servlet.resourceTypes в сервлете Sling на путь относительно себя (к ресурсу сервлета)?

В случае, если я задал вопрос неправильно, я сначала скажу, чего я хочу достичь:

У меня есть следующая структура компонента в CQ5: /apps/TEST/components/DatabaseConnection (DatabaseConnection — это имя компонента) /apps/TEST/components/DatabaseConnection/src/ServletDatabaseConnection (это мой сервлет для обработки запросов POST от TEST /components/Соединение с базой данных.

В моем сервлете sling.servlet.resourceTypes имеет значение TEST/components/DatabaseConnection)

Итак, я установил относительный путь sling.servlet.resourceTypes, и serlvet будет искать тип ресурса в /apps/TEST/components/DatabaseConnection и в /libs/TEST/components/DatabaseConnection/

Но я хочу иметь возможность переместить свой компонент DatabaseConnection в любую другую папку и ничего не менять ни в сервлете, ни в приложении. Но если я сделаю это сейчас, мне придется изменить sling.servlet.resourceTypes на новый тип ресурса.

Принимая во внимание, что все в Sling является ресурсом, мой сервлет тоже является ресурсом, верно? Итак, вероятно, можно было бы установить sling.servlet.resourceTypes относительно типа ресурса сервлета?

Итак, могу ли я установить sling.servlet.resourceTypes относительно типа ресурса этого сервлета? Если нет, есть ли другие способы сделать мой компонент «подвижным», чтобы мне не пришлось ничего менять в сервлете?

Я нашел эти два ресурса очень полезными: http://www.pro-vision.de/content/medialib/pro-vision/production/adaptto/2012/adaptto2012-apache-sling-basic-concept-rainer-bartl-peter-manne/_jcr_content/renditions/rendition.file/adaptto2012-apache-sling-basic-concepts-rainer-bartl-peter-mannel.pdf http://sling.apache.org/site/resources.html Но я все еще не могу найти решение


person Zhenya    schedule 30.01.2013    source источник
comment
Тип ресурса, такой как TEST/components/DatabaseConnection, относится к списку путей поиска (/apps, /libs), но местонахождение исходного кода вашего сервлета не принимается во внимание. Я предполагаю, что основная проблема заключается в том, что вы хотите перемещать свой компонент - возможно, вам нужно описать вариант использования для этого в отдельном вопросе, могут быть другие способы решить вашу проблему.   -  person Bertrand Delacretaz    schedule 31.01.2013


Ответы (2)


Прошло 7 месяцев, и я узнал, как добиться того, чего я пытался достичь, посмотрев на код моего коллеги :)

Поэтому я хотел сделать компонент перемещаемым вместе с его сервлетом.

Для этого нам не нужно использовать resourceType, но нам нужно использовать sling.servlet.paths. http://sling.apache.org/documentation/the-sling-engine/servlets.html

Чтобы заставить его работать, нам нужно сделать три вещи.

1) В форме, которую мы хотим отправить сервлету, задаем какое-то действие. Пример:

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

2) В сервлете задайте 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 /system/console/configMgr настройте Apache Sling Servlet/Resource Resolver: добавьте sling.servlet.path к путям выполнения. В нашем случае установите путь выполнения к /someaction

person Zhenya    schedule 02.09.2013

вы пытались установить абсолютный путь вместо resourceType? Например, если вы укажете путь к /bin/TEST/DatabaseConnection, тип ресурса не имеет значения.

person Batavia    schedule 05.02.2013
comment
Я хочу, чтобы мой сервлет находился в одной папке с компонентом. Итак, если я перемещу компонент, изменится и абсолютный путь к сервлету. У меня есть следующая структура компонента в CQ5: /apps/TEST/components/DatabaseConnection (DatabaseConnection — это имя компонента) /Подключение к базе данных. - person Zhenya; 07.03.2013
comment
На самом деле, теперь я думаю, что даже если мне удастся установить путь к сервлету относительно его ресурса, он все равно не будет работать так, как ожидалось. Предположим, я скопирую весь компонент с сервлетом в какое-то другое приложение и оттуда соберу бандл с сервлетом. Это не сработает, потому что у него будет то же имя, что и у - person Zhenya; 07.03.2013
comment
тот самый первый пучок. Итак, теперь я думаю, что это просто не должно работать таким образом. Правильным способом (насколько я понял) было бы положить мой сервлет в какую-то отдельную папку, а не с моим компонентом. Затем я мог настроить несколько компонентов для его использования. И я мог бы переместить компоненты, которые его используют, и все же мне придется изменить тип ресурса. Короче говоря, я думаю, что у моей проблемы нет решения. - person Zhenya; 07.03.2013