Spring - Ringkasan Kerangka MVC

Framework Spring Web MVC menyediakan arsitektur model-view-controller dan komponen siap pakai yang dapat digunakan untuk mengembangkan aplikasi web yang fleksibel dan digabungkan secara longgar. Hasil pola MVC memisahkan berbagai aspek aplikasi (logika input, logika bisnis, dan logika UI), sekaligus menyediakan kopling longgar antara elemen-elemen ini.

  • Itu Model merangkum data aplikasi dan secara umum akan terdiri dari POJO.

  • Itu View bertanggung jawab untuk merender data model dan secara umum menghasilkan HTML keluaran yang dapat diinterpretasikan oleh browser klien.

  • Itu Controller bertanggung jawab untuk memproses User Requests dan Building Appropriate Model dan meneruskannya ke tampilan untuk dirender.

DispatcherServlet

Framework model-view-controller (MVC) Spring Web dirancang dengan DispatcherServlet yang menangani semua permintaan dan respons HTTP. Alur kerja pemrosesan permintaan dari Spring Web MVC DispatcherServlet ditunjukkan dalam ilustrasi berikut.

Berikut adalah urutan kejadian yang sesuai dengan permintaan HTTP yang masuk ke DispatcherServlet -

  • Setelah menerima permintaan HTTP, DispatcherServlet berkonsultasi dengan HandlerMapping untuk memanggil Pengontrol yang sesuai.

  • Kontroler menerima permintaan dan memanggil metode layanan yang sesuai berdasarkan yang digunakan GET atau POST method. Metode layanan akan menyetel data model berdasarkan logika bisnis yang ditentukan dan mengembalikan nama tampilan ke DispatcherServlet.

  • DispatcherServlet akan mengambil bantuan dari ViewResolver untuk mengambil tampilan yang ditentukan untuk permintaan tersebut.

  • Setelah tampilan diselesaikan, DispatcherServlet meneruskan data model ke tampilan, yang akhirnya dirender, di browser.

Semua komponen yang disebutkan di atas, yaitu HandlerMapping, Controller dan ViewResolver adalah bagian dari WebApplicationContext, yang merupakan perpanjangan dari dataran ApplicationContext dengan beberapa fitur tambahan yang diperlukan untuk aplikasi web.

Konfigurasi yang Diperlukan

Kita perlu memetakan permintaan yang Anda inginkan untuk ditangani DispatcherServlet, dengan menggunakan pemetaan URL di file web.xmlmengajukan. Berikut ini adalah contoh deklarasi dan pemetaanHelloWeb 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>

Itu web.xml file akan disimpan di WebContent/WEB-INFdirektori aplikasi web Anda. Setelah inisialisasi fileHelloWeb DispatcherServlet, kerangka kerja akan mencoba memuat konteks aplikasi dari file bernama [servlet-name]-servlet.xmlterletak di direktori WebContent / WEB-INF aplikasi. Dalam hal ini, file kami adalahHelloWeb-servlet.xml.

Selanjutnya, <servlet-mapping>tag menunjukkan URL mana yang akan ditangani oleh DispatcherServlet. Di sini, semua permintaan HTTP yang diakhiri dengan .jsp akan ditangani olehHelloWeb DispatcherServlet.

Jika Anda tidak ingin menggunakan nama file default sebagai [servlet-name]-servlet.xml dan lokasi default sebagai WebContent / WEB-INF, Anda dapat menyesuaikan nama file dan lokasi ini dengan menambahkan pendengar servlet ContextLoaderListener di file web.xml Anda sebagai berikut -

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

Sekarang, mari kita periksa konfigurasi yang diperlukan untuk HelloWeb-servlet.xml file, ditempatkan di direktori WebContent / WEB-INF aplikasi web Anda.

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

Berikut adalah beberapa poin penting tentang HelloWeb-servlet.xml file -

  • Itu [servlet-name]-servlet.xml file akan digunakan untuk membuat biji yang ditentukan, mengesampingkan definisi kacang apa pun yang didefinisikan dengan nama yang sama dalam lingkup global.

  • Itu <context:component-scan...> tag akan digunakan untuk mengaktifkan kemampuan pemindaian anotasi Spring MVC, yang memungkinkan untuk menggunakan anotasi seperti @Controller dan @RequestMapping, dll.

  • Itu InternalResourceViewResolverakan memiliki aturan yang ditentukan untuk menyelesaikan nama tampilan. Sesuai aturan yang ditentukan di atas, tampilan logis bernamahello didelegasikan ke implementasi tampilan yang terletak di /WEB-INF/jsp/hello.jsp.

Sekarang mari kita mengerti bagaimana membuat komponen yang sebenarnya yaitu, Controller, Model dan View.

Mendefinisikan Kontroler

DispatcherServlet mendelegasikan permintaan ke pengontrol untuk menjalankan fungsionalitas khusus untuk itu. Itu@Controlleranotasi menunjukkan bahwa kelas tertentu berfungsi sebagai pengontrol. Itu@RequestMapping anotasi digunakan untuk memetakan URL ke seluruh kelas atau metode penanganan tertentu.

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

}

Itu @Controlleranotasi mendefinisikan kelas sebagai pengontrol MVC Spring. Di sini, penggunaan pertama@RequestMapping menunjukkan bahwa semua metode penanganan pada pengontrol ini relatif terhadap /hello jalan.

Anotasi berikutnya @RequestMapping (method = RequestMethod.GET) digunakan untuk mendeklarasikan printHello()metode sebagai metode layanan default pengontrol untuk menangani permintaan HTTP GET. Kita dapat menentukan metode lain untuk menangani permintaan POST apa pun di URL yang sama.

Kita juga dapat menulis kontroler di atas dalam bentuk lain, di mana kita dapat menambahkan atribut tambahan di @RequestMapping sebagai berikut -

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

}

Itu value atribut menunjukkan URL tempat metode penangan dipetakan dan method atribut mendefinisikan metode layanan untuk menangani permintaan HTTP GET.

Berikut adalah beberapa poin penting yang harus diperhatikan terkait kontroler yang ditentukan di atas -

  • Anda akan menentukan logika bisnis yang diperlukan di dalam metode layanan. Anda dapat memanggil metode lain di dalam metode ini sesuai kebutuhan.

  • Berdasarkan logika bisnis yang ditentukan, Anda akan membuat model dalam metode ini. Anda dapat menyetel atribut model yang berbeda dan atribut ini akan diakses oleh tampilan untuk mempresentasikan hasilnya. Contoh ini membuat model dengan atribut "message" -nya.

  • Metode layanan yang ditentukan dapat mengembalikan String, yang berisi nama file viewuntuk digunakan untuk merender model. Contoh ini mengembalikan "halo" sebagai nama tampilan logis.

Membuat Tampilan JSP

Spring MVC mendukung banyak jenis tampilan untuk teknologi presentasi yang berbeda. Ini termasuk -JSPs, HTML, PDF, Excel Worksheets, XML, Velocity Templates, XSLT, JSON, Atom dan RSS feed, JasperReports, dll. Namun, yang paling umum adalah template JSP yang ditulis dengan JSTL. Jadi, mari kita tulis tampilan halo sederhana di /WEB-INF/hello/hello.jsp -

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

Sini ${message}Ini adalah atributnya, yang telah kita siapkan di dalam Controller. Anda dapat memiliki beberapa atribut untuk ditampilkan di dalam tampilan Anda.