2009-08-20 5 views
5

Jestem nowy w Spring MVC. Ale miałem pewne doświadczenie w pracy z Struts 1.x. Chciałbym wiedzieć, czy powszechną praktyką jest dostosowywanie DispatcherServlet podczas pracy ze Spring MVC, tak jak ludzie czasami dostosowują ActionServlet lub RequestProcessor w Struts 1.x?Czy dostosowywanie usługi DispatcherServlet w Spring MVC jest powszechną praktyką?

A może nieco przedłużyć pytanie. Gdzie są punkty wejścia dla doświadczonego programisty Spring MVC w celu dostosowania ram MVC?

Dziękuję.

+1

Czy możesz wyjaśnić, co masz na myśli, dostosowując - czy masz na myśli specjalizację (tak jak odpowiedziałem) lub skonfigurować (jak odpowiedział adatapost)? –

+0

Właściwie mam na myśli obie, ponieważ potrzebuję wszystkich informacji na temat jej przedłużenia. Ponadto, zgadzam się z tobą punkt. Rozszerzenie usługi DispatcherServlet i zastąpienie go za pomocą filtru lub kontrolera. Jednak w ten sposób Spring MVC nie jest w stanie zaoferować standardowego interfejsu dla programistów wtyczek. W kolumnach niektóre wtyczki są wykonywane przez rozszerzenie "RequestProcessor". –

+0

Nie jestem do końca zaznajomiony z architekturą wtyczek Struts, ale powiedziałbym, że Spring MVC API jest dość proste.To jest trochę źle nazwane imho, ponieważ jest to naprawdę tylko część kontrolera wzorca MVC, pozostawiając ci zdefiniowanie twoich widoków i modelu w razie potrzeby (zazwyczaj jako JSP i POJO). –

Odpowiedz

3

Zdecydowanie jest to dobra praktyka. Spring Framework - Web MVC framework

STRESZCZENIE: Można dostosować Wiosny DispatcherServlet dodając kontekst parametry .... szczególnie przydatna, gdy masz wiele wspólnego funkcjonalności w jednym sterowniku.

+1

Dzięki, to jest pomocne. –

1

Dlaczego chcesz specjalizować org.springframework.web.servlet.DispatcherServlet?

Wszelkie wstępne przetwarzanie żądań można/powinno się osiągnąć przy pomocy javax.servlet.Filter, a reszta dotyczy implementacji org.springframework.web.servlet.mvc.Controller.

Można również znaleźć odpowiedź adatapost, która odnosi się do konfiguracji org.springframework.web.servlet.DispatcherServlet za pośrednictwem pliku web.xml.

+0

Zadaję to pytanie, aby lepiej zrozumieć te ramy i zobaczyć, w jaki sposób może służyć ta metoda. :) –

+0

Dlaczego chcesz coś wyspecjalizować? Ponieważ możesz mieć potrzebę, której jeszcze nie ma ktoś inny. Nie mogę więc zrozumieć, w jaki sposób takie odpowiedzi mogą i tak prowadzić. Jeśli klasa ma "chronione" metody, które ma DispatcherServlet, to zdecydowanie oznacza to, że deweloper uważa, że ​​może zaistnieć potrzeba jej przesłonięcia. Deweloperzy Grails już przesłonili DispatcherServlet i dla nich Filtry nie były wystarczające do dostosowania niektórych funkcjonalności. –

+0

Zawsze istnieje taka możliwość, że można się specjalizować, ale pytanie dotyczyło tego, czy było to powszechne, które imho, nie jest i zazwyczaj istnieją lepsze sposoby na osiągnięcie tego, czego potrzeba, choć przyznane, nie zawsze tak jest. –

4

, podobnie jak większość Spring API, jest zaprojektowany do rozbudowy. Rzeczywiście, jeśli znajdziesz część, która nie nadaje się do podklasy, zgłoś problem na swoim JIRA i prawdopodobnie naprawią to za Ciebie (robiłem to wielokrotnie).

Po tym, ogromna większość funkcjonalności może być osiągnięta poprzez konfigurację DispatcherServlet zamiast jej rozszerzenia.

+0

Masz rację. Nie mogę nawet wymienić jednej rzeczy, której nie można osiągnąć dzięki jej obecnej implementacji. Dziękuję za Twoją radę. Złożę problem, jeśli znajdę konieczność. –

1

Po pierwsze, nigdy nie znalazłem powodu do przedłużenia DispatcherServlet.

+1

Warto wiedzieć;) –

2

Oto moja sugestia, gdzie myślę, że rozszerzenie serwletu dyspozytora byłoby rozwiązaniem "a".

  1. oddzielny walidacja, konwersja z kontrolerem (przez kilka dobrych powodów)
  2. zrobić kontroler tylko Delegator do warstwy usług.
  3. skompiluj/zapełnij obiekt domeny/żądania całkowicie "przed" dotarciem do kontrolera.
+0

Jeśli uważasz, że to dobry sposób, śmiało go wdrożyć. Mimo że zadałem to pytanie w pierwszej kolejności, nie znalazłem przypadku, w którym muszę rozszerzyć DispatcherServlet. –