Memahami Dispatcher-Servlet Spring MVC 2.5 (Sebagian Proses MVC Spring)
Dispatcher Servlet adalah servlet yang berfungsi untuk menerima HTTP request dan meneruskannya menuju proses selanjutnya berdasarkan mapping yang didefinisikan di dalamnya. Dispatcher Servlet dideklarasikan keberadaannya di web.xml. (link ke web.xml)
Isi dispatcher-servlet.xml yang masih “fresh” baru di-generate dari Netbeans6.5 :
[sourcecode language=’xml’]
indexController
booksManagerController
[/sourcecode]
ControllerClassNameHandlerMapping
[sourcecode language=’xml’]
[/sourcecode]
Ini langsung dibuat oleh Netbeans6.5. Kelas ControllerClassNameHandlerMapping ini bermaksud untuk membuat mapping otomatis dari suatu nama bean-controller ke request URL. Caranya memanggil URL adalah dengan “memenggal” kata “Controller” dari nama kelas-controller tersebut. Misalnya :
Kelas WelcomeController di-mapping ke URL “/welcome*”
Kelas BooksController di-mapping ke URL “/books*”
Kalau tidak mau menggunakan tipe mapping seperti ini (supaya lebih fleksibel), hilangkan saja penggunaan bean ini :
Handler Mapping
[sourcecode language=’xml’]
indexController
booksManagerController
[/sourcecode]
Handler Mapping berguna untuk mengatur mapping dari request URL ke bean-controller yang dituju.
SimpleUrlHandlerMapping merupakan salah satu jenis dari Handler Mapping di Spring. Selain SimpleUrlHandlerMapping ada juga BeanUrlHandlerMapping. BeanUrlHandlerMapping me-mapping request URL langsung kepada bean-controller yang bernama sama dengan URL tersebut. Misalkan dipanggil “/index.htm” (tanpa tanda kutip), maka bean yang akan dipanggil selanjutnya adalah bean-controller yang memiliki nama “/index.htm”. BeanUrlHandlerMapping tidak mengakomodir penggunaan wildcard (*). Karena kesederhanaannya itu ia lebih cocok digunakan untuk aplikasi kecil.
Untuk code di atas, ketika URL “/index.htm” dipanggil lewat HTTP request, maka bean-controller yang selanjutnya akan dieksekusi adalah “indexController”. Dan jika URL yang dipanggil adalah “/BooksDisplay.htm” maka bean-controller yang diaktifkan selanjutnya adalah booksManagerController.
View Resolver
[sourcecode language=’xml’]
[/sourcecode]
View Resolver mengarahkan view yang akan dipanggil (view name) dengan file yang sebenarnya (actual view).
Ada berbagai jenis view resolver, salah satunya adalah InternalResourceViewResolver.
[sourcecode language=’xml’]
[/sourcecode]
Misalkan pada bean-controller indexController (di atas) memiliki properti viewName “index”. Maka, berdasarkan bean viewResolver yang sudah didefinisikan di atas, selanjutnya dispatcher-servlet akan mengarahkan aplikasi untuk mengeksekusi file /WEB-INF/jsp/index.jsp.
Sedangkan jika bean-controller booksManagerController dipanggil maka aplikasi selanjutnya akan mengeksekusi kelas BooksController pada package com.spring.controller. (bersambung)
Dari Controller ke Model ataupun View (objek ModelAndView)
Nantinya setelah class-controller, BooksController, mengeksekusi code-code yang ada di dalamnya, akan mengembalikan (return) objek ModelAndView. Ada dua kemungkinan proses yang akan terjadi dari pengembalian objek ModelAndView.
- Controller Ke Model
Pertama, jika pengembalian (return) berupa :
[sourcecode language=’java’]
return new ModelAndView(“booksManager”)
[/sourcecode]
maka selanjutnya Spring akan mencari bean “booksManager” yang telah didefinisikan dalam applicationContext.xml.
- Controller Ke View
Kedua, jika pengembalian (return) berupa :
[sourcecode language=’java’]
return new ModelAndView(new RedirectView(“/BooksDisplay.htm”))
[/sourcecode]
maka selanjutnya Spring akan mencari mapping untuk URL “/BooksDisplay.htm” pada dispatcher-servlet.xml
Alur Model-View-Controller
Alur yang terjadi dalam sistem Model-View-Controller (MVC) Spring ditinjau dari dispatcher-servlet :
(1) request URL terjadi.
(2) dispatcher-servlet mengaktifkan bean-controller sesuai dengan mapping yang sudah didefinisikan.
(3) bean-controller ditemukan. Kemudian mengarahkan pada dua alternatif :
(3.1) Langsung ke View Resolver. Contoh : p:viewName=”index”.
(3.1.1) Membuka file fisik. Nama file sesuai dengan nilai properti “viewName”, direktorinya sesuai dengan awalan (prefix )yang didefinisikan pada bean viewResolver, sedangkan ekstensi file tergantung pada akhiran (suffix).
(3.2) ke class-controller. Contoh : class=”com.spring.controller.BooksController”
(3.2.1) kelas BooksController berhasil dieksekusi dan mengembalikan objek ModelAndView. Selanjutnya ada dua kemungkinan.
(3.2.1.1) Pertama, mengarahkan ke model, yaitu eksekusi kepada bean yang didefinisikan di applicationContext.xml. Contoh : return new ModelAndView(“booksManager”).
(3.2.1.2) Kedua, mengarahkan ke view, yaitu eksekusi kepada mapping URL yang didefinisikan di dispatcher-servlet.xml. Contoh : return new ModelAndView(new RedirectView(“/BooksDisplay.htm”)) Ini berarti kembali ke proses (2)
Catatan Kaki
- “bean-controller” : bean yang berada dalam dispatcher-servlet.xml. Bukan bean di applicationContext.xml
- “class-controller” : kelas yang dirujuk oleh bean-controller.
- applicationContext.xml adalah file xml application context pada Spring. Penamaan file ini bisa diubah.
- dispatcher-servlet.xml adalah file xml dispatcher servlet pada Spring. Penamaan file ini bisa diubah.
Referensi Bagus
- Pro-Spring. Rob Harrop dan Jan Machacek. Springer-Verlag : New York. 2004
- Spring Java/J2EE Application Framework. Rod Johnson, dkk.2004
- Spring In Action. Craig Walls dan Ryan Braidenbach. Manning Publication : Greenwich. 2005
::Sebuah Catatan Tentang Spring::