2014-07-18 3 views
0

Я работаю на сервлета выполнить некоторую логику специфичной для ResourceType в слинге и установить информацию на запрос, чтобы быть доступными через СПЯ затем переключени запрос СПЯ аналогично к первому решению, представленному в this answer.Перекрытие Sling DefaultGetServlet.java

Вот пример кода, чтобы представить мою ситуацию:

@SlingServlet(
    resourceTypes="myapp/components/mycomponent", 
    methods="GET", 
    extensions={"html"} 
) 
... 
    @Reference 
    private ServletResolver serlvetResolver; 

    protected void doGet(....) { 
    setPropertiesToRequest(); 
    Servlet servlet = servletResolver.resolveServlet(resource, "....jsp"); 
    servlet.service(slingRequest, slingResponse); 
    clearPropertiesFromRequest(); 
    } 

Из-за этого, я заметил, что я потерял Слинг в селектор обработки (я должен был свернуть свою собственную простую версию определить, какой jsp для рендеринга. Full featured sling selector handling is described in more detail here). Я хотел связаться с сообществом переполнения стека и узнать, что еще я могу пропустить, лишив обработчик запроса по умолчанию. Я просмотрел source code, но я думаю, что может быть больше.

Во-вторых, меня бы интересовали мысли о том, как и где этот подход может повлиять на производительность производительность разрешения запроса.

Спасибо, Томас

ответ

1

Обработка бизнес-логики в Java и делегирование скриптов для рендеринга звучит как работа для недавно выпущенного Sling Models. Использование этого должно устранить необходимость в реализации вашей собственной обработки селекторов, поскольку они не повлияют на выбор модели, а только на сценарии рендеринга.

+0

Благодарим вас за ответ Бертран. Модели Sling выглядят как отличный вариант.Проблема здесь в том, что мы надеялись централизовать нашу логику, в том числе действия, связанные с конкретным компонентом с запросом, в java (вместо того, чтобы определять между различными jsp и настраиваемыми тегами, которые мы определяем). Мы не слишком озабочены обработкой селектора, поскольку мы можем переопределить известные требуемые варианты использования. Я упомянул об этом больше как пример функции, которую мы потеряли при таком подходе. Наша забота заключается в том, что мы упускаем что-то еще. Спасибо, Томас – Thomas

1

Не уверен, что вы пытаетесь достичь здесь, но главная проблема, мне кажется, что ваш SlingServlet обрабатывает расширение HTML и сам по себе не имеют селекторов для фильтрации немного больше. Таким образом, он, конечно, перехватывает все запросы к вашему компоненту. Затем вам нужно снова позаботиться о селекторах, чтобы иметь возможность выбрать правильный JSP. Вопрос в том, почему вы используете SlingServlet для него, когда вы все равно выполняете рендеринг JSP? Не можете ли вы реализовать свою логику в JSP или лучше в компоненте, указанном в JSP?

В нашей компании мы используем наш собственный тег, который заботится об этом, но есть общественные структуры доступны от других Adobe Partner:

https://github.com/Cognifide/Slice

http://neba.io/index.html

+0

Благодарим за отзыв Томаса. Мы также использовали тег для создания экземпляра класса Java для компонента. Однако мы устанавливали значения непосредственно в pageContext, а не через модель. Часть этого исследования заключалась в том, чтобы полностью контролировать запрос в Java-коде и вытащить логику из наших jsp для целей отладки. На данный момент мы не занимаемся обработкой селектора, потому что мы сопоставим наши потребности и теперь имеем прямой контроль над тем, что означают селекторы. Однако мы обеспокоены тем, что нам не хватает других функций, которые обрабатываются установкой по умолчанию. Спасибо, Thomas – Thomas

+0

Как я прокомментировал в другом вопросе, который вы связали, возможно, сервлет-фильтр был бы решением для управления запросом, не слишком мешая остальной обработке стропа. – Thomas

+0

Я заметил и посмотрел в фильтр. Проблема в том, что для предотвращения фильтрации от каждого запроса нам нужно было бы сохранить белый список с помощью регулярного выражения в фильтре. И было бы предпочтительнее сохранять логику запуска или отсутствия в файле с логикой инициализации вместо отдельной. Если бы мы выполняли этот код по каждому запросу, фильтр был бы отличным вариантом. – Thomas

Смежные вопросы