1. Memulai Dasar -Dasar SpringMVC, Buat Program HelloWorld
1. Pertama, impor paket JAR yang disyaratkan oleh SpringMVC.
2. Tambahkan konfigurasi tentang springmvc di file konfigurasi web.xml
<!-Mengkonfigurasi pengaturan springmvcdispatcherServlet dan konfigurasikan pemetaan-> <servlet> <servlet-name> springmvc </servlet-name> <servlet-class> org.springframework.web.servlet.dispatcherServlet </servlet-class> <init-param> <param-name-name> contexcercerCerver </servlet-class> <init-param> <param-name-name> contextcatchleCer </servlet <param-value>classpath:springmvc-servlet.xml</param-value> </init-param> <!-- <load-on-startup>1</load-on-startup> --> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
3. Tambahkan file konfigurasi springmvc-servlet.xml di bawah src
<? XML Versi = "1.0" encoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmls xmlns: context = "http://www.springframework.org/schema/context" xmlns: mvc = "http://www.springframework.org/schema/mvc" xsi: schemalocation = "http:BaMaM.MFC" xsi: schemalocation = "http:B http://www.springframework.org/schema/beans/spring-leans.xsd http://www.springframework.org/schema/context http:/www.spramework.org/schema/context http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4. resource --> <mvc:default-servlet-handler /> <!-- if you use annotation you must configure following setting --> <mvc:annotation-driven /> <!-- configure the InternalResourceViewResolver --> <bean id="internalResourceViewResolver"> <!-- prefix--> <property name="prefix" value="/WEB-INF/jsp/" /> <!-Suffix-> <name properti = "sufiks" value = ". jsp"/> </ bean> </tac>
4. Buat folder bernama JSP di folder web-inf untuk menyimpan tampilan JSP. Buat hello.jsp dan tambahkan "Hello World" ke tubuh Anda.
5. Buat paket dan pengontrol seperti yang ditunjukkan di bawah ini
6. Tulis kode pengontrol
@Controller @requestMapping ("/mvc") kelas publik mvccontroller {@RequestMapping ("/hello") string publik hello () {return "hello"; }}7. Mulai server dan ketik http: // localhost: 8080/nama proyek/mvc/halo
1.DispatcherServlet
DispatcherServlet adalah pra-kontrol yang dikonfigurasi dalam file web.xml. Mencegat permintaan pencocokan. Aturan pencocokan yang mencegat servlet harus didefinisikan dengan sendirinya. Permintaan yang dicegat didistribusikan ke pengontrol target sesuai dengan aturan yang sesuai untuk diproses. Ini adalah langkah pertama dalam mengkonfigurasi MVC Spring.
2.NternalResourCeviewResolver
Lihat Resolver Nama
3. Anotasi di atas
@Controller bertanggung jawab untuk mendaftarkan kacang ke dalam konteks musim semi
@Requestmapping Anotasi Menentukan permintaan URL mana yang dapat diproses untuk pengontrol
@Controller
Bertanggung jawab untuk mendaftarkan kacang ke dalam konteks musim semi
@Requestmapping
Anotasi Menentukan permintaan URL mana yang dapat diproses untuk pengontrol
@RequestBody
This annotation is used to read part of the body data of the Request request, use the HttpMessageConverter configured by the system for parsing, and then bind the corresponding data to the object to be returned, and then bind the object data returned by HttpMessageConverter to the parameters of the method in the controller
@ResponseBody
Anotasi ini digunakan untuk menulis objek yang dikembalikan dengan metode pengontrol ke area data tubuh dari objek respons setelah mengubahnya ke httpmessageConverter yang sesuai ke format yang ditentukan
@Modelattribute
Gunakan anotasi @modelattribute pada definisi metode: Spring MVC sebelum memanggil metode pemrosesan target, metode yang menganotasi @modelattribute pada level metode akan disebut satu per satu.
Gunakan anotasi @modelattribute sebelum memasukkan parameter metode: Anda dapat memperoleh objek dari objek implisit, mengikat parameter permintaan ke objek, dan kemudian meneruskan metode ke dalam objek parameter untuk menambahkan metode ke dalam model.
@RequestParam
Gunakan @RequestParam untuk meneruskan parameter permintaan ke metode permintaan
@PathVariable
Bind Placeholder URL ke Parameter Masuk
@ExceptionHandler
Dianotasi pada metode ini, metode ini akan dieksekusi ketika pengecualian terjadi
@ControllerAdvice
Jadikan pengontrol kelas penanganan pengecualian global. Metode yang dianotasi dengan metode @ExceptionHandler di kelas dapat menangani semua pengecualian yang terjadi pada pengontrol.
// Cocokkan secara otomatis @RequestMapping ("/orang") Public String Toperson (nama string, usia ganda) {System.out.println (name+""+usia); Kembalikan "Halo"; }1. Tulis kelas entitas seseorang
paket test.springmvc.model; class public class person {public string getName () {return name; } public void setName (name string) {this.name = name; } public int getage () {usia kembali; } public void setage (int usia) {this.age = usia; } nama string pribadi; usia int pribadi; }2. Metode Tulis di Pengontrol
// tinju secara otomatis @RequestMapping ("/person1") Public String Toperson (Person P) {System.out.println (p.getName ()+""+p.getage ()); Kembalikan "Halo"; } // parameter dikonversi di initbinder @RequestMapping ("/date") Tanggal string publik (tanggal tanggal) {System.out.println (tanggal); Kembalikan "Halo"; } // Pada saat inisialisasi, konversi tipe "string" untuk mengetik "date" @initbinder public void initbinder (servletRequestDatabinder binder) {binder.registercustomeditor (date.class, customDateEditor baru (new SimpleFormat ("yyyy-mm-dd"), true); } // Lewati parameter ke front-end @RequestMapping ("/show") public string showperson (peta <string, objek> peta) {person p = orang baru (); peta.put ("p", p); p.setage (20); p.setname ("jayjay"); mengembalikan "Tampilkan"; }Meja depan bisa mendapatkan "p" di domain permintaan
// Lewati parameter ke front-end menggunakan ajax @requestmapping ("/getperson") public void getPerson (nama string, printwriter pw) {pw.write ("halo,"+nama); } @RequestMapping ("/name") Public String sayshello () {return "name"; }Meja depan memanggilnya dengan kode jQuery berikut
$ (function () {$ ("#btn"). Klik (function () {$ .post ("MVC/GETPERSON", {name: $ ("#name"). Val ()}, function (data) {alert (data);});});}); // redirect @requestmapping ("/redirect") public string redirect () {return "redirect: hello"; }1. Dua paket stoples perlu diimpor
2. Tambahkan file konfigurasi springmvc
<!-Unggah Pengaturan-> <bean id = "multipartresolver"> <name properti = "maxuploadsize" value = "102400000"> </properti
3. Kode Metode
@RequestMapping (value = "/unggah", metode = requestMethod.post) Upload string publik (httpservletRequest req) melempar pengecualian {multipartttpservletRequest mreq = (multiparthtpservletrequest) req; File multipartfile = mreq.getFile ("file"); String filename = file.getoriginalFileName (); SimpleDateFormat SDF = new SimpleDateFormat ("yyyymmddhhmmss"); FileOutputStream fos = FileOutputStream baru (req.getSession (). GetSerVletContext (). GetRealPath ("/")+"Unggah/"+sdf.format (tanggal baru ())+filename.substring (fileName.LastIndexof ('.')))); fos.write (file.getbytes ()); fos.flush (); fos.close (); Kembalikan "Halo"; }4. Formulir Meja Depan
<Form Action = "mvc/unggah" metode = "post" enctype = "multipart/form-data"> <input type = "file" name = "file"> <br> <input type = "kirim" value = "kirim"> <form>
@Controller @requestMapping ("/test") kelas publik mvccontroller1 {@RequestMapping (value = "/param") Public String testRequestParam (@RequestParam (value = "id") Integer ID, @RequestParam (value = "name") Name string) {System.out.println (Id+"Name") (nama ") {System.out.println (Id+" Name ") (nama") {System.out.println (iD+"Name") {out.println (Id+"name") {out.println (iD+"name") {oLT.OUTLN (Println (Id+") kembali "/halo"; }}1.RestController
@Controller@requestMapping ("/rest") kelas publik restcontroller {@RequestMapping (value = "/user/{id}", method = requestMethod.get) string publik get (@pathvariable ("id") integer id) {System.out.println ("get"+id); kembali "/halo"; } @RequestMapping (value = "/user/{id}", method = requestMethod.post) POST string publik (@pathvariable ("id") integer id) {System.out.println ("POST"+ID); kembali "/halo"; } @RequestMapping (value = "/user/{id}", method = requestMethod.put) string publik put (@pathvariable ("id") integer id) {system.out.println ("put"+id); kembali "/halo"; } @RequestMapping (value = "/user/{id}", method = requestMethod.delete) Public String delete (@PathVariable ("id") Integer ID) {System.out.println ("Delete"+ID); kembali "/halo"; }}2.Form formulir mengirimkan permintaan dan hapus permintaan
Konfigurasikan di web.xml
<!-Mengkonfigurasi HiddenHttPMethodFilter, Konversi metode POST untuk menempatkan atau menghapus-> <nilter> <nilter-name> HiddenHttpMethodFilter </tiler-name> <nilter-class> org.springframework.web.filter.hiddenHttpMethodfilter </clfertass. <filter-name> hiddenhttpmethodfilter </tiler-name> <ratl-pola>/*</url-pola> </filter-mapping>
Di latar depan, Anda dapat menggunakan kode berikut untuk menghasilkan permintaan
<form action="rest/user/1" method="post"> <input type="hidden" name="_method" value="PUT"> <input type="submit" value="put"> </form> <form action="rest/user/1" method="post"> <input type="submit" value="post"> </form> <form action="rest/user/1" method="post"> <input type = "Kirim" value = "get"> </form> <form Action = "REST/USER/1" METODE = "POST"> <input type = "hidden" name = "_ Method" value = "delete"> <input type = "kirim" value = "delete"> </form>
1. Impor paket stoples berikut
2. Kode Metode
@Controller @requestMapping ("/json") kelas publik jsonController {@responseBody @RequestMapping ("/user") pengguna publik get () {user u = pengguna baru (); u.setid (1); u.setname ("jayjay"); u.setbirth (tanggal baru ()); mengembalikanmu; }}1. Tangani Pengecualian Lokal (dalam Pengontrol)
@ExceptionHandler Public ModelAndView ExceptionHandler (Exception ex) {ModelAndView mv = new ModelAndView ("error"); MV.AddObject ("Exception", Ex); System.out.println ("Dalam TestExceptionHandler"); mengembalikan MV; } @RequestMapping ("/error") Public String error () {int i = 5/0; Kembalikan "Halo"; }2. Tangani Pengecualian Global (Semua Pengendali)
@ControllerAdvicePublic kelas testControllerAdvice {@ExceptionHandler Public ModelAndView ExceptionHandler (Exception ex) {ModelAndView mv = new ModelAndView ("error"); MV.AddObject ("Exception", Ex); System.out.println ("Di TestControllerAdvice"); mengembalikan MV; }}3. Cara lain untuk menangani pengecualian global
Konfigurasikan dalam file konfigurasi springmvc
<!-Mengkonfigurasi SimpleMappingExceptionResolver-> <bean> <properti name = "exceptionmappings"> <s props> <prop key = "java.lang.arithmeticException"> Kesalahan </prop> </props> </properti </bean>
Kesalahan adalah halaman kesalahan
1. Buat kelas myinterceptor dan terapkan antarmuka handlerinterceptor
kelas publik myInterceptor mengimplementasikan handlerinterceptor {@Override public void aftercompletion (httpservletrequest arg0, httpservletResponse arg1, objek arg2, pengecualian arg3) melempar pengecualian {system.out.println ("aftercompletion"); } @Override public void posthandle (httpservletRequest arg0, httpservletResponse arg1, objek arg2, modelAndView arg3) melempar pengecualian {system.out.println ("posthandle"); } @Override Public boolean prehandle (httpservletrequest arg0, httpservletResponse arg1, objek arg2) melempar pengecualian {system.out.println ("prehandle"); Kembali Benar; }}2. Konfigurasi dalam file konfigurasi springmvc
<!-Pengaturan Interceptor-> <MVC: Interceptors> <mvc: Interceptor> <mvc: mapping path = "/mvc/**"/> <tean> </t bean> gt; </mvc: Interceptor> </mvc: Interceptors>
3. Pesanan Eksekusi Interceptor
1. Impor Paket JAR yang Diperlukan oleh Hibernate-Validate
(Tidak dipilih, tidak perlu mengimpor)
2. Pengguna kelas entitas menulis dan tambahkan anotasi verifikasi
pengguna kelas publik {public int getId () {return id; } public void setid (int id) {this.id = id; } public string getName () {return name; } public void setName (name string) {this.name = name; } tanggal publik getBirth () {return kelahiran; } public void setBirth (tanggal lahir) {this.birth = kelahiran; } @Override public string toString () {return "user [id =" + id + ", name =" + name + ", lahir =" + lahir + "]"; } private int id; @NotEempty Private String Name; @Past @datetimeformat (pola = "yyyy-mm-dd") kencan pribadi;}PS: @past berarti waktu harus menjadi nilai masa lalu
3. Gunakan bentuk Formulir SpringMVC di JSP
<form:form action="form/add" method="post" modelAttribute="user"> id:<form:input path="id"/><form:errors path="id"/><br> name:<form:input path="name"/><form:errors path="name"/><br> birth:<form:input path="birth"/><form:errors path="birth"/><form:errors path = "lahir"/> <form: kesalahan path = "lahir"/> <form: kesalahan path = "lahir"/> <input type = "kirim" value = "kirim"> </form: form>
PS: jalur yang sesuai dengan nama
4. Kode dalam Pengontrol
@Controller@requestMapping ("/Form") kelas publik FormController {@RequestMapping (value = "/add", Method = requestMethod.post) Public String Add (@Valid User U, BindingResult Br) {if (br.getErrorCount ()> 0) {return "adduser"; } return "showUser"; } @RequestMapping (value = "/add", Method = requestMethod.get) public String add (peta <string, objek> peta) {map.put ("user", user baru ()); mengembalikan "adduser"; }}PS:
1. Karena atribut ModelAttribute digunakan dalam JSP, harus ada "pengguna" di domain permintaan.
2.@valid berarti memverifikasi parameter sesuai dengan anotasi yang ditandai pada entitas
3. Kembali ke halaman asli untuk mengekspresikan kembali, dan formulir juga akan mengekspresikan kembali.
5. Kustomisasi pesan kesalahan
Tambahkan lokal.properties di direktori SRC
Notempty.user.name = nama tidak bisa tidak emptypast.user.birth = kelahiran harus masa lalu hormateatimeformat.user.birth = format input adalah WrongTypeMismatch.User.
Konfigurasikan dalam file konfigurasi springmvc
<!-Mengkonfigurasi sumber daya lokal-> <bean id = "messesource"> <name properti = "basa" value = "locale"> </propert> </ bean>
6. Tampilan Internasional
Tambahkan locale_zh_cn.properties di bawah SRC
Nama pengguna = Kata sandi akun = Kata sandi
Ditambahkan di locale.properties
UserName = pengguna namepassword = kata sandi
Buat locale.jsp
<body> <fmt: kunci pesan = "nama pengguna"> </fmt: pesan> <fmt: tombol pesan = "kata sandi"> </fmt: pesan> </body>
Konfigurasikan di SpringMVC
<!-Buat halaman JSP dapat dikunjungi-> <mvc: view-controller path = "/locale" view-name = "locale"/>
Biarkan locale.jsp diakses langsung di bawah Web-INF
Akhirnya, kunjungi locale.jsp, beralih bahasa browser, dan bahasa yang dapat melihat akun dan kata sandi juga telah dialihkan.
1. Buat paket test.springmvc.integrate untuk menunjukkan integrasi dan membuat berbagai jenis
2. Pengguna Kelas Entitas
pengguna kelas publik {public int getId () {return id; } public void setid (int id) {this.id = id; } public string getName () {return name; } public void setName (name string) {this.name = name; } tanggal publik getBirth () {return kelahiran; } public void setBirth (tanggal lahir) {this.birth = kelahiran; } @Override public string toString () {return "user [id =" + id + ", name =" + name + ", lahir =" + lahir + "]"; } private int id; @NotEempty Private String Name; @Past @datetimeformat (pola = "yyyy-mm-dd") kencan pribadi;}3.SerService Class
@ComponentPublic kelas UserserService {Public Userservice () {System.out.println ("Konstruktor UsersEver .../n/n/n/n/n/n/n/n/n/n"); } public void save () {System.out.println ("save"); }}4.Usercontroller
@Controller @requestMapping ("/integrate") kelas publik usercontroller {@autowired private userservice userServerService; @RequestMapping ("/user") Public String SaveUser (@RequestBody @ModelAttribute User u) {System.out.println (u); Userservice.save (); Kembalikan "Halo"; }}5. File Konfigurasi Pengapur
Buat file konfigurasi springioC ApplicationContext.xml di direktori src
<? XML Versi = "1.0" encoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmls xsi: schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/util http://www.spramework.org/schema/util http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd "xmlns: util =" http:/wwww.spramork xmlns: p = "http://www.springframework.org/schema/p" xmlns: context = "http://www.springframework.org/schema/context"> <konteks: komponen-pemangkasan basis pangkalan = "test. Ekspresi = "org.springframework.steretype.controller"/> <konteks: mengecualikan filter type = "annotation" expression = "org.springframework.web.bind.annotation.controllerAdvice"/> </konteks: komponen-scan> </beans>
Tambahkan konfigurasi di web.xml
<!-Mengkonfigurasi springioc-> <listener> <Distener-Class> org.springframework.web.context.contextLoaderListener </ listener-class> </engeaner> <param-param> <param-name> ContextConfigLocation </param-name> <param-value> classpath: classontcextcextcext
6. Buat beberapa konfigurasi di springmvc untuk mencegah springmvc dan springioc dari manajemen yang tumpang tindih dari objek yang sama
<!-Pindai paket dan paket sub-> <konteks: komponen-scan-package = "test.springmvc.integrate"> <Context: include-filter type = "annotation" expression = "org.springframework.steretype.controller"/> <konteks: termasuk tipe-filter = "annotation" ekspresi = "org.springframework.web.bind.annotation.controllerAdvice"/> </konteks: component-scan>
1. SpringMVC dikembangkan berdasarkan metode, dan Struts2 dikembangkan berdasarkan kelas. SpringMVC memetakan URL dan metode dalam pengontrol. Setelah pemetaan berhasil, SpringMVC menghasilkan objek pawang, yang hanya mencakup metode. Eksekusi metode berakhir dan data parameter formal dihancurkan. Pengembangan pengontrol SpringMVC mirip dengan pengembangan layanan web.
2. SpringMVC dapat melakukan pengembangan singleton, dan disarankan untuk menggunakan pengembangan singleton. Struts2 menerima parameter melalui variabel anggota kelas. Singleton tidak dapat digunakan, hanya beberapa kasus yang dapat digunakan.
3. Setelah pengujian yang sebenarnya, struts2 lambat, karena menggunakan tag struts. Jika Anda menggunakan struts, disarankan untuk menggunakan JSTL.