1. البدء في أساسيات springMVC ، قم بإنشاء برنامج HelloWorld
1. أولاً ، استيراد حزمة الجرة المطلوبة بواسطة springMVC.
2. أضف التكوين حول springmvc في ملف تكوين web.xml
<!-قم بتكوين إعداد springmvcdispatcherservlet وتكوين التعيين-> <vervlet> <Sradlet-Name> springmvc </servlet-name> <Servlet-Class> org.springframework.web.servlet.dispatherservlet </ith-param> <Ingl-name> <Param-value> classpath: springmvc-servlet.xml </param-value> </ith-param> <!-<load-on-startup> 1 </over-on-startup>-> </radlet> <Servlet-mapping> <servlet-name> springmvc </servlet-name>
3. إضافة ملف تكوين springmvc-servlet.xml ضمن SRC
<؟ xmlns: context = "http://www.springframework.org/schema/context" xmlns: mvc = "http://www.springframework.org/schema/mvc" XSI: Schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/sctxt http://www.springframework.org/schema/context/spring-context-4.1.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc-4 <!-مسح الحزمة والحزمة الفرعية-> <السياق: مكون-المسح القاعدة ـ "test.springmvc" /> <!-لا تتعامل مع المورد الثابت-> <mvc: default-servled-lextler /> <!- id = "internalResourceViewResolver"> <!-prefix-> <property name = "prefix" value = "/web-inf/jsp/"/> <!-factix-> <property name = "falue"
4. قم بإنشاء مجلد يدعى JSP في مجلد Web-Inf لتخزين عرض JSP. قم بإنشاء hello.jsp وأضف "Hello World" إلى جسمك.
5. قم بإنشاء الحزمة ووحدة التحكم كما هو موضح أدناه
6. كتابة رمز وحدة التحكم
@controller @requestMapping ("/mvc") الفئة العامة mvcController { @requestmapping ("/hello") السلسلة العامة hello () {return "hello" ؛ }}7. ابدأ الخادم واكتب http: // localhost: 8080/اسم المشروع/mvc/hello
1. Dispatcherservlet
Dispatcherservlet هو مُتكوين مسبقًا في ملف web.xml. اعتراض طلبات المطابقة. يجب تعريف Servlet اعتراض قواعد المطابقة في حد ذاته. يتم توزيع الطلبات المعتادة على وحدة التحكم المستهدفة وفقًا للقواعد المقابلة للمعالجة. هذه هي الخطوة الأولى في تكوين Spring MVC.
2. internalResourceViewResolver
عرض الاسم حل
3. التعليقات التوضيحية أعلاه
Controller مسؤول عن تسجيل الفول في سياق الربيع
يحدد شرح REQUESTMAPPER طلبات URL التي يمكن معالجتها لوحدة التحكم
controller
مسؤول عن تسجيل الفول في سياق الربيع
requestmapping
يحدد التعليقات التوضيحية طلبات URL التي يمكن معالجتها لوحدة التحكم
requestbody
يتم استخدام هذا التعليق التوضيحي لقراءة جزء من بيانات الجسم لطلب الطلب ، واستخدام httpmessageConverter تكوينه بواسطة النظام لتحليل ، ثم ربط البيانات المقابلة إلى الكائن ليتم إرجاعها ، ثم ربط بيانات الكائن التي يتم إرجاعها بواسطة httpmessageconverter
ResponseBody
يتم استخدام هذا التعليق التوضيحي لكتابة الكائن الذي يتم إرجاعه بواسطة طريقة وحدة التحكم إلى منطقة بيانات الجسم لكائن الاستجابة بعد تحويله إلى httpmessageConverter المناسب إلى التنسيق المحدد
modelattribute
استخدم التعليق التوضيحي modelattribute على الطريقة تعريف الأسلوب: SPRING MVC قبل استدعاء طريقة المعالجة الهدف ، ستُطلق على الطريقة التي تصلح modelattribute على مستوى الطريقة واحدًا تلو الآخر.
استخدم التعليق التوضيحي modelattribute قبل إدخال معلمة الطريقة: يمكنك الحصول على الكائن من الكائن الضمني ، وربط معلمات الطلب إلى الكائن ، ثم تمرير الطريقة إلى كائن المعلمة لإضافة الطريقة إلى النموذج.
requestparam
استخدم requestparam لتمرير معلمات الطلب إلى طريقة الطلب
pathvariable
ربط العنوان النائب عن عنوان URL بمعلمة الدخول
exceptionHandler
مشروح حول الطريقة ، سيتم تنفيذ الطريقة عند حدوث استثناء
ControllerAdvice
اجعل وحدة تحكم فئة معالجة استثناء عالمي. يمكن للطريقة المعروفة مع طريقة exceptionHandler في الفصل التعامل مع جميع الاستثناءات التي تحدث في وحدات التحكم.
// match تلقائيًا @requestmapping ("/person") السلسلة العامة toperson (اسم السلسلة ، العصر المزدوج) {system.out.println (name+""+age) ؛ العودة "مرحبا" ؛ }1. اكتب فئة كيان شخص
package test.springmvc.model ؛ public class person {public string getName () {return name ؛ } public void setName (اسم السلسلة) {this.name = name ؛ } public int getage () {return Age ؛ } public void setage (int age) {this.age = age ؛ } اسم السلسلة الخاصة ؛ عصر INT الخاص ؛ }2. كتابة طرق في وحدة التحكم
// boxing تلقائيًا @requestmapping ("/person1") السلسلة العامة toperson (person p) {system.out.println (p.getName ()+""+p.getage ()) ؛ العودة "مرحبا" ؛ } // تم تحويل المعلمة في initbinder @requestmapping ("/date") تاريخ السلسلة العامة (تاريخ التاريخ) {system.out.println (date) ؛ العودة "مرحبا" ؛ } // في وقت التهيئة ، قم بتحويل نوع "سلسلة" إلى نوع "تاريخ" initBinder public void initbinder (servletRequestDatabinder Binder) {binder.registerCustomeditor (date.class ، customDateeditor new (New SimpleTaTformat ("yyyy-mm-dd") ، true)) ؛ } // تمرير المعلمات إلى الواجهة الأمامية requestmapping ("/show") سلسلة public showperson (خريطة <سلسلة ، كائن> خريطة) {person p = new person () ؛ map.put ("p" ، p) ؛ P.Setage (20) ؛ P.SetName ("Jayjay") ؛ إرجاع "عرض" ؛ }يمكن للمكتب الاستقبال الحصول على "P" في مجال الطلب
// تمرير المعلمات إلى الواجهة الأمامية باستخدام ajaxRequestMapping ("/getPerson") public void getPerson (اسم السلسلة ، printwriter pw) {pw.write ("hello ،"+name) ؛ } @requestmapping ("/name") سلسلة عامة sealhello () {return "name" ؛ }يطلق عليه مكتب الاستقبال برمز jQuery التالي
$ (function () {$ ("#btn"). انقر فوق (function () {$ .post ("mvc/getPerson" ، {name: $ ("#name"). val ()} ، function (data) {ALERT (data) ؛}) ؛}) ؛}) ؛ // redirect @requestmapping ("/redirect") السلسلة العامة redirect () {return "redirect: hello" ؛ }1. يجب استيراد حزم جرة
2. إضافة في ملف تكوين springMVC
<!-إعدادات التحميل-> <bean id = "multipartresolver"> <property name = "maxuploadsize" value = "102400000"> </propert
3. رمز الطريقة
requestmapping (value = "/expload" ، method = requestMethod.post) قم بتحميل السلسلة العامة (httpservletrequest req) رمي الاستثناء {multiparthttpletRequest mreq = (multiparthttpservletrequest) req ؛ ملف multipartfile = mreq.getFile ("file") ؛ اسم ملف السلسلة = file.getoriginalfilename () ؛ SimplEdateFormat SDF = جديد spiStFormat ("Yyyymmddhhmmss") ؛ fileOutputStream fos = new FileOutputStream (req.getSession (). getServletContext (). getRealPath ("/")+"upload/"+sdf.format (new date ())+filename.substring (filename.lastindexof ('.'))) ؛ fos.write (file.getBytes ()) ؛ fos.flush () ؛ fos.close () ؛ العودة "مرحبا" ؛ }4. نموذج مكتب الاستقبال
<form action = "mvc/expload" method = "post" envenpe = "multipart/form-data"> <input type = "file" name =
@controller @requestMapping ("/test") الفئة العامة mvcController1 { @requestmapping (value = "/param") السلسلة العامة testRequestParam ( @requestparam (value = "id") integer id ، requestparam (value = "name") العودة "/مرحبا" ؛ }}1. RestController
@controller@requestmapping ("/rest") الفئة العامة RESTCORLOWR {REQUESTMAPPE (value = "/user/{id}" ، method = requestMethod.get) السلسلة العامة get (pathvariable ("id") integer id) {system.out.println ("get"+id) ؛ العودة "/مرحبا" ؛ } @requestmapping (value = "/user/{id}" ، method = requestMethod.post) public string post (pathvariable ("id") integer id) {system.out.println ("post"+id) ؛ العودة "/مرحبا" ؛ } @requestmapping (value = "/user/{id}" ، method = requestMethod.put) public press (pathvariable ("id") integer id) {system.out.println ("put"+id) ؛ العودة "/مرحبا" ؛ } @requestmapping (value = "/user/{id}" ، method = requestMethod.delete) السلسلة العامة delete (pathvariable ("id") integer id) {system.out.println ("delete"+id) ؛ العودة "/مرحبا" ؛ }}2. نموذج الإرسال يرسل الطلبات وحذفها
تكوين في web.xml
<!-تكوين HiddenHttpMethodFilter ، قم بتحويل طريقة البريد إلى وضع أو حذف-> <filter> <filter-name> hiddenhttpmethodfilter </filter-name> <-filter-class> org.springframework.web.filter.hiddenhtttpmilter </ililter> <filter-name> HiddenHttpMethodFilter </filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
في المقدمة ، يمكنك استخدام الكود التالي لإنشاء طلب
<form Action = "rest/user/1" method = "post"> <input type = "hidden" name = "_ method" value = "put"> <input type = "profft" value = "pum"> </form> <form action = "rest/user/1" method = "post"> <post type = "product" value = "post" </form> value = "get"> </form> <form Action = "rest/user/1" method = "post"> <input type = "hidden" name = "_ method" value = "delete"> <input type = "prident" value = "delete"> </pump>
1. استيراد حزمة الجرة التالية
2. رمز الطريقة
@controller @requestMapping ("/json") الفئة العامة jsoncontroller {responseBodyRequestMapping ("/user") المستخدم العام get () {user u = new user () ؛ U.Setid (1) ؛ U.SetName ("Jayjay") ؛ U.SetBirth (New Date ()) ؛ أعدك ؛ }}1. التعامل مع الاستثناءات المحلية (في وحدة التحكم)
exceptionHandler publicandview stisployHandler (استثناء ex) {modelandview mv = new ModelAndView ("error") ؛ mv.addobject ("استثناء" ، ex) ؛ System.out.println ("in testExceptionHandler") ؛ إرجاع MV ؛ } @requestmapping ("/error") خطأ في السلسلة العامة () {int i = 5/0 ؛ العودة "مرحبا" ؛ }2. التعامل مع الاستثناءات العالمية (جميع وحدات التحكم)
controlleradvicepublic class testControllerAdvice {exceptionHandler publicandview stiventHandler (استثناء ex) {modelandview mv = new modelandview ("error") ؛ mv.addobject ("استثناء" ، ex) ؛ System.out.println ("في testControllerAdvice") ؛ إرجاع MV ؛ }}3. طريقة أخرى للتعامل مع الاستثناءات العالمية
تكوين في ملف تكوين springMVC
<!-تكوين SimplEmpappexceptionResolver-> <bean> <property name = "inscpertMappings"> <borps> <props> <props = "java.lang.arithmeticexception"> خطأ </props> </properation> </bean>
الخطأ هو صفحة خطأ
1. إنشاء فئة myInterceptor وتنفيذ واجهة المعالج
الطبقة العامة myInterceptor تنفذ معالج {Override public void efterCompletion (httpservletrequest arg0 ، httpservletresponse arg1 ، object arg2 ، استثناء arg3) يلقي الاستثناء } Override public void posthandle (httpservletrequest arg0 ، httpservletresponse arg1 ، object arg2 ، modelandview arg3) يلقي الاستثناء {system.out.println ("posthandle") ؛ } Override public boolean prehandle (httpservletrequest arg0 ، httpservletresponse arg1 ، object arg2) يلقي الاستثناء {system.out.println ("prehandle") ؛ العودة صحيح. }}2. تكوين في ملف تكوين springmvc
<!-إعداد التقاطع-> <mvc: Interceptors> <mvc: interceptor> <mvc: mapping path = "/mvc/**"/> <bean> </ban> gt ؛ </mvc: اعتراض> </mvc: اعتراضات>
3. أمر تنفيذ اعتراض
1.
(غير محدد ، لا تحتاج إلى الاستيراد)
2. اكتب مستخدم فئة الكيان وأضف تعليقات التحقق
مستخدم الفئة العامة {public int getId () {return id ؛ } public void setId (int id) {this.id = id ؛ } السلسلة العامة getName () {return name ؛ } public void setName (اسم السلسلة) {this.name = name ؛ } التاريخ العام getBirth () {return birth ؛ } public void setbirth (تاريخ الولادة) {this.birth = birth ؛ } Override public string toString () {return "user [id =" + id + "، name =" + name + "، birth =" + birth + "]" ؛ } معرف int الخاص ؛ notempty اسم السلسلة الخاصة ؛ past dateTimeFormat (pattern = "yyyy-mm-dd") تاريخ خاص ؛}ملاحظة: past يعني أن الوقت يجب أن يكون قيمة سابقة
3. استخدم نموذج نموذج springmvc في JSP
<النموذج: form action = "form/add" method = "post" modelAttribute = "user"> id: <form: input path = "id"/> <form: errors path = "ID" path = "birth"/> <form: errors path = "birth"/> <form: errors path = "birth"/> <input type = "submit" value = "submit"> </form: form>
ملاحظة: المسار المقابل للاسم
4. رمز في وحدة التحكم
@controller@requestMapping ("/form") فئة عامة formController {REquestMapping (value = "/add" ، method = requestMethod.post) سلسلة عامة إضافة (@مستخدم u u ، bindingresult br) {if (br.geterrorcount ()> 0) {return "adduser" ؛ } إرجاع "Showuser" ؛ } @requestmapping (value = "/add" ، method = requestMethod.get) سلسلة public add (map <string ، Object> map) {map.put ("user" ، new user ()) ؛ إرجاع "adduser" ؛ }}ملاحظة:
1. نظرًا لاستخدام سمة ModelAttribute في JSP ، يجب أن يكون هناك "مستخدم" في مجال الطلب.
2.@ساريقة يعني التحقق من المعلمات وفقا للتعليقات التوضيحية التي تحمل علامة على الكيان
3. العودة إلى الصفحة الأصلية لإعادة التعبير ، وسيعيد النموذج أيضًا التعبير.
5. تخصيص رسالة الخطأ
إضافة locale.properties في دليل SRC
notempty.user.name = لا يمكن أن يكون الاسم فارغًا. user.user.
تكوين في ملف تكوين springMVC
<!-تكوين المورد المحلي-> <bean id = "messagesource"> <property name = "basename" value = "locale"> </property> </ban>
6. العرض الدولي
إضافة locale_zh_cn.properties تحت SRC
اسم المستخدم = كلمة مرور الحساب = كلمة المرور
تمت إضافة في locale.properties
username = المستخدم namepassword = كلمة المرور
إنشاء locale.jsp
<Body> <fmt: message key = "username"> </fmt: message> <fmt: message key = "password"> </fmt: message> </body>
تكوين في springMVC
<!-جعل صفحة JSP يمكن زيارتها-> <mvc: view-controller path = "/locale" view-name = "locale"/>
اسمحوا للوصول إلى locale.jsp مباشرة تحت شبكة الإنترنت
أخيرًا ، قم بزيارة locale.jsp ، وتبديل لغة المتصفح ، واللغة التي يمكن أن ترى الحساب وكلمة المرور تم تبديلها أيضًا.
1. قم بإنشاء حزمة test.springmvc.intergrate لإظهار التكامل وإنشاء أنواع مختلفة
2. فئة كيان المستخدم
مستخدم الفئة العامة {public int getId () {return id ؛ } public void setId (int id) {this.id = id ؛ } السلسلة العامة getName () {return name ؛ } public void setName (اسم السلسلة) {this.name = name ؛ } التاريخ العام getBirth () {return birth ؛ } public void setbirth (تاريخ الولادة) {this.birth = birth ؛ } Override public string toString () {return "user [id =" + id + "، name =" + name + "، birth =" + birth + "]" ؛ } معرف int الخاص ؛ notempty اسم السلسلة الخاصة ؛ past dateTimeFormat (pattern = "yyyy-mm-dd") تاريخ خاص ؛}3. فئة Userservice
componentpublic class uservice {public userservice () {system.out.println ("Constructor userservice .../n/n/n/n/n/n/n/n") ؛ } public void save () {system.out.println ("Save") ؛ }}4. USERCONTROLLER
@controller @requestMapping ("/integrate") فئة عامة USERCONTROLLER requestMapping ("/user") السلسلة العامة SaveUser (requestbodymodelattribute us) {system.out.println (u) ؛ userService.save () ؛ العودة "مرحبا" ؛ }}5.Spring ملف التكوين
قم بإنشاء ملف تعريف ملفات springioc في دليل SRC في دليل SRC
<؟ XSI: Schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/Util http://www.springframework.org/schema/Spring-4 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd " xmlns: p = "http://www.springframework.org/schema/p" type = "enrotation" expression = "org.springframework.stereType.Controller"/> <context: issplude-filter type = "anotation expression =" org.springframework.web.bind.annotation.ControllerAdvice "/> </context:
أضف التكوين في web.xml
<!-تكوين springioC-> <stanker> <cleder-class> org.springframework.web.context.contextLoaderListener </stanker-class> </stanker> <context-param> <param-name> contextConfIgLocation </param-name> <baram-value>
6. قم بعمل بعض التكوين في SpringMVC لمنع SpringMVC و Springioc من الإدارة المتداخلة لنفس الكائن
<!-مسح الحزمة والحزمة الفرعية-> <السياق: مكون المسح القاعدة = "test.springmvc.intergrate"> <السياق: تضمين نوع المرشح = "التعليق" التعبير = "org.springframework.steretype.controller"/> <سياق: تشمل النوع = "annotation" expression = "org.springframework.web.bind.annotation.controllerAdvice"/> </context: component-scan>
1. تم تطوير springMVC بناءً على الطريقة ، ويتم تطوير Struts2 على أساس الفصل. SPRINGMVC يقوم بتعيين عنوان URL والطريقة في وحدة التحكم. بعد نجاح التعيين ، يقوم SpringMVC بإنشاء كائن معالج ، والذي يتضمن طريقة فقط. ينتهي تنفيذ الطريقة ويتم تدمير بيانات المعلمة الرسمية. يشبه تطوير وحدة التحكم في SpringMVC تطوير خدمة الويب.
2. يمكن لـ SPRINGMVC أداء تطوير Singleton ، ويوصى باستخدام تطوير Singleton. Struts2 يتلقى المعلمات من خلال متغيرات الأعضاء في الفصل. لا يمكن استخدام Singleton ، ويمكن استخدام حالات متعددة فقط.
3. بعد الاختبار الفعلي ، يكون Struts2 بطيئًا ، لأنه يستخدم علامات الدعامات. إذا كنت تستخدم الدعامات ، فمن المستحسن استخدام JSTL.