Свойство метода запроса сервлета Sling игнорируется?

Возможно, я неправильно понял, для чего нужны аннотации в сервлете Sling или что они контролируют.

У меня есть сервлет, определенный следующим образом:

@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 как метода в аннотациях вызовет проблемы, и сервлет не сможет его обработать.

Я пропустил смысл этих аннотаций?

Ваше здоровье.


person scribe1010    schedule 04.09.2014    source источник


Ответы (1)


Значения sling.servlet.resourceTypes, sling.servlet.selectors, sling.servlet.extensions и sling.servlet.methods действительны, только если свойство sling.servlet.paths не установлено. Если установлено свойство paths, то все остальные игнорируются.

Цитата из sling docs.

sling.servlet.methods — методы запроса, поддерживаемые сервлетом. Значение свойства должно быть либо одной строкой, либо массивом строк, либо вектором строк. Это свойство игнорируется, если установлено свойство sling.servlet.paths. Если это свойство отсутствует, по умолчанию используется значение GET, независимо от того, какие методы фактически реализуются/обрабатываются сервлетом.

Дополнительные сведения см. в документации Sling Engine.

Изменить Включая комментарии @BertrandDelacretaz:

Кстати, регистрация сервлетов на путях не рекомендуется в Sling, цитируя ту же документацию: «Создание ресурса по желаемому пути с типом ресурса, который сопоставляется с сервлетом, в большинстве случаев дает тот же результат, используя больше встроенных возможностей Sling. в особенностях». Например, такие функции, как контроль доступа.

person rakhi4110    schedule 04.09.2014
comment
И, как вы можете видеть в связанной документации, вы можете использовать специальную аннотацию для сервлетов вместо службы и свойств: SlingServlet. - person Thomas; 05.09.2014
comment
@ Томас - Да. Но в любом случае применимые правила одинаковы. :) - person rakhi4110; 05.09.2014
comment
И кстати, регистрация сервлетов на путях не рекомендуется в Sling, цитируя те же документы. Создание ресурса по желаемому пути с типом ресурса, который сопоставляется с сервлетом, в большинстве случаев дает тот же результат, используя больше встроенных возможностей Sling. Особенности. Например, такие функции, как контроль доступа. - person Bertrand Delacretaz; 05.09.2014