2013-05-08 23 views
21

Muszę załatwić kilka spraw. Szukałem odpowiedzi na tę, ale nie mogę znaleźć dobrej odpowiedzi na moje konkretne pytania (np. To pytanie było pogryzieniem odpowiedzi: Difference between servlet and web service).Kiedy używać Servleta lub @Controller'a

mojego rozeznania, istnieją różne sposoby realizacji „manipulację żądanie”, aka „Controller”, w „MVC zorientowanych” aplikacji internetowej, dwa z nich są:

  1. Java specyficzny Servlet (tj. Jeden utworzony przez kliknięcie nowy -> Serwlet, na przykład w zaćmieniu), używany jako "kontroler". Ten rozciąga HttpServlet i użyć metod jak doGet i doPost itp
  2. Wiosna MVC adnotacjami @Controller klasy (tak, za pomocą DispatcherServlet). Z tego użyć @RequestMethodGET/POST itp

Teraz na moje pytania ...

  • Kiedy używacie jednego lub drugiego?
  • Czy są jakieś zalety ogólne używać jednej metody nad drugą?(jak jest jedna metoda zalecane niż inne w ogóle?)

[Edycja]: Wyróżnione wyszukiwane

Odpowiedz

15

Jeśli jesteś studentem zainteresowanym nauką języka, na razie trzymałbym się serwletów. Możliwe jest napisanie aplikacji internetowej przy użyciu tylko serwletów, ale w praktyce prawdopodobnie będziesz chciał spojrzeć także na JSP.

JSP to wygodny sposób na napisanie serwletu, który pozwala na miksowanie html z elementami skryptowymi (chociaż zaleca się unikanie kodu Java w swoim jsp na rzecz tagów i wyrażeń el). Pod okładkami zostanie skompilowany jako serwlet, ale uniknie konieczności używania wielu niechlujnych instrukcji drukowania.

Ważne jest posiadanie przynajmniej podstawowej wiedzy na temat serwletów i JSP. Spring MVC jest jedną z wielu framework'ów zbudowanych na bazie serwletów, aby ułatwić pisanie aplikacji WWW. Zasadniczo wszystkie żądania są mapowane do DispatcherServlet, który działa jako front controller.

Serwer DispatcherServlet wywoła kontroler, którego adnotacje są zgodne z przychodzącym żądaniem. To jest starsze niż zapisywanie tych mapowań w web.xml (chociaż z serwletem 3.0 możesz teraz adnotować serwlety). Ale otrzymujesz także wiele innych korzyści, które można wykorzystać, np. Odwzorowywanie pól formularzy na obiekt, sprawdzanie poprawności tego obiektu za pomocą adnotacji jsr303, danych wejściowych map i wyników do pliku xml lub json itp. Dodatkowo jest on ściśle zintegrowany z rdzeniem sprężynowym, dzięki czemu można go łatwo podłączyć twoje usługi dla kontrolera, aby zadzwonić.

Warto zauważyć, że istnieje mnóstwo konkurencyjnych frameworków zbudowanych na serwletach. Wiosna MVC jest jedną z najpopularniejszych, więc nie jest to zły wybór.

+0

Niezłe wyjaśnienie! Mam podstawową wiedzę na temat tego, jak działają poszczególne rzeczy, po prostu nie mogę się zdecydować, kiedy stosować jedną z metod. Wyjaśniłeś różnice między tymi dwoma, nie wyjaśniając jednak ich faktycznego pola zastosowania. Czy możesz podać przykład sytuacji, w której używałbym jednej metody zamiast drugiej? – Roger

+0

Oba są używane do tych samych rzeczy (tworzenie aplikacji internetowych). Różnica polega na tym, że Spring MVC dodaje dużo wygody.Większość osób piszących aplikację internetową w języku Java będzie używać jakiegoś rodzaju szkieletu napisanego na szczycie serwletów, aby ułatwić rozwój. NA PRZYKŁAD. jeśli nagle masz przypadek użycia dla żądania zwrotu jsona, to sprężyna mvc już to obsługuje, podczas gdy z serwletami musisz sam to rozgryźć. Wciąż warto znać serwlety, ponieważ jest to podstawowa technologia. –

+0

Rozumiem. Więc w zasadzie tworzony jest serwlet za pomocą obu metod, robiąc dokładnie to samo - tyle że w # 2 używasz Spring MVC jako ramy, które pomagają ci w drodze? Oznacza to, że za pomocą Spring Control @ Controller, DispatcherServlet i niektórych JSP ("java in html"), tworzysz to samo, jakbyś tworzył serwlet ("html w java" (np. New -> Servlet. ..)) i trochę JSP/html na własną rękę, tyle że w przypadku Spring MVC, Spring dba o "nieprzyjemne części" biznesu serwletów "za darmo"? Czy to byłoby poprawne zrozumienie tego wszystkiego? (Przepraszam, że jestem trochę powolny :) – Roger

4

JSF i JP Jak również Wiosna MVC builts upon serwletów. Problem polega na tym, że serwlety nie są zbyt "miłe" do pracy, ponieważ musisz napisać bezpośrednio html.

Jeśli jesteś w stanie korzystać z internetowych technologii sieciowych, po prostu użyłbym serwletów na pozycjach, które potrzebują bezpośredniego wyjścia http, np. Zapisanie obrazu z bazy danych do http.

Korzystanie z SpringMVC lub JSF, które działają z Dipatcherservlet lub FacesServlet, jest szybsze i przyjemniejsze. Analizują twoje pliki i wysyłają je przez serwlet.

+0

JPA nie ma nic wspólnego z serwletami. Serwlety są zwykle używane w połączeniu ze stronami JSP, tak samo jak kontrolery Spring MVC. –

+0

Mam na myśli JSP, zawsze piszę JPA, kiedy mam na myśli JSP. Przepraszam. –

+0

@Templar Dzięki za odpowiedź! Nadal jestem trochę zdezorientowany. Jakich aplikacji używałbyś '@ Controller' (Spring MVC) i do jakiego rodzaju aplikacji używałbyś" zwykłego serwletu "? – Roger

6

Aplet i wiosna MVC Kontroler może być używany do zrobić to samo, ale działają one na różnym poziomie Java Application

serwlet jest częścią ram J2EE i każdego serwera aplikacji Java (Tomcat, Jetty, itp.) Jest zbudowany do uruchamiania serwletów. Serwlet to warstwa "niskiego poziomu" w stosie J2EE. Do uruchomienia aplikacji nie jest potrzebny plik servlet.jar, ponieważ jest on wstępnie pakowany za pomocą serwera aplikacji.

Sprężysta kontroler MVC to biblioteka zbudowana na serwlecie, aby ułatwić pracę. Spring MVC oferuje więcej wbudowanych funkcjonalności, takich jak parametr formularza do mapowania parametrów metody kontrolera, łatwiejsze przetwarzanie binarnych formularzy (np. Kiedy formularz może przesyłać pliki). Musisz spakować wymagane słoiki do swojej aplikacji, aby uruchomić kontroler Spring MVC

Powinieneś używać serwletu, kiedy potrzebujesz przejść na "niski poziom", a przykład może wynikać z powodu wydajności. Spring MVC działa dobrze, ale jeśli ma trochę narzut, jeśli chcesz wycisnąć wszystko, co możesz ze swojego serwera aplikacji (i już dostroiłeś inne warstwy, takie jak db), przejdź z serwletem. Możesz wybrać serwlet, jeśli chcesz poznać podstawy specyfikacji WWW J2EE (np. Do celów edukacyjnych).

We wszystkich innych przypadkach możesz wybrać strukturę sieci. Wiosna MVC jest jednym z nich; ze sprężynowym MVC nie trzeba wymyślać koła (tzn. zarządzanie formularzem binarnym, parametr postaci do konwersji fasoli, sprawdzanie parametrów itd.). Kolejnym plusem Spring MVC jest to, że w jednej klasie możesz łatwo zarządzać danymi wejściowymi z różnych adresów URL i metod, to samo robi się w serwlecie, ale kod jest bardziej skomplikowany i mniej czytelny. Moja opinia jest taka, że ​​Spring MVC jest dobry do budowania usług odpoczynku i zarządzania prostymi aplikacjami (tj. Aplikacjami sieciowymi z prostymi formularzami). Jeśli potrzebujesz zarządzać bardzo złożonymi formularzami za pomocą Ajax, formularzy zagnieżdżonych i aplikacji ze stanem sesji i strony, moja rada to przejście do struktury opartej na komponentach (na przykład: apache wicket).

Powiązane problemy