Rabu, 29 Agustus 2012

CARA KERJA SPRING MVC


a.     DispatcherServlet
Kerangka Spring Web model-view-controller (MVC) dirancang di sebuahDispatcherServletDispatcherServlet adalah suatu class di dalam Spring yang berfungsi untuk menangani permintaan yang didasarkan pada pengaturan di file xml. Jadi, DispatcherServlet adalah class yang mengatur jalannya permintaan dan keluaran. Diagram di bawah ini menunjukkan bagaimana alur kerja dariDispatcherServlet, yang merupakan sebuah ekspresi dari pola  FrontController.


Process Jalannya Request pada Spring Web MVC DispatcherServlet

DispatcherServlet di dalam file web.xml, yang di dalamnya juga ditambahkan URL Mapping yang akan di handle oleh DispatcherServlet.
b.     Spring IoC Container
 Selain DispatcherServlet dan Mapping request, di dalam web.xml juga terdapat letak Spring IoC Container. Spring IoC Container adalah jantung dari Aplikasi Spring. Yaitu sebuah file konfigurasi untuk memanage object-object yang ada di dalam aplikasi.
Spring IoC Container bisa menggunakan 2 cara, yaitu beans dan context. Untuk Spring Web MVC, setiap DispatcherServlet sebenarnya sudah memilikiWebApplicationContext sesuai dengan servlet-name yang di inisialisasi, yaitu -context.xml. Namun, kita juga bisa menggunakan nama lain, akan tetapi harus dituliskan pada web.xml seperti contoh di bawah ini.
     
           appServlet
           org.springframework.web.servlet.DispatcherServlet
          
                contextConfigLocation
                /WEB-INF/spring/appServlet/servlet-context.xml
          
           1
     
          
     
           appServlet
           /
     




Special beans di dalam WebApplicationContext
Type Bean
Explanation
controllers
Form the C part of the MVC.
handler mappings
Handle the execution of a list of pre-processors and post-processors and controllers that will be executed if they match certain criteria (for example, a matching URL specified with the controller).
view resolvers
Resolves view names to views.
locale resolver
A locale resolver is a component capable of resolving the locale a client is using, in order to be able to offer internationalized views
Theme resolver
A theme resolver is capable of resolving themes your web application can use, for example, to offer personalized layouts
multipart file resolver
Contains functionality to process file uploads from HTML forms.
handler exception resolvers
Contains functionality to map exceptions to views or implement other more complex exception handling code.

Contoh WebApplication Context.
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns:beans="http://www.springframework.org/schema/beans"
      xsi:schemaLocation="
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

     
     
     
     

     
     

     
     
          
          
     
     
     
     
     


E.     IMPLEMENTASI PADA OBJECT
Implementasi IoC pada Spring Web MVC menggunakan metode Annotation. Annotation yang dimaksud seperti @RequestMapping, @RequestParam, @ModelAttribute, dan lainnya. Berikut contoh penggunaan Annotation
package org.springframework.samples.mvc.mapping;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class MappingController {

      @RequestMapping("/mapping/path")
      public @ResponseBody String byPath() {
             return "Mapped by path!";
      }

      @RequestMapping(value="/mapping/method", method=RequestMethod.GET)
      public @ResponseBody String byMethod() {
             return "Mapped by path + method";
      }

      @RequestMapping(value="/mapping/parameter", method=RequestMethod.GET, params="foo")
      public @ResponseBody String byParameter() {
             return "Mapped by path + method + presence of query parameter!";
      }

      @RequestMapping(value="/mapping/parameter", method=RequestMethod.GET, params="!foo")
      public @ResponseBody String byParameterNegation() {
             return "Mapped by path + method + not presence of query parameter!";
      }

      @RequestMapping(value="/mapping/header", method=RequestMethod.GET, headers="Accept=text/plain")
      public @ResponseBody String byHeader() {
             return "Mapped by path + method + presence of header!";
      }

      @RequestMapping(value="/notheader", method=RequestMethod.GET, headers="!FooHeader")
      public @ResponseBody String byHeaderNegation() {
             return "Mapped by path + method + not presence header!";
      }
     
      @RequestMapping(value="/mapping/*", method=RequestMethod.GET)
      public @ResponseBody String regexp() {
             return "Mapped by regexp!";
      }

}

0 komentar: