İlkbahar - MVC Çerçevesi

Spring Web MVC çerçevesi, Model-View-Controller (MVC) mimarisi ve esnek ve gevşek bağlı web uygulamaları geliştirmek için kullanılabilecek hazır bileşenler sağlar. MVC modeli, uygulamanın farklı yönlerini (giriş mantığı, iş mantığı ve UI mantığı) ayırırken, bu öğeler arasında gevşek bir bağlantı sağlar.

  • Model uygulama verilerini içerir ve genel olarak POJO'dan oluşacaktır.

  • View model verilerinin işlenmesinden sorumludur ve genel olarak müşterinin tarayıcısının yorumlayabileceği HTML çıktısı üretir.

  • Controller kullanıcı isteklerini işlemekten ve uygun bir model oluşturmaktan sorumludur ve bunu işleme için görünüme aktarır.

DispatcherServlet

Spring Web model-view-controller (MVC) çerçevesi, tüm HTTP isteklerini ve yanıtlarını işleyen bir DispatcherServlet etrafında tasarlanmıştır . Spring Web MVC DispatcherServlet'in istek işleme iş akışı aşağıdaki şemada gösterilmektedir -

DispatcherServlet'e gelen bir HTTP isteğine karşılık gelen olaylar dizisi aşağıdadır -

  • Bir HTTP isteği aldıktan sonra DispatcherServlet , uygun Denetleyiciyi çağırmak için HandlerMapping'e başvurur .

  • Denetleyici isteği alır ve kullanılan GET veya POST yöntemiyle göre uygun hizmet yöntemlerini çağırır. Hizmet yöntemi, model verilerini tanımlanan iş mantığına göre ayarlar ve görünüm adını DispatcherServlet'e döndürür .

  • DispatcherServlet yardım alacak ViewResolver pikap istek için tanımlanmış bir görünüm.

  • Görünüm sonlandırıldığında, DispatcherServlet model verilerini nihayet tarayıcıda işlenen görünüme aktarır.

Yukarıda bahsedilen bileşenlerin tümü, yani HandlerMapping, Controller ve ViewResolver, web uygulamaları için gerekli bazı ekstra özelliklere sahip düz ApplicationContext'in bir uzantısı olan WebApplicationContext w'nin parçalarıdır .

Gerekli Yapılandırma

DispatcherServlet'in işlemesini istediğiniz istekleri, içinde bir URL eşlemesi kullanarak eşlemeniz gerekir.web.xmldosya. Aşağıdaki, bildirim ve eşlemeyi göstermek için bir örnektir.HelloWeb DispatcherServlet örneği -

<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>

web.xmldosyası, web uygulamanızın WebContent / WEB-INF dizininde tutulacaktır. BaşlatıldığındaHelloWeb DispatcherServlet, çerçeve uygulama bağlamını adlı bir dosyadan yüklemeye çalışacaktır. [servlet-name]-servlet.xmluygulamanın WebContent / WEB-INF dizininde bulunur. Bu durumda dosyamızHelloWebservlet.xml.

Ardından, <servlet-mapping> etiketi, hangi URL'lerin hangi DispatcherServlet tarafından işleneceğini belirtir. Burada ile biten tüm HTTP istekleri.jsp tarafından ele alınacak HelloWeb DispatcherServlet.

Varsayılan dosya adını [servlet-name] -servlet.xml ve varsayılan konumu WebContent / WEB-INF olarak gitmek istemiyorsanız , web.xml dosyanıza sunucu uygulaması dinleyicisi ContextLoaderListener ekleyerek bu dosya adını ve konumunu özelleştirebilirsiniz . aşağıdaki gibi -

<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>

Şimdi, gerekli yapılandırmayı kontrol edelim HelloWeb-servlet.xmldosyası, web uygulamanızın WebContent / WEB-INF dizinine yerleştirilir -

<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>

Aşağıdakiler hakkında önemli noktalar HelloWeb-servlet.xml dosya -

  • [Servlet-name] -servlet.xml dosya küresel kapsamda aynı adla tanımlanmış herhangi fasulye tanımları geçersiz kılma, tanımlanmış fasulye oluşturmak için kullanılacaktır.

  • <Bağlam: bileşen tarama ...> etiketi vb @Controller ve @ RequestMapping gibi ek açıklamaların kullanmasını sağlıyor etkinleştirmek Bahar MVC açıklama tarama yeteneği faydası dokunur

  • InternalResourceViewResolver görünümü adlarını çözümlemek için tanımlanmış kurallar olacaktır. Yukarıda tanımlanan kurala göre, adında bir mantıksal görünümhello/WEB-INF/jsp/hello.jsp adresinde bulunan bir görünüm uygulamasına delege edilmiştir .

Aşağıdaki bölüm, Kontrolör, Model ve Görünüm gibi gerçek bileşenlerinizi nasıl oluşturacağınızı gösterecektir.

Bir Denetleyicinin Tanımlanması

DispatcherServlet, denetleyicilere kendisine özgü işlevselliği yürütme isteğini yetkilendirir. @Controllerek açıklama, belirli bir sınıfın bir denetleyici rolüne hizmet ettiğini gösterir. @RequestMapping ek açıklama, bir URL'yi tüm bir sınıfa veya belirli bir işleyici yöntemine eşlemek için kullanılır.

@Controller
@RequestMapping("/hello")
public class HelloController { 
   @RequestMapping(method = RequestMethod.GET)
   public String printHello(ModelMap model) {
      model.addAttribute("message", "Hello Spring MVC Framework!");
      return "hello";
   }
}

@Controllerek açıklama, sınıfı bir Spring MVC denetleyicisi olarak tanımlar. Burada ilk kullanım@RequestMapping bu denetleyicideki tüm işleme yöntemlerinin, /helloyol. Sonraki açıklama@RequestMapping(method = RequestMethod.GET)HTTP GET isteğini işlemek için denetleyicinin varsayılan hizmet yöntemi olarakprintHello () yöntemini bildirmek için kullanılır. Herhangi bir POST isteğini aynı URL'de işlemek için başka bir yöntem tanımlayabilirsiniz.

Yukarıdaki denetleyiciyi @RequestMapping'e aşağıdaki gibi ek öznitelikler ekleyebileceğiniz başka bir biçimde yazabilirsiniz -

@Controller
public class HelloController {
   @RequestMapping(value = "/hello", method = RequestMethod.GET)
   public String printHello(ModelMap model) {
      model.addAttribute("message", "Hello Spring MVC Framework!");
      return "hello";
   }
}

value öznitelik, işleyici yönteminin eşlendiği URL'yi ve methodöznitelik, HTTP GET isteğini işlemek için hizmet yöntemini tanımlar. Yukarıda tanımlanan kontrolör hakkında aşağıdaki önemli noktalara dikkat edilmelidir -

  • Bir hizmet yöntemi içinde gerekli iş mantığını tanımlayacaksınız. Gereksinime göre bu yöntemin içinde başka bir yöntemi çağırabilirsiniz.

  • Tanımlanan iş mantığına göre bu yöntem dahilinde bir model oluşturacaksınız. Ayarlayıcı farklı model özniteliklerini kullanabilirsiniz ve bu özniteliklere nihai sonucu sunmak için görünüm tarafından erişilebilir. Bu örnek, "mesaj" niteliğine sahip bir model oluşturur.

  • Tanımlanmış bir hizmet yöntemi, viewmodeli oluşturmak için kullanılacak. Bu örnek, mantıksal görünüm adı olarak "merhaba" döndürür.

JSP Görünümleri Oluşturma

Spring MVC, farklı sunum teknolojileri için birçok görünüm türünü destekler. Bunlar, JSP'ler, HTML, PDF, Excel çalışma sayfaları, XML, Velocity şablonları, XSLT, JSON, Atom ve RSS beslemeleri, JasperReports vb. İçerir. Ancak en yaygın olarak JSTL ile yazılmış JSP şablonlarını kullanırız.

Basit yazalım hello /WEB-INF/hello/hello.jsp içinde görüntüle -

<html>
   <head>
      <title>Hello Spring MVC</title>
   </head>
   
   <body>
      <h2>${message}</h2>
   </body>
</html>

Buraya ${message}Kontrolör içerisinde oluşturduğumuz niteliktir. Görünümünüzün içinde görüntülenecek birden çok özelliğe sahip olabilirsiniz.

Spring Web MVC Çerçeve Örnekleri

Yukarıdaki kavramlara dayanarak, Bahar Web Uygulamalarınızı oluşturmanıza yardımcı olacak birkaç önemli örneği kontrol edelim -

Sr.No. Örnek ve Açıklama
1 Bahar MVC Merhaba Dünya Örneği

Bu örnek, basit bir Spring Web Hello World uygulamasının nasıl yazılacağını açıklayacaktır.

2 Spring MVC Form İşleme Örneği

Bu örnek, verileri denetleyiciye göndermek ve işlenmiş bir sonucu görüntülemek için HTML formlarını kullanarak bir Spring Web uygulamasının nasıl yazılacağını açıklayacaktır.

3 İlkbahar Sayfası Yeniden Yönlendirme Örneği

Spring MVC Framework'te sayfa yeniden yönlendirme işlevini nasıl kullanacağınızı öğrenin.

4 Yay Statik Sayfaları Örneği

Spring MVC Framework'te dinamik sayfaların yanı sıra statik sayfalara nasıl erişileceğini öğrenin.

5 Bahar Özel Durum İşleme Örneği

Spring MVC Framework'te istisnaların nasıl ele alınacağını öğrenin.