کانال بله, جهت پشتیبانی و اطلاع رسانی کانال بله, جهت پشتیبانی و اطلاع رسانی
عضویت

درس بیست و دو : آموزش فریم ورک MVC در Spring

این مقاله قدیمی است، برای مطالعه مقاله جدید بارگذاری شده در این زمینه بر روی عبارت زیر کلیک کنید :

آموزش MVC Introduction-Java Spring

فریم ورک MVC چیست ؟

فریم ورک Spring MVC ، معماری model-view-Controller و کامپوزیت های آماده آن را برای ایجاد نرم افزارهای تحت وب انعطاف پذیر و دارای بخش های مجزا فراهم میکند .
الگوی MVC باعث جدا شدن و مستقل عمل کردن اجزای اصلی یک application ( UI logic و business و input logic ) از یکدیگر شده ، در حالی که ارتباط بین آنها به وسیله روش های مختلفی فراهم می شود .

  • - بخش Model اطلاعات برنامه را کپسوله سازی کرده و از تعدادی POJO تشکیل می شود .
  • - بخش View وظیفه رندکردن مدل داده ای برنامه و تولید خروجی HTML آن را جهت نمایش در مرورگر
  • - بخش Controller هم وظیفه پردازش درخواست های کاربر را داشته و بایستی model مناسب برنامه را تولید کرده و جهت رندر به View ارسال کند .

آموزش DispatcherSerlet :

فریم ورک Spring MVC ( model-view-controller ) حول یک کامپوزیت به نام DispatcheServlet طراحی شده که کلیه درخواست ها و پاسخ های HTTP را مدیریت می کند . فرآیند پردازش درخواست ها در Spring MVC توسط DispatcherServtel در دیاگرام زیر نمایش داده شده است :

آموزش فریم ورک MVC در Spring

در لیست زیر ، ترتیب وقوع رویدادهای مرتبت با پردازش یک درخواست HTTP توسط DispatcherServlet بیان شده است :

  • - پس از دریافت یک درخواست HTTP ، کامپوزیت DispatcherServlet از کامپوزیت HandlerMapping برای فراخوانی Controller مناسب ، کمک می گیرد .
  • - Controller درخواست را دریافت کرده و سرویس مناسب را بسته به متدهای GET یا POST جهت اجرای درخواست فراخوانی می کند . سرویس فراخوانی شده model data را بر مبنای business logvc مناسب ، تنظیم می کند و پس نام View را به DispatcherServlet پلاش می دهد .
  • - پس از اینکه view به طور کامل آماده شد ، DispatcherServlet مدل دیتا ( data model ) را به view بازمی گرداند تا برای اجرا به مرورگر ارسال شود .
  • - تمامی کامپوزیت های اشاره شده در قسمت بالا برای مثال Handler Mapping ، Controller و ViewResolver بخشی از WebApplicationContext هستند که خود یک کامپوزیت توسعه یافته از ApplicationContext می باشد .این کامپوزیت دارای یکسری قابلیت های لازم و اضافه برای نرم افزارهای تحت web است .

تنظیمات لازم ( Required Configuration ) :

شما بایستی آدرس و مشخصات درخواست هایی که می خواهید Dispatcher Servlet مدیریت را به وسیله قابلیت Mapping URL در فایل web.xml مشخص می کنید .

کد زیر نحوه تعریف مشخصات و آدرس دهی برای DispatcherServlet را در یک مثال عملی نشان می دهد :

 

 
    Spring MVC Application

   
      HelloWeb
      
         org.springframework.web.servlet.DispatcherServlet
      
      1
   

   
      HelloWeb
      *.jsp
   


                

فایل web.xml در پوشه WebContent/WEB-INF پروژه وب نگهداری می شود . برای مقدار دهی HelloWeb Dispatcher Servlet در کد فوق ، فریم ورک تلاش می کند تا محتوی برنامه را از فایلی به نام [ servlet-name ]-servlet.xml که در پوشه WebContent/WEB-INF قرار دارد ، بخواند . در این مثال نام مورد نظر ما در پوشه HelloWeb-servlet.xml است .
در مرحله بعد ، تگ آدرس یا URL هایی که بایستی توسط DispatcherServlet مدیریت شوند را تعیین می کند . در این مثال کلید درخواست های HTTP ای که با jsp ، پایان می یابند ، توسط HelloWeb DispatcherServlet مدیریت می شوند .

اگر نمی خواهید برنامه شما به صورت پیش فرض به دنبال فایل با نام [servlet-name]-servlet.xml در پوشه WebContent/WEB-INF بروید ، بایستی نام و محل قرارگیری این فایل ها را با اضافه کردن یک ContentLoaderListener به فایل web.xml به صورت زیر تعیین کنید :

 


....

   contextConfigLocation
   /WEB-INF/HelloWeb-servlet.xml



   
      org.springframework.web.context.ContextLoaderListener
   



 

در کد زیر هم می توانیم تنظیمات لازم ( required configuration ) برای فایل HelloWeb-servlet.xml را که در پوشه WebContent/WEB-INF برنامه قرار دارد را مشاهده کنیم :

 

   



   

   
      
      
   


 

نکات مهم درباره فایل HelloWeb-servlet.xml را در ادامه بررسی کرده ایم :

  • - فایل [servlet-name]-servlet.xml برای تعیین bean های برنامه به کار میرود . این فایل کلید تنظیمات برای هر bean ای که در محیط عمومی برنامه ( Global Scope ) تعیین شده است را جایگزین می کند .
  • - InternalResourceViewResolver دارای قواعد لازم برای ترجمه کردن نام view های برنامه است . همتنطور که در قواعد مثال فوق تعیین شده ، یک view logical به نام hello برای اجرا به یک view موجود در پوشه /WEB-INF/jsp/hello.jsp واگذار شده است .

در مراحل بعدی این درس ، به آموزش نحوه نوشتن کامپوزیت های واقعی مورد نظرتان مثل Controller خواهیم پرداخت .

تعیین یک Controller :

همانطور که گفتیم Dispatch Servlet هر request را به controller مرتبط خود واگذار می کند تا کدهای آن اجرا شود . @Controller annotation تعیین کننده کلاس ای است که قواعد مربوط به یک controller را اعلام می کند .

همچنین @RequestMapping جهت اتصال URL به یک کلاس یا یک متد خاص به کار می رود . مثل کد زیر :

 
@Controller
@RequestMapping("/hello")
public class HelloController{
 
   @RequestMapping(method = RequestMethod.GET)
   public String printHello(ModelMap model) {
      model.addAttribute("message", "Hello Spring MVC Framework!");
      return "hello";
   }

}

در کد فوق ، @Controller annotation ، کلاس را به عنوان یک Spring MVC Controller تعیین می کند . همچنین اولین استفاده از @Request Mapping کلیه متدهای مدیریت برنامه در این کنترل متعلق به مسیر /hello هستند . annotation بعدی کد یعنی @RequestMapping( method = RequestMethodGET ) تعیین کننده متد Print Hello () به عنوان متد سرزیس دهنده پیش فرض کنترلی برای درخواست های HTTP GET می باشد . شما می توانید متد دیگری را نیز برای مدیریت درخواست Post برنامه در همین URL تعیین کنید .

همچنین شما می توانید کد کنترلی فوق را به صورت دیگری نیز بنویسید . در این روش جدید ، می توانید خواص جدیدی را به @RequestMapping اضافه کنید :

   
@Controller
public class HelloController{
 
   @RequestMapping(value = "/hello", method = RequestMethod.GET)
   public String printHello(ModelMap model) {
      model.addAttribute("message", "Hello Spring MVC Framework!");
      return "hello";
   }
     }

خاصیت value تعیین کننده URL ای است که مدیریت کننده متد ( handler method ) به آن متصل است . همچنین خاصیت method تعیین کننده متد سرویس جهت مدیریت درخواست های HTTP GET می باشد . نکات مهم زیر را نیز بایستی در مورد کد کنترلی فوق یادآوری کنیم :

  • - شما business logic مورد نظر خود را در یک Service method تعیین می کنید . همچنین می توانید متدهای دیگر را درصورت لزوم ، درون این متد فراخوانی کنید .
  • - بنابر business logic ای که تعیین کرده اید ، یک model را در این متد ایجاد می کنید . شما می توانید خواص مختلف model ایجاد شده را تعیین کنید که توسط View برای ایجاد خروجی نهایی قابل دسترس خواهند بود و مثال فوق یک model logical خاصیتی به نام “ message “ است ایجاد می کند .
  • - متدی که به عنوان متد سرویس دهنده ( service method ) تعیین شده ، می تواند یک مقدار String را برگرداند . این مقدار String حاوی نام view ای است که جهت رند کردن model به کار می رود . مثال فوق مقدار “ hello “ را به عنوان نام logical view برمی گرداند .

ایجاد JSP Views :

Spring MVC از View های مختلف جهت تولید خروجی هایی با تکنولوژی های متفاوت پشتیبانی می کند . این تکنولوژی ها شامل JSP ، HTML ، PDF ، EXCEL ، XML ، JSON ، Atom، Rss و ...هستند . اما به صورت معمول ما از تمپلیت JSP که به وسیله JSTL نوشته شده است ، استفاده می کنیم . به وسیله کد زیر ، یک View ساده به نام hello را در مسیر /WEB-INF/hello/hello.jsp ایجاد می کنیم :

< html >
   < head >
   Hello Spring MVC
   < /head >
   < body >
   

${message}

< /body > < /html >

در کد فوق ${ message } خاصیتی است که آن را درون Controller تنظیم کرده ایم . شما می توانید هرچند خواص که نباز دارید را تعیین نموده تا در View نمایش داده شود .

1395/06/19 4757 1635
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما

نظرات خود را ثبت کنید...