Tugas DispatcherServlet adalah mengambil URI yang masuk dan menemukan kombinasi penangan yang tepat (umumnya metode pada kelas Kontroler ) dan tampilan (umumnya JSP) yang bergabung untuk membentuk halaman atau sumber daya yang seharusnya ditemukan di lokasi itu.
Saya mungkin punya
The servlet Dispatcher adalah bit yang "tahu" untuk memanggil metode yang saat browser meminta halaman, dan untuk menggabungkan hasilnya dengan pencocokan berkas JSP untuk membuat dokumen html.
Cara melakukannya bervariasi dengan konfigurasi dan versi Spring.
Tidak ada alasan mengapa hasil akhirnya adalah halaman web. Itu dapat melakukan hal yang sama untuk menemukan titik akhir RMI , menangani permintaan SOAP , apa pun yang dapat masuk ke servlet.
Dispatcher Servlet
file xml saat menggunakan Berbasis Anotasi@RestController
?Di Spring MVC, semua permintaan masuk melewati satu servlet. Servlet ini -
DispatcherServlet
- adalah pengontrol depan. Pengontrol depan adalah pola desain khas dalam pengembangan aplikasi web. Dalam hal ini, satu servlet menerima semua permintaan dan mentransfernya ke semua komponen lain dari aplikasi.Tugasnya
DispatcherServlet
adalah mengirim permintaan ke kontroler Spring MVC tertentu.Biasanya kami memiliki banyak pengontrol dan
DispatcherServlet
merujuk ke salah satu pemetaan berikut untuk menentukan pengontrol target:BeanNameUrlHandlerMapping
;ControllerBeanNameHandlerMapping
;ControllerClassNameHandlerMapping
;DefaultAnnotationHandlerMapping
;SimpleUrlHandlerMapping
.Jika tidak ada konfigurasi yang dilakukan,
DispatcherServlet
penggunaanBeanNameUrlHandlerMapping
danDefaultAnnotationHandlerMapping
secara default.Ketika pengontrol target diidentifikasi,
DispatcherServlet
mengirimkan permintaan untuk itu. Pengontrol melakukan beberapa pekerjaan sesuai dengan permintaan (atau mendelegasikannya ke objek lain), dan kembali keDispatcherServlet
dengan Model dan nama Tampilan.Nama Tampilan hanya nama logis. Nama logis ini kemudian digunakan untuk mencari Tampilan aktual (untuk menghindari penggandaan dengan controller dan Tampilan spesifik). Kemudian
DispatcherServlet
merujuk keViewResolver
dan memetakan nama logis Tampilan ke implementasi spesifik Tampilan.Beberapa kemungkinan Implementasi
ViewResolver
adalah:BeanNameViewResolver
;ContentNegotiatingViewResolver
;FreeMarkerViewResolver
;InternalResourceViewResolver
;JasperReportsViewResolver
;ResourceBundleViewResolver
;TilesViewResolver
;UrlBasedViewResolver
;VelocityLayoutViewResolver
;VelocityViewResolver
;XmlViewResolver
;XsltViewResolver
.Ketika
DispatcherServlet
menentukan tampilan yang akan menampilkan hasil itu akan diberikan sebagai respons.Akhirnya,
DispatcherServlet
mengembalikanResponse
objek kembali ke klien.sumber
DispatcherServlet
adalah implementasi Spring MVC dari pola front controller .Lihat deskripsi di dokumen Spring di sini .
Pada dasarnya, ini adalah servlet yang mengambil permintaan masuk, dan mendelegasikan pemrosesan permintaan itu ke salah satu dari sejumlah penangan, pemetaan yang spesifik dalam
DispatcherServlet
konfigurasi.sumber
DispatcherServlets
, jika arsitektur Anda lebih masuk akal seperti itu, tetapi biasanya tidak ada alasan untuk itu.Saya tahu pertanyaan ini ditandai sudah dipecahkan tetapi saya ingin menambahkan gambar yang lebih baru yang menjelaskan pola ini secara detail (sumber: spring in action 4):
Penjelasan
Ketika permintaan meninggalkan browser (1) , ia membawa informasi tentang apa yang diminta pengguna. Paling tidak, permintaan akan membawa URL yang diminta. Tetapi itu juga dapat membawa data tambahan, seperti informasi yang dikirimkan dalam bentuk oleh pengguna.
Perhentian pertama dalam perjalanan permintaan adalah di Spring's DispatcherServlet. Seperti kebanyakan kerangka kerja web berbasis Java, Spring MVC menyalurkan permintaan melalui servlet pengontrol depan tunggal. Pengontrol depan adalah pola aplikasi web umum di mana satu servlet mendelegasikan tanggung jawab untuk permintaan ke komponen lain dari aplikasi untuk melakukan pemrosesan aktual. Dalam kasus Spring MVC, DispatcherServlet adalah pengontrol depan. Tugas DispatcherServlet adalah mengirim permintaan ke pengontrol Spring MVC. Kontroler adalah komponen pegas yang memproses permintaan. Tetapi aplikasi tipikal mungkin memiliki beberapa pengontrol, dan DispatcherServlet membutuhkan bantuan untuk memutuskan pengontrol mana yang akan dikirimi permintaan. Jadi DispatcherServlet berkonsultasi dengan satu atau lebih pemetaan pawang (2)untuk mencari tahu di mana perhentian permintaan berikutnya akan berada. Pemetaan pawang memberikan perhatian khusus pada URL yang dibawa oleh permintaan saat membuat keputusan. Setelah pengontrol yang sesuai telah dipilih, DispatcherServlet mengirimkan permintaan dengan cara yang meriah ke pengontrol yang dipilih (3). Pada controller, permintaan menurunkan muatannya (informasi yang dikirimkan oleh pengguna) dan dengan sabar menunggu sementara controller memproses informasi itu. (Sebenarnya, pengontrol yang dirancang dengan baik melakukan sedikit atau tidak sama sekali pemrosesan itu sendiri dan alih-alih mendelegasikan tanggung jawab untuk logika bisnis ke satu atau lebih objek layanan.) Logika yang dilakukan oleh pengontrol sering menghasilkan beberapa informasi yang perlu dibawa kembali ke pengguna dan ditampilkan di browser. Informasi ini disebut sebagai model. Tetapi mengirimkan informasi mentah kembali ke pengguna tidak mencukupi — itu perlu diformat dalam format yang ramah pengguna, biasanya HTML. Untuk itu, informasi perlu diberikan kepada tampilan, biasanya JavaServer Page (JSP). Salah satu hal terakhir yang dilakukan pengontrol adalah mengemas data model dan mengidentifikasi nama tampilan yang harus menampilkan output. Itu kemudian mengirimkan permintaan, bersama dengan model dan melihat nama, kembali ke DispatcherServlet(4) . Agar pengontrol tidak bisa digabungkan ke tampilan tertentu, nama tampilan yang dikembalikan ke DispatcherServlet tidak secara langsung mengidentifikasi JSP tertentu. Bahkan tidak selalu menyarankan bahwa tampilan adalah JSP. Alih-alih, itu hanya membawa nama logis yang akan digunakan untuk mencari tampilan aktual yang akan menghasilkan hasilnya. DispatcherServlet berkonsultasi dengan resolver view (5) untuk memetakan nama view logis ke implementasi tampilan spesifik, yang mungkin atau mungkin bukan JSP. Sekarang DispatcherServlet tahu tampilan mana yang akan memberikan hasilnya, pekerjaan permintaan hampir berakhir. Pemberhentian terakhir adalah pada implementasi tampilan (6), biasanya JSP, di mana ia memberikan data model. Pekerjaan permintaan itu akhirnya selesai. Pandangan akan menggunakan data model untuk membuat output yang akan dibawa kembali ke klien oleh objek respons (tidak-jadi-pekerja keras) (7) .
sumber
@Controller
metode yang disebut yang@ResponseBody
menunjukkan bahwa respons yang dikembalikan harus langsung ditulis pada badan respons HTTP, tidak untuk ditempatkan dalam Model atau diselesaikan sebagai tampilan apa pun. .Kita dapat mengatakan seperti
DispatcherServlet
mengurus semuanya di Spring MVC.Di wadah web mulai:
DispatcherServlet
akan dimuat dan diinisialisasi denganinit()
metode panggilaninit()
dariDispatcherServlet
akan mencoba mengidentifikasi Dokumen Konfigurasi Spring dengan konvensi penamaan seperti"servlet_name-servlet.xml"
semua kacang dapat diidentifikasi.Contoh:
Jadi, secara umum
DispatcherServlet
tangkap permintaan URI dan serahkan keHandlerMapping
.HandlerMapping
cari pemetaan kacang dengan metode pengontrol, di mana pengontrol mengembalikan nama logis (tampilan). Maka nama logis ini dikirim keDispatcherServlet
olehHandlerMapping
. KemudianDispatcherServlet
beri tahuViewResolver
untuk memberikan lokasi tampilan penuh dengan menambahkan awalan dan akhiran, kemudianDispatcherServlet
berikan tampilan kepada klien.sumber
Pengendali Dispatcher ditampilkan pada gambar, semua permintaan yang masuk dicegat oleh servlet operator yang berfungsi sebagai pengontrol depan. Servlet dispatcher mendapat entri untuk pemetaan handler dari file XML dan meramalkan permintaan ke Controller.
sumber
sumber