2 Ağustos 2013 Cuma

Spring MVC Örneği / Spring MVC Example

Merhaba arkadaşlar,

Bu yazımda Spring MVC kullanarak temel basit bir uygulama üzerinden MVC teknolojisinden bahsedeceğim.

Spring MVC Web Uygulamaları MVC teknolojisinin 3 temel bileşenini(Model,View,Controller) kullanır.

  1. Models : Bunlar bizim model nesnelerimizdir ve genel olarak Service Layer olarak adlandırılan servis katmanlarına ve Persistent Layer olan Veritabanı Katmanlarımızdaki objelerimize karşılık gelmektedir.
  2. Views : Bu bileşen bizim kullanıcı ara yüzlerini geliştirdiğimiz genelde Java Standard Tag Library (JSTL) kullanılarak geliştirilen JSP sayfalarımızdır.
  3. Controllers : Bu katmanda kullanıcı isteklerini karşılayan ve Servisce katmanımızla etkileşim içerisinde olan MVC bileşenidir.
Aşağıdaki resimlerde genel olarak bir Spring MVC  Web Uygulamasının bir Request'i handle etme yapısı ele alınmıştır.








Dispatcher Servlet front-controller (design pattern) tasarım deseni yapısında bir dispatcher'dır. Gelen bütün requestler buradan akar ve burada Handler edilerek doğru controller'a yönlendirilirler.








Şimdi küçük bir örnek yapacağız ve genel olarak bir Spring MVC Web Uygulamasının yapısını göreceğiz.

Örneğimizde Kullandığımız Teknolojiler;

  1. Spring 2.5
  2. JDK 1.6
  3. Netbeans 7.2
  4. Apache Tomcat 7.0 
1. İlk olarak yeni bir Spring MVC Web Uygulaması başlatıyoruz. Bunun için ide'nizin Project Explorer kısmında sağ tıklayıp New Project diyoruz ve Java Web kısmında Web Application seçiyoruz.















2. Daha sonra uygulamamızın koşacağı sunucumuzu seçiyoruz ve devam ediyoruz.












3. Bundan sonraki adımda projemi geliştireceğm framework'ü seçiyorum. Biz Spring MVC de geliştireceğimiz için seçip Finish diyelim.












Sonuç olarak yandaki dizin yapısına sahip bir Spring MVC web projemiz olacaktır. Artık geliştirmemizi yapabiliriz.

















1.Spring Controller


Controller sınıfları AbstractController sınıfından extend eder ve handleRequestInternal() metodunu @Override ederek bize ModelAndView nesneleri döndürürler.

HelloWorldController.java

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.mvc.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;
/**
 *
 * @author ahmet.boz
 */
 
public class HelloWorldController extends AbstractController{
 
 @Override
 protected ModelAndView handleRequestInternal(HttpServletRequest request,
  HttpServletResponse response) throws Exception {
 
  ModelAndView model = new ModelAndView("HelloWorld");
  model.addObject("msg", "hello world");
 
  return model;
 }
}

  • ModelAndView(“HelloWorld”) –  "HelloWorld" viewResolver'a parametre geçilir ve sonuç olarak hangi ModelAndView nesnesinin döneceğini belirler. (adım 4 te açıklanan viewResolver) 
  • model.addObject(“msg”, “hello world”) – "hello world" stringini dönen model nesnesinin içerisine parametre olarak koyar, daha sonra view içerisinde bu parametreye ${msg} ile erişebiliriz.

2. View (JSP Page )


Şimdide Controller'dan dönen ModelView nesnesinin kullandığı view'i oluşturalım ve Controller içerisinden ModelAndView nesnemize parametre olarak geçilen "msg" değerini yazdıralım.

HelloWorld.jsp

<%-- 
    Document   : HelloWorld
    Created on : 02.Ağu.2013, 01:43:31
    Author     : ahmet.boz
--%>

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>


  

Spring MVC Hello World Example

${msg}


3. Spring Configuration


web.xml içerisinde Servlete mappingleri vardır. Yani bizim request'lerimizi handle eden dispatcher olarak adlandırılmış DispatcherServlet servleti .htm olarak biten bütün requestlerimizi handler edecektir.


    
        contextConfigLocation
        /WEB-INF/applicationContext.xml
    
    
        org.springframework.web.context.ContextLoaderListener
    
    
        dispatcher
        org.springframework.web.servlet.DispatcherServlet
        2
    
    
        dispatcher
        *.htm
    
    
        
            30
        
    
    
        redirect.jsp
    



4. Spring Bean Configuration


Spring Controller ve viewResolver tanımlarının yapıldığı configurasyon dosyamızdır.

dispatcher-servlet.xml



     

    
    
        
            
                indexController
                wellcome
            
        
    
    

        

     

    
     



  • Controller – "welcome.htm" olarak adlandırılmış bir bean tanımıdır aslında ve HelloWorldController.class ile map edilir. Bunun anlamı "/welcome.htm" içeren bir request gelmesi durumunda bu requesti HelloWorldController controller'ı handler edecek demektir. 
  • viewResolver – Controllerların döndğü ModelAndView nesnelerinin nasıl görüntüleneceği tanımının ele alınmasıdır. Bizim örneğimizde "HelloWorldController" controller'ının döneceği "HelloWorld" isimli ModelAndView nesnemiz viewResolver tarafından "prefix + ModelAndView name + suffix" mekanizmasıyla çözümlenerek ilgili dizindeki jsp dosyamız görüntülenecektir ("/WEB-INF/jsp/HelloWorld.jsp").
Evet artık uygulamamızı çalıştırabiliriz. Uygulamamızı çalıştırıp URL kısmına http://localhost:8080/HelloWorld/wellcome.htm yazarsanız HelloWorld.jsp sayfamızın içeriğinin görüntülendiğini görürüz.

Tabi uygulamamız ilk ayağa kalktığında index.jsp sayfa içeriği görüntülenecektir.Eğer ilk olarak bizim hazırladığımız HelloWorld.jsp sayfa içeriğine gitmesini istiyorsanız redirector.jsp içerisinde <% response.sendRedirect("wellcome.htm"); %> değişikliğini yapmalısınız.


3 yorum :