Вопрос настройки контроллера Spring? - PullRequest
0 голосов
/ 04 февраля 2010

Я использую Spring MVC для разработки веб-приложения на Java. У меня есть настройка следующим образом: 2 страницы сайта отвечают за рендеринг схожего контента. Одна из страниц просто отображает элементы немного по-другому (и, следовательно, потребуется другое представление), а данные извлекаются немного по-другому (с ограничением на запрос вместо того, чтобы извлекать все элементы).

Мой вопрос таков: лучше ли было бы для этого реализовать 2 отдельных контроллера для обработки каждой из этих страниц или лучше использовать один контроллер? Если ответ заключается в использовании одного контроллера, как я могу узнать изнутри контроллера, с какой страницы поступил запрос (чтобы я мог вызвать соответствующую службу и просмотреть)? Спасибо

Ответы [ 2 ]

3 голосов
/ 04 февраля 2010

При использовании Spring 2.5+ аннотированных контроллеров разница между наличием одного контроллера или двух контроллеров не имеет особого значения.

Например, скажем, у вас есть класс контроллера, подобный этому:

@Controller
public class MyController {

   @RequestMapping ("/pageA");
   public String handlePageA() {
      .. do stuff
   }

   @RequestMapping ("/pageB");
   public String handlePageB() {
      .. do stuff
   }
}

Должно быть очевидно, как это работает. Вы получаете преимущество одного контроллера с двумя методами-обработчиками, по одному для каждой «страницы».

Нет никаких оснований для использования контроллеров до 2.5. Вы можете использовать новый стиль вместе со старым, так что даже устаревшие приложения до 2.5 могут использовать новый стиль после обновления.

0 голосов
/ 04 февраля 2010

Вы можете подойти к проблеме по-разному.
1. Вы можете передать специальный параметр, который поможет вам решить, какое представление визуализировать. После этого вам потребуется написать метод с одним контроллером с одним дополнительным параметром.
2. Вы можете извлечь общую логику, такую ​​как запросы базы данных, в отдельный метод, а затем использовать его в двух методах контроллера, устраняя большую часть дублирования кода.
3. Это может быть неприменимо к вам, так как оба представления, которые вы используете, являются HTML, но просто для информации вы можете использовать распознаватель согласования содержимого, который можно использовать для написания одного контроллера, выполняющего разные представления / рендеринг на основе типа содержимого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...