Topik lompat sederhana
Saya pribadi merekomendasikan mempraktikkan proses konstruksi lagi. Jika Anda merasa merepotkan, Anda dapat menyalin proyek sebelumnya secara langsung, tetapi Anda perlu memodifikasi sedikit informasi di pom.xml.
<groupId> com.hanpang.springmvc </groupid> <ArTifactId> springmvc-demo01 </stifactid> <version> 0.0.1-snapshot </version>
1. Kelas Konfigurasi Inti dan Kelas Pemuatan
Paket com.hanpang.config; impor org.springframework.context.annotation.componentscan; import org.springframework.context.annotation.configuration; impor; org.springframework.web.servlet.config.annotation.enableWebMvc;@configuration@enableWebMvc@componentscan (basepackages = "com.hanpang. **. Web") WebConfig kelas publik {} Paket com.hanpang.config; impor org.springframework.web.servlet.support.AbstractannotationConfigDispatcherServletInitizer; Kelas Publik WebInitializer memperluas abstractAnnotationConfigDispatcherServletializer {@override class yang dilindungi <? {Webconfig.class}; } @Override Class Protected <?> [] GetServletConfigClasses () {return null; } @Override Protected String [] getServerMappings () {return new string [] {"/"}; }}2. Javaweb Stage Jump Metode
Harap perhatikan parameter formal dalam metode SpringMVC, kerangka kerja menyelesaikan operasi instantiasi untuk kami.
Paket com.hanpang.web; impor java.io.ioException; impor javax.servlet.servletException; impor javax.servlet.http.httpservletRequest; impor javax.servlet.http.httpservletrespons; org.springframework.web.bind.annotation.requestmapping; impor org.springframework.web.servlet.modelandview; @controller // Katakan bahwa itu adalah controller public class dan lompatan public {@requestmapping (path = "/test01") lompatan public {@requestmapping (Path = "/test01) permintaan, respons httpservletResponse) melempar servletException, ioException {system.out.println ("Parameter formal dipakai secara default"); request.getRequestDispatcher ("/web-inf/jsp/demo01.jsp"). Forward (Request, Response); kembali nol; } @RequestMapping (path = "/test02") Public ModelAndView Traditional Way Jump_redirect (permintaan httpservletRequest, httpservletResponse response) melempar ioException {System.out.println ("Parameter formal dipasang oleh default"); response.sendredirect (request.getContextPath ()+"/view/result01.jsp"); kembali nol; }} Catatan: Kami hampir tidak lagi menggunakan metode ini, hanya demonstrasi dan ulasan sederhana, setidaknya kami dapat menggunakan metode ini untuk mendapatkan API Servlet !!!
3. Demonstrasi bagaimana pengontrol melompat ke JSP
Di akhir contoh, kami akan menambahkan parser tampilan JSP. Pada awalnya, kami masih akan mengikuti metode tradisional dan memiliki proses langkah demi langkah.
Paket com.hanpang.web; impor java.io.ioException; impor javax.servlet.servletException; impor javax.servlet.http.httpservletRequest; impor javax.servlet.http.httpservletrespons; org.springframework.web.bind.annotation.requestmapping; impor org.springframework.web.servlet.modelandview; @controller // Katakan bahwa itu adalah Model Public Controller (Path = "/Test. ModelAndView (); mav.setViewName ("/web-inf/jsp/demo01.jsp"); mengembalikan mav; } @RequestMapping (path = "/test04") Public ModelAndView Atur metode redirection () {ModelAndView mav = new ModelAndView (); mav.setViewName ("redirect: /view/result01.jsp"); // atau //mav.setViewName(urlbasedViewResolver.redirect_url_prefix+"/view/result01.jsp "); mengembalikan mav; }} Rasanya seperti metode tahap web Java, tetapi awalan sederhana diatur selama pengalihan.
4. Demonstrasi bagaimana pengontrol melompat ke pengontrol
Mirip dengan menelepon dari satu servlet ke yang lain
Paket com.hanpang.web; impor java.io.ioException; impor javax.servlet.servletException; impor javax.servlet.http.httpservletRequest; impor javax.servlet.http.httpservletrespons; org.springframework.web.bind.annotation.requestmapping; impor org.springframework.web.servlet.modelandview; @controller // Katakan bahwa itu adalah model public dan publicon public dan public publy dan publicler {@requestmapping (PATH = "/test05) yang langsung (Path ="/Test05 ") secara langsung {Path ="/Test05) ModelAndView (); mav.setViewName ("/test03"); mengembalikan mav; } @RequestMapping (path = "/test06") Public ModelAndView Set Redirection () {ModelAndView mav = new ModelAndView (); mav.setViewName ("Redirect:/test04"); mengembalikan mav; }} 5. Tambahkan parser tampilan JSP
Selama demonstrasi di atas, kami menemukan bahwa SetViewName di ModelAndView digunakan untuk menyelesaikan lompatan. Data yang disahkan di sini adalah string, tetapi metode pemrosesannya berbeda. Ketika jalur lompatan diawali diawali:, metode pemrosesan berbeda.
Juga, jika kami memiliki beberapa string yang mirip dengan /web-inf/jsp/demo01.jsp, kami menemukan bahwa ada banyak bagian publik. SpringMVC memberi kami kelas yang berspesialisasi dalam menangani permintaan pengontrol meneruskan halaman JSP.
Harap perhatikan deskripsi saya: Jika Anda menemukan bahwa string yang Anda lewati tidak memiliki pengidentifikasi awalan, maka secara default, gunakan konfigurasi parser tampilan JSP untuk menangani dan menyelesaikan operasi penerusan permintaan permintaan
Catatan: Konfigurasikan kelas konfigurasi inti
Paket com.hanpang.config; impor org.springframework.context.annotation.bean; impor org.springframework.context.annotation.conentscan; impor org.springframework.context.annotation.configuration; impor org.springframework.web.web.web.wrervervure org.springframework.web.servlet.config.annotation.enableWebmvc; impor org.springframework.web.servlet.view.internalResourCeviewResolver; impor org.springframework.web.servlet.view.jstlview;@configuration@enableWebMvc@componentscan (basepackages = "com.hanpang. **. Web") WebConfig kelas publik {@bean // instantiate viewResolver publicolver viewResolver () {) {@bean // instantiate public viewResolver viewResolver () {) {) {) {) {) {@bean // instantiate public viewresolver () {@bean // instantiate public viewResolver () {@bean/@bean/{bean/@beancolver () InternalResourCeviewResolver (); jspviewresolver.setViewClass (jstlview.class); // springmvc mendukung tag jstl jspviewresolver.setprefix ("/web-inf/"); jspviewresolver.setuffix (". jsp"); return jspviewResolver; }} ** Catatan: ** Harap perhatikan anotasi pada metode @Bean
Metode ini setara dengan kode di XML sebagai berikut
<bean id = "jspresourceviewResolver"> <name properti = "prefix" value = "/web-inf/"/> <properti name = "suffix" value = ". jsp"/> <name properti = "viewclass" value = "org.springframework.web.servlet.view.jstlass"> org.springframework
Tingkatkan Kode JSP Controller Jump
Parser tampilan ini hanya dapat meneruskan permintaan JSP dan tidak valid untuk pengalihan. Harap perhatikan konten komentar kode
@RequestMapping (path = "/test03") Public ModelAndView Secara default, itu diminta penerusan () {ModelAndView mav = new ModelAndView (); //mav.setViewName("/web-intrip/jsp/demo01.jsp "); // Advanced: Secara default, itu akan ditangani menggunakan JSP View Parser, // Prefix+"JSP/Demo01"+suffix => /web-inf/jsp/demo01.jsp mav.setviewName ("jsp/demo01"); // Saya menemukan bahwa string tidak memiliki awalan modifikasi mengembalikan mav; } @RequestMapping (path = "/test04") Public ModelAndView Atur metode redirection () {ModelAndView mav = new ModelAndView (); // parser membatalkan pengalihan mav.setviewName ("redirect: /view/result01.jsp"); mengembalikan mav; } Tingkatkan kode pengontrol lompatan pengontrol
@RequestMapping (path = "/test05") Public ModelAndView secara langsung mengatur path pemetaan () {ModelAndView mav = new ModelAndView (); mav.setViewName ("/test03"); kembalikan mav;}Setelah mengkonfigurasi parser tampilan JSP, uji kode di atas lagi, dan lihat hasil akses dengan terkejut.
Ini sesuai dengan apa yang kami katakan sebelumnya "/test03" adalah string yang akan diproses secara default menggunakan parser tampilan JSP. Jadi bagaimana cara memperbaikinya?
Anda dapat mengatur awalan "maju:", dan kode ditingkatkan sebagai berikut:
@RequestMapping (path = "/test05") Public ModelAndView secara langsung mengatur path pemetaan () {ModelAndView mav = new ModelAndView (); mav.setViewName ("Forward:/test03"); // atau //mav.setViewName(urlbasedViewResolver.forward_url_prefix+"/test03 "); kembalikan mav;} Ketika string ditemukan dimodifikasi dengan maju:, situasi pemrosesan berubah untuk dikonversi dari permintaan pengontrol ke pengontrol lain. Jika pengalihan dilakukan, kode ini adalah sebagai berikut:
@RequestMapping (path = "/test06") Public ModelAndView Set Redirect () {ModelAndView mav = new ModelAndView (); mav.setViewName ("Redirect:/test04"); kembalikan mav;} 6. LAMPIRAN LAMPIRAN
InternalResourCeviewResolver: Ini adalah subkelas dari UrlbasedViewResolver, sehingga mendukung semua fitur yang didukung oleh UrlbasedViewResolver.
Dalam aplikasi praktis, InternalResourCeviewResolver juga merupakan resolver tampilan yang paling banyak digunakan. Jadi apa saja fitur unik dari InternalResourCeviewResolver?
Dari sudut pandang literal, kita dapat menafsirkan internalResourCeviewResolver sebagai resolver tampilan sumber daya internal. Ini adalah fitur internalResourCeviewResolver.
InternalResourCeviewResolver akan menyelesaikan nama tampilan yang dikembalikan menjadi objek internalResourCeview. InternalResourCeview akan menyimpan atribut model yang dikembalikan oleh metode prosesor pengontrol dalam atribut permintaan yang sesuai, dan kemudian mengarahkan kembali permintaan ke depan ke URL target di sisi server melalui RequestDispatcher.
Misalnya, di InternalResourCeViewResolver, awalan =/web-inf/, suffix = .jsp didefinisikan dalam internalResourCeviewResolver, dan kemudian nama tampilan yang dikembalikan oleh metode prosesor pengontrol yang diminta diuji. Pada saat ini, InternalResourCeViewResolver akan menguraikan tes ke dalam objek internalResourCeview, pertama menyimpan atribut model yang dikembalikan dalam atribut httpservletRequest yang sesuai, dan kemudian menggunakan RequestDispatcher untuk meneruskan permintaan ke /web-inf/test.jsp di sisi server. Ini adalah fitur yang sangat penting dari InternalResourCeviewResolver. Kita semua tahu bahwa konten yang disimpan di / web-inf / tidak dapat langsung diminta melalui permintaan permintaan. Untuk alasan keamanan, kami biasanya menempatkan file JSP di direktori web-INF, dan cara internalResourCeview melompat di sisi server dapat menyelesaikan masalah ini dengan baik. Di bawah ini adalah definisi internalResourCeviewResolver. Menurut definisi ini, ketika nama tampilan logis yang dikembalikan diuji, InternalResourCeviewResolver akan menambahkan awalan dan akhiran yang ditentukan, formulir "/web-inf/test.jsp", dan kemudian menggunakannya sebagai url internalResourceview untuk membuat objek internalResourceview baru.
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.