Wiosna - MVC Framework
Struktura Spring Web MVC zapewnia architekturę Model-View-Controller (MVC) i gotowe komponenty, których można używać do tworzenia elastycznych i luźno powiązanych aplikacji internetowych. Wzorzec MVC powoduje oddzielenie różnych aspektów aplikacji (logika wejściowa, logika biznesowa i logika interfejsu użytkownika), zapewniając jednocześnie luźne sprzężenie między tymi elementami.
Plik Model hermetyzuje dane aplikacji i generalnie będą składać się z POJO.
Plik View jest odpowiedzialny za renderowanie danych modelu i generalnie generuje dane wyjściowe HTML, które przeglądarka klienta może zinterpretować.
Plik Controller odpowiada za przetwarzanie żądań użytkowników i budowanie odpowiedniego modelu oraz przekazuje go do widoku w celu renderowania.
DispatcherServlet
Struktura modelu Spring Web kontrolera widoku (MVC) została zaprojektowana w oparciu o DispatcherServlet, który obsługuje wszystkie żądania i odpowiedzi HTTP. Przepływ pracy przetwarzania żądań w Spring Web MVC DispatcherServlet ilustruje poniższy diagram -
Poniżej znajduje się sekwencja zdarzeń odpowiadająca przychodzącemu żądaniu HTTP do DispatcherServlet -
Po otrzymaniu żądania HTTP DispatcherServlet konsultuje się z HandlerMapping w celu wywołania odpowiedniego kontrolera .
Kontroler wykonuje żądanie i wywołuje odpowiednie metody usług opartych na używane GET lub metodą POST. Metoda usługi ustawi dane modelu w oparciu o zdefiniowaną logikę biznesową i zwróci nazwę widoku do DispatcherServlet .
DispatcherServlet odbędzie pomoc ViewResolver pickup zdefiniowany widok na życzenie.
Po sfinalizowaniu widoku DispatcherServlet przekazuje dane modelu do widoku, który jest ostatecznie renderowany w przeglądarce.
Wszystkie wyżej wymienione komponenty, tj. HandlerMapping, Controller i ViewResolver są częściami WebApplicationContext w, który jest rozszerzeniem zwykłego ApplicationContext z dodatkowymi funkcjami niezbędnymi dla aplikacji internetowych.
Wymagana konfiguracja
Musisz zmapować żądania, które mają obsługiwać DispatcherServlet , przy użyciu mapowania adresu URL wweb.xmlplik. Poniżej znajduje się przykład pokazujący deklarację i mapowanieHelloWeb Przykład DispatcherServlet -
<web-app id = "WebApp_ID" version = "2.4"
xmlns = "http://java.sun.com/xml/ns/j2ee"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>Spring MVC Application</display-name>
<servlet>
<servlet-name>HelloWeb</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>HelloWeb</servlet-name>
<url-pattern>*.jsp</url-pattern>
</servlet-mapping>
</web-app>
Plik web.xmlplik będzie przechowywany w katalogu WebContent / WEB-INF aplikacji internetowej. Po inicjalizacjiHelloWeb DispatcherServlet, framework spróbuje załadować kontekst aplikacji z pliku o nazwie [servlet-name]-servlet.xmlznajduje się w katalogu WebContent / WEB-INF aplikacji. W tym przypadku nasz plik będzieHelloWebservlet.xml.
Następnie znacznik <servlet-mapping> wskazuje, które adresy URL będą obsługiwane przez który serwlet DispatcherServlet. Tutaj wszystkie żądania HTTP kończące się na.jsp będzie obsługiwany przez HelloWeb DispatcherServlet.
Jeśli nie chcesz używać domyślnej nazwy pliku [nazwa-serwletu] -servlet.xml i domyślnej lokalizacji jako WebContent / WEB-INF , możesz dostosować tę nazwę i lokalizację pliku, dodając moduł nasłuchiwania serwletów ContextLoaderListener w swoim pliku web.xml w następujący sposób -
<web-app...>
<!-------- DispatcherServlet definition goes here----->
....
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/HelloWeb-servlet.xml</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
</web-app>
Teraz sprawdźmy wymaganą konfigurację HelloWeb-servlet.xmlplik umieszczony w katalogu WebContent / WEB-INF aplikacji internetowej -
<beans xmlns = "http://www.springframework.org/schema/beans"
xmlns:context = "http://www.springframework.org/schema/context"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:component-scan base-package = "com.tutorialspoint" />
<bean class = "org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name = "prefix" value = "/WEB-INF/jsp/" />
<property name = "suffix" value = ".jsp" />
</bean>
</beans>
Poniżej znajdują się ważne punkty dotyczące HelloWeb-servlet.xml plik -
Plik [nazwa-serwletu] -servlet.xml zostanie użyty do utworzenia zdefiniowanych komponentów bean, przesłaniając definicje wszystkich komponentów bean zdefiniowanych o tej samej nazwie w zasięgu globalnym.
Znacznik <context: component-scan ...> zostanie użyty do aktywacji funkcji skanowania adnotacji Spring MVC, która umożliwia korzystanie z adnotacji, takich jak @Controller i @RequestMapping itp.
InternalResourceViewResolver będą miały zasady określone w celu rozwiązania nazwy widoku. Zgodnie z powyższą regułą, logiczny widok nazwanyhellojest delegowany do implementacji widoku znajdującej się pod adresem /WEB-INF/jsp/hello.jsp .
Poniższa sekcja pokaże, jak tworzyć rzeczywiste komponenty, tj. Kontroler, model i widok.
Definiowanie kontrolera
Serwlet DispatcherServlet deleguje żądanie do kontrolerów w celu wykonania specyficznej dla niego funkcjonalności. Plik@Controlleradnotacja wskazuje, że dana klasa pełni rolę kontrolera. Plik@RequestMapping adnotacja służy do mapowania adresu URL na całą klasę lub konkretną metodę obsługi.
@Controller
@RequestMapping("/hello")
public class HelloController {
@RequestMapping(method = RequestMethod.GET)
public String printHello(ModelMap model) {
model.addAttribute("message", "Hello Spring MVC Framework!");
return "hello";
}
}
Plik @Controlleradnotacja definiuje klasę jako kontroler Spring MVC. Tutaj pierwsze użycie@RequestMapping wskazuje, że wszystkie metody obsługi na tym kontrolerze są względne w stosunku do /hellościeżka. Następna adnotacja@RequestMapping(method = RequestMethod.GET)służy do deklarowania metody theprintHello () jako domyślnej metody obsługi kontrolera do obsługi żądania HTTP GET. Możesz zdefiniować inną metodę obsługi dowolnego żądania POST pod tym samym adresem URL.
Możesz napisać powyższy kontroler w innej formie, w której możesz dodać dodatkowe atrybuty w @RequestMapping w następujący sposób -
@Controller
public class HelloController {
@RequestMapping(value = "/hello", method = RequestMethod.GET)
public String printHello(ModelMap model) {
model.addAttribute("message", "Hello Spring MVC Framework!");
return "hello";
}
}
Plik value atrybut wskazuje adres URL, na który mapowana jest metoda obsługi, a plik methodatrybut definiuje metodę usługi do obsługi żądania HTTP GET. Na temat kontrolera zdefiniowanego powyżej należy zwrócić uwagę na następujące ważne punkty:
Zdefiniujesz wymaganą logikę biznesową w ramach metody usługi. Możesz wywołać inną metodę wewnątrz tej metody zgodnie z wymaganiami.
Na podstawie zdefiniowanej logiki biznesowej utworzysz model w ramach tej metody. Możesz użyć metody ustawiającej różne atrybuty modelu, a widok będzie miał dostęp do tych atrybutów, aby przedstawić wynik końcowy. W tym przykładzie tworzony jest model z atrybutem „komunikat”.
Zdefiniowana metoda usługi może zwrócić ciąg, który zawiera nazwę pliku viewdo wykorzystania do renderowania modelu. Ten przykład zwraca „hello” jako logiczną nazwę widoku.
Tworzenie widoków JSP
Spring MVC obsługuje wiele typów widoków dla różnych technologii prezentacji. Należą do nich - JSP, HTML, PDF, arkusze Excela, XML, szablony Velocity, XSLT, JSON, Atom i kanały RSS, JasperReports, itp. Ale najczęściej używamy szablonów JSP napisanych w JSTL.
Napiszmy proste hello wyświetl w /WEB-INF/hello/hello.jsp -
<html>
<head>
<title>Hello Spring MVC</title>
</head>
<body>
<h2>${message}</h2>
</body>
</html>
Tutaj ${message}to atrybut, który ustawiliśmy wewnątrz kontrolera. W widoku może być wyświetlanych wiele atrybutów.
Spring Web MVC Framework Przykłady
W oparciu o powyższe koncepcje, zapoznajmy się z kilkoma ważnymi przykładami, które pomogą Ci zbudować Twoje Spring Web Applications -
Sr.No. | Przykład i opis |
---|---|
1 | Przykład Hello World Spring MVC Ten przykład wyjaśnia, jak napisać prostą aplikację Spring Web Hello World. |
2 | Przykład obsługi formularza Spring MVC Ten przykład wyjaśnia, jak napisać aplikację Spring Web za pomocą formularzy HTML, aby przesłać dane do kontrolera i wyświetlić przetworzony wynik. |
3 | Przykład przekierowania strony wiosny Dowiedz się, jak korzystać z funkcji przekierowywania stron w Spring MVC Framework. |
4 | Przykład wiosennych stron statycznych Dowiedz się, jak uzyskać dostęp do stron statycznych wraz ze stronami dynamicznymi w Spring MVC Framework. |
5 | Przykład obsługi wyjątków wiosennych Dowiedz się, jak obsługiwać wyjątki w Spring MVC Framework. |