Etiketler

25 Haziran 2014 Çarşamba

Android Web Servis Kullanıcı Adı ve Parola Ayarlama


Merhaba arkadaşlar,

Bu yazımda daha önce yayınlamış olduğum Android te web servis kullanımına ilişkin ek bir ilave yapacağım. Eğer servisimizde kullanıcı adı ve parola erişim kısıtı varsa bu durumda servisimizde SOAP header’ına bu parametreleri set etmemiz gerekecektir. Eğer Android te web servis kullanımı ile alakalı yazımı okumamışsanız buradan okumanızı tavsiye ederim çünkü kodları oradaki yapı üzerinden vereceğim.

Servis request değerimi oluşturup SoapSerializationEnvelope nesneme set ederken burada headerOut fonksiyonunu kullanarak kullanıcı adı ve parola değerlerimi set ediyorum. Bunun için önceki yazımda WebServiceCall.java sınıfımız içerisinde SetEnvelop() metodumda şu kodları ekliyoruz.


    protected void SetEnvelope() {
         
        try {
             
            // Creating SOAP envelope          
            envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
             
            //You can comment that line if your web service is not .NET one.
            envelope.dotNet = true;
            
            //header'a kullanıcı adı ve parola değerlerini set et
            envelope.headerOut = new Element[1]; 
            envelope.headerOut[0] = buildAuthHeader();
            
            envelope.setOutputSoapObject(request);
            androidHttpTransport = new AndroidHttpTransport(URL);
            androidHttpTransport.debug = true;
             
        } catch (Exception e) {
            System.out.println("Soap Exception---->>>" + e.toString());   
        }
    }
    
    
    private Element buildAuthHeader() {
        Element h = new Element().createElement(NAMESPACE, "AuthHeader");
        Element username = new Element().createElement(NAMESPACE, "Username");
        username.addChild(Node.TEXT, USERNAME);
        h.addChild(Node.ELEMENT, username);
        Element pass = new Element().createElement(NAMESPACE, "Password");
        pass.addChild(Node.TEXT, PASSWORD);
        h.addChild(Node.ELEMENT, pass);

        return h;
    }

Umarım faydalı olur, yardıma ihtiyacınız olduğunda yardımcı olabilirim.

Android Web Servis Kullanımı


Merhaba arkadaşlar, .net web servislerinin android te nasıl kullanılacağından bahsedeceğim.  Bunun için http://www.webservicex.net/ sitesinde sunulan ağırlık birimleri arası dönüşüm yapan basit bir servisi kullanacağız. Bu servis .net ile yazılmış web servisidir. Bunu bilmekte fayda var çünkü java ile yazılmış servislerin kullanımı biraz daha farklı.

Öncelikle Android de web servislerini kullanabilmemiz için ksoap2 kütüphanesine ihtiyaç var. Bu kütüphaneyi buradan indirerek projemize import ediyoruz. Bunun için önce indirdiğimiz .jar dosyamızı projemizde libs klasörünün altına kopyalayalım, ardından projemizin üzerine gelerek sağ tıklayıp Build Path > Add External Archives.. seçeneğini seçiyoruz. İndirdiğimiz ksopa2 jar’ını göstererek ekliyoruz.



Aşağıda kullanacağımız servisin açıklamalarını verdim. Uygulamada kullanacağımız servis değişkenleri şu şekilde.





NAMESPACE = “http://www.webserviceX.NET/
URL = “http://www.webservicex.net/ConvertWeight.asmx”
METHOD_NAME = “ConvertWeight”
SOAP_ACTION = NAMESPACE + METHOD_NAME 



Şimdi servisi uygulamamızda nasıl kullanacağımıza geçebiliriz. Ben basit bir uygulama ile servisten dönen cevabı bir text içerisinde göstereceğim. Siz kendi uygulamanıza göre uyarlarsınız. Proje structure olarak resimde verildiği şekliyle.















1) Öncelikle layout’umuzu oluşturalım. Ben servise parametre olarak geçeceğimiz değerleri alacağım 3 textbox ve servis çağrısı yapacağımız bir buton kullanıyorum ve servis cevabını gösterebileceğim bir label ekliyorum. 




    

    

    

    

    

    

    


2) Servis bağlantımı oluşturacağım WebServiceCall sınıfımı oluşturuyorum.  Bu sınıf içerisinde Soap requestimi oluşturuyor varsa gerekli request parametrelerimi, servis kullanıcı adı ve parolamı set ediyorum. Bu servisimizde kullanıcı adı ve parola istemediği için SOAP header 'ına müdahale etmedik. Ancak başka yazımda ele aldım. Buradan (Servis Kullanıcı Adı ve Parola Set Etme) servis header parametrelerinin nasıl set edileceğine ulaşabilirsiniz.


package com.ahmetbz.usingwebservices;

import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.PropertyInfo;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.AndroidHttpTransport;
import org.kxml2.kdom.Element;
import org.kxml2.kdom.Node;

public class WebServiceCall {

    String NAMESPACE = "http://www.webserviceX.NET/";
    private String URL = "http://www.webservicex.net/ConvertWeight.asmx";
    String METHOD_NAME = "ConvertWeight";
    String SOAP_ACTION;
    SoapObject request = null, objMessages = null;
    SoapSerializationEnvelope envelope;
    AndroidHttpTransport androidHttpTransport;
     
    WebServiceCall() {
    }

    protected void SetEnvelope() {
         
        try {
             
            // Creating SOAP envelope          
            envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
             
            //You can comment that line if your web service is not .NET one.
            envelope.dotNet = true;
            
            envelope.setOutputSoapObject(request);
            androidHttpTransport = new AndroidHttpTransport(URL);
            androidHttpTransport.debug = true;
             
        } catch (Exception e) {
            System.out.println("Soap Exception---->>>" + e.toString());   
        }
    }
    
    // MethodName variable is define for which webservice function  will call
    public String getConvertedWeight(String weight, String fromUnit, String toUnit)
      {
         
        try {
            SOAP_ACTION = NAMESPACE + METHOD_NAME;
             
            //Adding values to request object
            request = new SoapObject(NAMESPACE, METHOD_NAME);
            

            //Adding Double value to request object
            PropertyInfo weightProp =new PropertyInfo();
            weightProp.setName("Weight");
            weightProp.setValue(weight);
            weightProp.setType(double.class);
            request.addProperty(weightProp);
             
            //Adding String value to request object
            request.addProperty("FromUnit", "" + fromUnit);
            request.addProperty("ToUnit", "" + toUnit);
            
            SetEnvelope();
             
            try {
                 
                //SOAP calling webservice
                androidHttpTransport.call(SOAP_ACTION, envelope);
                 
                //Got Webservice response
                SoapPrimitive response = (SoapPrimitive)envelope.getResponse();
 
                return response.toString();
                 
            } catch (Exception e) {
                // TODO: handle exception
                return e.toString();
            }
        } catch (Exception e) {
            // TODO: handle exception
            return e.toString();
        }
 
    }

}


3) Butona tıklayınca servis çağrısı yapacağım DotNetWebServiceActivity sınıfımda hazırladığım layottan servise göndereceğim parametreleri alıyorum ve servis çağrısını yaparak dönen değeri labelda gösteriyorum.

package com.ahmetbz.usingwebservices;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class DotNetWebServiceActivity extends Activity {

 @Override
 protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.mainlayout);
          
         final Button webserviceCallButton = (Button) findViewById(R.id.callServiceButton);
         final EditText weightEditText = (EditText) findViewById(R.id.weightEditText);
         final EditText fromUnitEditText = (EditText) findViewById(R.id.fromUnitEditText);
         final EditText toUnitEditText = (EditText) findViewById(R.id.toUnitEditText);
         final TextView webserviceResponse = (TextView) findViewById(R.id.serviceResponseTextView);
          
         webserviceCallButton.setOnClickListener(new OnClickListener() {
             public void onClick(View v) {
                  
                 webserviceResponse.setText("Requesting to server .....");
                  
                 //Create Webservice class object
                 WebServiceCall service = new WebServiceCall();
                  
                 // Initialize variables
                 String weight   = weightEditText.getText().toString();
                 String fromUnit = fromUnitEditText.getText().toString();
                 String toUnit   = toUnitEditText.getText().toString();
                  
                 //Call Webservice class method and pass values and get response
                 String aResponse = service.getConvertedWeight(weight, fromUnit, toUnit);  
                     
                 Log.i("AndroidExampleOutput", "----"+aResponse);
                  
                 webserviceResponse.setText("Service Response : "+aResponse);
             }
         });
       
 }

}


4) AndroidManifest.xml dosyamızda Activity’i kaydetmeyi ve internet iznini vermeyi unutmayalım.



    
 
    
        
            
                
                
            
        
    
 






Evet arkadaşlar, uygulamaızı çalıştırıp ilgili değerleri girdiğimizde sonucun döndüğünü görebiliriz.

18 Haziran 2014 Çarşamba

Veritabanı Tablo index Oluşturma / Sql Index


Veriler disk tabanlı belleklere depolanırken bloklar halinde depolanır. Disk blokları genelde bağlı listeler gibi yapılandırılmıştır; her ikisi de verinin tutulduğu kısım ve bir sonraki düğüme gösteren pointer kısmından oluşur ve her ikiside ardarda depolanmak zorunda değildir.

Sıralama yapılmamış bir alanda arama yapmak Lineer Arama yapmayı gerektirir, bu da N/2 blok erişimi gerektirir. Buradaki N tablonun disk üzerinde bulunduğu blok sayısıdır. Eğer bu alan anahtar olmayan bir alan ise arama N tane blok erişimi gerektirir.
Oysa sıralanmış bir alan olsaydı Binary Arama kullanılabilirdi, bu da log2 N blok erişimi gerektirir. Bununla birlikte anahtar olmayan alan sıralanmış ise tablonun geri kalanı duplicate değerleri bulmak için aranmaz. Çünkü alan sıralanmış olduğu için aranan değerden farklı bir değere erişildiğinde arama bitmiş demektir. Böylece performans önemli ölçüde artar.

İndex Nedir, Neden Kullanılır

Bir index, veri tabanı ortamında bir tablo ya da bir view gibi bir nesnedir ve ilişkili olarak kullanıldığı tablo ya da view'deki satırların, index alanı olarak kullanılan kolondaki verilere göre sıralanmış biçimde işlenme sokulmasını sağlar.

Bir tablo, indekslenmiş ise , bu tablo içinde gerçekleştirilecek bir arama ya da koşullu listeleme işlemi çok daha hızlı biçimde gerçekleştirecektir.

Index Oluşturma

      CREATE INDEX index adı
      ON tabloadı (kolonadı 1,kolonadı 2,....,kolonadı n );

Index artan (ascending) ya da azalan (decending) şeklinde olabilir. Artan, alfabetik olarak A’dan Z’ye nümerik olarak küçükten büyüğe şeklindedir. Azalan ise bunun tersidir. Hiçbir özel sözcük kullanılmazsa index artan sayılır ya da alan adının yanında bir boşluktan sonra ASC sözcüğü kullanılırsa bu alana göre artan sıralama yapılacak demektir.

Herhangi bir alanın adının yanında DESC sözcüğünün kullanılması ise index azalan olacağını gösterir. Komutun yazılış biçiminden anlaşılacağı gibi, aynı anda, birden çok alana göre index de yapılabilir.

Tek Bir Alana Göre Artan Sırada Index

İşletmede çalışan personeli maaşlarına göre artan sırada listelemek istersek, maas alanına göre bir index oluşturmalıyız.

     CREATE INDEX pers_maas
      ON Personel (maas);

Personel tablosunu listelersek personeller maaşlarına göre sıralı liste olarak gelecektir.

Tek Bir Alana Göre Artan Sırada Index 

    CREATE INDEX pers_maas
    ON Personel (maas DESC);

Birden Fazla Alana Göre Index

İşletmedeki personelin öncelikle adlarına göre, aynı ad da olanların soyadlarına göre, hem adı hem soyadı aynı olanların maaşlarına göre sıralanmış olarak listelenmesi istenirse aşağıdaki komut kullanılmalıdır:

 CREATE INDEX p_ad_soy_m
 ON Personel (ad,soyad,maas); 

Mevcut Bir Index’in Silinmesi 

Bir tablo üzerinde tanımlanmış herhangi bir indeks , o tablonun veri tabanından silinmesi ile otomatik olarak silinecektir. Tablo silinmeksizin , o tablo üzerinde oluşturulan indeksin silinmesi içinse DROP INDEX komutu kullnılmalıdır.

   DROP INDEX index_adi ;

6 Haziran 2014 Cuma

DWR Kullanımı Örneği (Direct Web Remoting) / How to use Dwr in Java

Bu yazımda DWR (Direct Web Remoting ) ‘dan bahsetmeye çalışacağım.

AJAX'a web uygulamalarımızda çok sık ihtiyaç duymaktayız. Peki nedir bu AJAX;
Aslinda ajax HTML / CSS/ DOM / JavaScript XML / XML/HttpRequest gibi birçok bileşenin birleştirlmesiyle geliştirilmiş bir teknolojidir. Adından da anlaşılacağı üzere Asenkron bir işletim söz konusu olduğundan şöyle bir fayda sağlamaktadır; güncellemelerde sayfanın değil istenilen kısımların sunucuya gidip gelmesidir. DWR' da aslında bir AJAX framework’ü olduğundan AJAX'a değinmek istedim önce.

DWR iki ana bölümden oluşmakta;
  • İstemciden gelecek request'leri işleyen ve istemciye tekrar bir cevap dönen Java Servlet'leri.
  • Request'leri gönderen ve servlet’lerden dönen responslarla sayfayı güncelleyen JavaScript parçalarından oluşur diyebiliriz.

Aşağıdaki resimde işleyişi anlatma adına güzel olmuş.

Şimdi de DWR'ı nasıl kullanacağımızı adım adım anlatmaya çalışayım;

1)  Önce bir Dynamic Web Project oluşturuyorsunuz.

2)  DWR Jar'ını sayfasından indirerek WEB-INF altında lib klasörünün altına koyuyoruz.Eğer lib klasörü yoksa bir tane oluşturabiliriz. Yalnız dwr.xml de kullanacağımız versiyonla jar'ın versiyon uyumluluğu önemli. Buna dikkat edelim. Ben dwr 2 kullanacağım bu örnekte.

3)  Aşağıdaki kodları web.xml'imize ekliyoruz. Bu yukarıda bahsettimiz DWR'ın ilk kısmına karşılık gelmekte aslında. Burada DwrServlet’imizi tanımlıyoruz. 

    
        dwr-invoker
        org.directwebremoting.servlet.DwrServlet
        
            activeReverseAjaxEnabled
            true
        
        
            debug
            true
        
         
             crossDomainSessionSecurity 
             false 
         
         
             allowScriptTagRemoting 
             true 
        
        1
    

    
        dwr-invoker
        /dwr/*
    
4)  web.xml ile aynı dizinde bulunan bir dwr.xml dosyası oluşturuyoruz. Web.xml'e eklediğimiz servlet name (dwr-invoker)kısmı aslında bu .xml’inde ismini belirlemekte. Buna dikkat edelim. Aşağıdaki kodları dwr.xml'e ekleyelim. Dwr DwrEngine isimli java clasımızı .js uzantılı bir JavaScript'e dönüştürecek.


 
   
     
     
   
 

5)  dwr.xml'de kullandığımız DwrEngine adlı  java clasımızı oluşturuyoruz.


package com.ahmetboz.dwr;

/**
 *
 * @author ahmet.boz
 */
public class DwrEngine {
       
    public DwrEngine(){}
    
    public String deneme() {
        return "Hello";
    }
}

Şu durumda dwr'ı kullanabilir durumdayız. Uygulamamızı çalıştırıp
http://localhost:8080/[YOUR-WEBAPP]/dwr/    adresini yazarsanız dwr.xml'de tanımladığımız class ve metodların listesini görebiliriz.



6)  Son olarak arayüzümüzü oluşturuyoruz ve dwr'ı deniyoruz.. Ben basit bir şekilde DwrEngine'den gelen mesajı alert ile ekrana bastırıyorum.

<%@ page contentType="text/html; charset=UTF-8"%>

<%@ page contentType="text/html; charset=UTF-8"%>


    
        
        
        

        
        
    
    
        
DWR Say Hello

Uygulamamızı çaılıştırıp deniyoruz.

İlerleyen yazılarımda Dwr'ı Spring bean'leriyle nasıl kullanırız buna değinmeğe çalışacağım.Kolay gelsin.

Javascript ile input validasyonu / How to prevent numeric / alphabetic character in Javascript

Merhaba arkadaşlar,

Bu yazımda Javascript te input validasyonu ile ilgili küçük bir kod parçası paylaşacağım sizlerle.
Küçük bir kod parçası evet ama çok sık ihtiyaç duyduğumuz kod parçalarından bence. Çünkü ben genelde kullandığım teknolojiler itibariyle Javascript'e bir çok noktada ihtiyaç duyorum.

Yine bir zaman ihtiyaç duyduğum bu input validayon örneğini paylaşmak istedim.Bu örneğimizde daha önceki Spring MVC kategorisinde paylaştığım bir örnek üzerinden ilerleyeceğim.Javascript örneği olacağı için kullanım şekli önemli olacaktır, örnek çok önemli olmadığı için örneğin kodlarını paylaşmayacağım.

Evet arkadaşlar, şimdi iki farklı validayon yöntemi göstereceğim.

1. Formunuzda bulunan input'a yalnızca alfabetik karakterlerin girilmesini isteyebilirsiniz. Bu durumda her karakter girilmesinde input değeri kontrol edilerek numerik karakterler yerine '' karakterini basabilirsiniz.



    function onlyAlphabet(ths) {
        ths.value = ths.value.replace(/[0-9\.]/g, '');
    }

2. Formunuzda bulunan input alanına yalnızca numerik karakterler girilsin isteyebilirsiniz. Bu durumda input alanına girilen non-numerik karakterleri engelleyebilirsiniz.



    function onlyNumeric(e) {
        var keyCode = (e.keyCode ? e.keyCode : e.which);
        if (!(keyCode > 47 && keyCode < 58)) {
            e.preventDefault();
        }
    }  

Örnek temsili olduğu için istediğiniz ve ihtiyaç duyduğunuz durumlara göre düzenleyebilirsiniz fonksiyonlarınızı.

Kolay gelsin.

Spring MVC SimpleUrlHandlerMapping

Merhaba arkadaşlar,

Spring Mvc de Handler Mapping'lerde son olarak SimpleUrlHandlerMapping mantığını anlatacağım. Bunun kullanımı daha anlaşıler ve kolay geldiği için genelde ben bunu kullanırım.

1. prop key

Bean olarak tanımladığımız Controller'larımızı SimpleUrlHandlerMapping bean tag'i arasında prop key'ler ekleyerek Controller'ımızın ID veya name property siyle eşleştiriyoruz.

 
 
    
  
     welcomeController
     welcomeController
     helloGuestController
   
    
 
 
 
 
 
 


2. value

Burada prop key değeri yerine <value/>  tag'i arasında = operatörü ile tanımladığımız Controller'lar ile Url Pattern'larımızı ilişkilendiriyoruz.


 
 
    
  
     /welcome.htm=welcomeController
     /*/welcome.htm=welcomeController
     /helloGuest.htm=helloGuestController
  
    
 
 
 
 
 
 


Evet SimpleUrlHandlerMapping yöntemide böyle arkadaşlar. Kafalardaki soru işaretleri çözülürse sonraki örnekleri anlamak daha kolay olacaktır.O yüzden bunlara değinmek faydalı olmuştur diye düşünüyorum.  Kola gelsin.

Spring MVC ControllerClassNameHandlerMapping

Merhabalar arkadaşlar,

Bu yazımda Spring MVC Handler Mapping'lerine devam ediyoruz. Spring MVC de gelen request'leri handle edip doğru Controller'a yönlendirmek için bi kaç yöntem mevcut. Bunlardan biride ControllerClassNameHandlerMapping 'dir.
Bu handler mapping yöntemi gelen request'ten class name alınır ve eğer varsa sonunda Controller son ekini(sufix) siler , küçük harflere çevirir ve başında '/' ile döndürür yeni isdimlendirdiği değeri.

Şimdi bir örnekle açıklamaya çalışalım.

Bir önceki yazımda Handler mapping yöntemlerinden BeanNameUrlHandlerMapping Spring'in kullandığı default mapping yöntemi olduğunu söylemiştik. Yani configurasyon dosyasında tanımlanmış herhangi bir mapping bean tanımı yer almıyorsa DispatchServlet default bu mapping bean'i create eder.


 
  
 
  
 


Eğer configurasyon dosyasında ControllerClassNameHandlerMapping bean tanımı eklenirse Spring handler mapping'leri artık bu yöntemle yapacaktır.

 
  
 
  
 
  
 


Artık Spring gelen request'i ControllerClassNameHandlerMapping kurallarını işleterek map edecektir.
WelcomeController -> /welcome*
HelloGuestController -> /helloguest*
  1. /welcome.htm –> WelcomeController.
  2. /welcomeHome.htm –> WelcomeController.
  3. /helloguest.htm –> HelloGuestController.
  4. /helloguest12345.htm –> HelloGuestController.
  5. /helloGuest.htm, bu requesti map edemez. /helloguest*, Gueat'in "g" harfi eşleşmeyecektir.

Case Sensitive

Bean'in caseSensetive property değeri true yapılırsa controller isimleri küçük büyük harf duyarlı döndürülecektr. Yani;


 
  
     
  
 
  
 
  
 


WelcomeController -> /welcome*
HelloGuestController -> /helloGuest*
  1. /helloGuest.htm –> HelloGuestController.
  2. /helloguest.htm, bu requesti map edemez. /helloGuest*, Gueat'in "G" harfi eşleşmeyecektir.

Path Prefix

Bean'in pathPrefix property'sini set edersek ControllerClassNameHandlerMapping bean'i bu classPath'i class isminin başına ekleyerek dönecektir.


 
  
  
  
  
 
  
 
  
 


WelcomeController -> /customer/welcome*
HelloGuestController -> /customer/helloGuest* 
  1. /customer/welcome.htm –> WelcomeController.
  2. /customer/helloGuest.htm –> HelloGuestController.
  3. /welcome.htm, hata.
  4. /helloGuest.htm, hata.
Evet bu handler mapping te bu kadar :).  Bu örnekleride MkYong adresinden hem kendim uygulayarak deniyorum hem size aktarıyorum. Umarım faydalı olur arkadaşlar.

Spring MVC BeanNameUrlHandlerMapping

Merhaba arkadaşlar,

Bu dersimizde de Spring MVC ile devam ediyoruz. Bu yazımda BeanNameUrlHandlerMapping ne işe yarar bunu kısaca açıklamaya çalışacağım.

Bu mekanizma Spring MVC de gelen request URL değerlerini bean isimleriyle eşleştiren default handler mapping mekanizmasıdır.
Örneğin ;


 
   
 
   
   
 
   



  • /welcome.htm ile sonlanan request değerleri, DispatcherServlet tarafından doğrudan "WelcomeController"'a yönlendirilir.
  • /streetName.htm ile sonlanan request değerleri, DispatcherServlet tarafından doğrudan "StreetNameController"'a yönlendirilir.
  • /processCreditCard.htm veya /process{any thing}.htm ile sonlanan request değerleri, DispatcherServlet tarafından doğrudan "ProcessController"'a yönlendirilir.
 BeanNameUrlHandlerMapping bean tanımını configurasyon dosyasına eklemeye bilirsiniz. Eğer Spring tanımlı bir handler mapping bulamazsa DispatcherServlet default olarak bir BeanNameUrlHandlerMapping oluşturacaktır.

 
   
   
 
   



Evet arkadaşlar BeanNameUrlHandlerMapping'i dilimiz döndüğünce açıklamaya çalıştım :). Sonraki yazılarımda diğer Handler Mapping'leri açıklamaya çalışacağım. Kolay gelsin.

Spring MVC Form Handling Example / Spring MVC Form Validasyon Örneği

Merhaba arkadaşlar,

Bu dersimizde daha önce giriş yaptığımız ve genel olarak Spring MVC'nin Form Handling mekanizmasını anlattığım yazımın devamı olarak bir örnek yapacağım. Eğer Form Handling mekanizmasını bilmiyorsanız örnekten önce buradaki yazımı okumanızı tavsiye ederim.
Bu örneğimizde bir form oluşturacağız ve form propertilerine değerler bağlayacağız.

Örneğimizde Kullandığımız Teknolojiler;
  1. Spring 2.5
  2. JDK 1.6
  3. Netbeans 7.2
  4. Apache Tomcat 7.0
Daha önce proje oluşturmayada değindiğimiz için burada proje oluşturmaya değinmeyeceğim. Dileyen arkadaşlar proje oluşturma ile ilgili yazımı buradan inceleyebilirler.

Yazımızın sonunda elimizde olacak proje dizin yapısı yanda görüldüğü şekilde arkadaşlar.

Bu örneğimizde textbox,textarea,checkbox,radiobutton,select option Spring tag'leri kullanacağız. Bu form'a ait validayonları gerçekleştireceğiz ve Spring Form Handling mekanizmasını işleten SimpleFormController controllerımızı yazacağız.








1. Model


Form properti değerlerini tutmak için model olarak Student nesnemizi kullanacağız.

Student.java

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.spring.mvc.form;

/**
 *
 * @author ahmet.boz
 */
public class Student {
    private String name;
    private String surName;
    private String number;
    private String foreignLanguages;
    private String sex;
    private String[] lesson;
    
    public Student(){}

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSurName() {
        return surName;
    }

    public void setSurName(String surName) {
        this.surName = surName;
    }

    public String getNumber() {
        return number;
    }

    public void setNumber(String number) {
        this.number = number;
    }

    public String getForeignLanguages() {
        return foreignLanguages;
    }

    public void setForeignLanguages(String foreignLanguages) {
        this.foreignLanguages = foreignLanguages;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String[] getLesson() {
        return lesson;
    }

    public void setLesson(String[] lesson) {
        this.lesson = lesson;
    }
}

2. Form Controller

SimpleFormController'dan türeyen Controller'ımız form submit edildiğinde form'u handler eder.

StudentController.java

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.spring.mvc.controller;

import com.spring.mvc.form.Student;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.validation.BindException;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.SimpleFormController;

/**
 *
 * @author ahmet.boz
 */
public class StudentController extends SimpleFormController{
 
 public StudentController(){
            //form içerisinde kullanacağımız model'imiz
            setCommandClass(Student.class);
            //hangi formla ilişkilendireceksek ismini set ediyoruz.
            setCommandName("studentForm");
 }
 
 @Override
 protected ModelAndView onSubmit(HttpServletRequest request,
  HttpServletResponse response, Object command, BindException errors)
  throws Exception {
 
  Student student = (Student)command;
  System.out.println(student);
  return new ModelAndView("studentSuccess","student",student);
 
 }
 
 @Override
 protected Object formBackingObject(HttpServletRequest request)
  throws Exception {
 
  Student student = new Student();
  //Data Structure dersini default seçili yap 
  student.setLesson(new String []{"Data Structure"});
 
  //"Male" değerini default seçili yap
  student.setSex("M");
 
  //İngilizce değerini default seçili yap
  student.setForeignLanguages("English");
 
  return student;
 }
 
 @Override
 protected Map referenceData(HttpServletRequest request) throws Exception {
 
  Map referenceData = new HashMap();
 
  //Data referencing for lessons checkboxes
  List lessonList = new ArrayList();
  lessonList.add("Data Structure");
  lessonList.add("Database");
  lessonList.add("Algorithm");
  lessonList.add("Object Oriented Programming");
  referenceData.put("lessonList", lessonList);
 
  //Data referencing for number radiobuttons
  List numberList = new ArrayList();
  numberList.add("Number 1");
  numberList.add("Number 2");
  numberList.add("Number 3");
  numberList.add("Number 4");
  numberList.add("Number 5");
  referenceData.put("numberList", numberList);
                
                //Data referencing for java languages list box
  Map foreignLanguageList = new LinkedHashMap();
  foreignLanguageList.put("Turkish", "Turkish");
  foreignLanguageList.put("English", "English");
  foreignLanguageList.put("French", "French");
  foreignLanguageList.put("German", "German");
  referenceData.put("foreignLanguageList", foreignLanguageList);
 
  return referenceData;
 }
}

3. Form Validator

Bu kısımda Form değerleri için tanımlamak istediğiniz validasyon kurallarını işletebilirsiniz. Form değerlerinin boş geçilmemesi. Alanların uzunluğu, geçerli email değerleri vs. gibi.
Gerekli resource değerlerini Bundle'dan okuyarak validayon mesajlarını sistemden ayırabilirsiniz. Burada dikkat etmeniz gereken validasyonları doğru Form propertileri için set etmeniz.

StudentValidator.java

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.spring.mvc.validator;

import com.spring.mvc.form.Student;
import org.springframework.validation.Errors;
import org.springframework.validation.ValidationUtils;
import org.springframework.validation.Validator;

/**
 *
 * @author ahmet.boz
 */
public class StudentValidator  implements Validator{
 
 @Override
 public boolean supports(Class clazz) {
  //just validate the Student instances
  return Student.class.isAssignableFrom(clazz);
 }
 
 @Override
 public void validate(Object target, Errors errors) {
 
  ValidationUtils.rejectIfEmptyOrWhitespace(errors, "name",
   "required.name", "Field name is required.");
  ValidationUtils.rejectIfEmptyOrWhitespace(errors, "surName",
   "required.surName", "Field name is required.");
  ValidationUtils.rejectIfEmptyOrWhitespace(errors, "sex", 
   "required.sex", "Field name is required.");
  ValidationUtils.rejectIfEmptyOrWhitespace(errors, "foreignLanguages", 
   "required.foreignLanguages", "Field name is required.");
 
  Student cust = (Student)target;
 
  if(cust.getLesson().length==0){
   errors.rejectValue("lesson", "required.lesson");
  }
  if("NONE".equals(cust.getNumber())){
   errors.rejectValue("number", "required.number");
  }
 }
}

mesajlar.properties

required.name = Name is required!
required.surName = Surname is required!
required.lesson = Please select at least a lesson!
required.sex = Please select a sex!
required.foreignLanguages = Please select a foreign language!
required.number = Please select a number!

4. View

Validayondan dönen form değerleri hata mesajlarını <form:errors /> tagi ile gösterilebilir.

studentForm.jsp

<%-- 
    Document   : studentForm
    Created on : 05.Ağu.2013, 05:03:46
    Author     : ahmet.boz
--%>

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





 

Spring's form tags example

Name :
Surname :
Lessons :
Sex : Male Female
Chose a number :
Foreign Language :

studentSuccess.jsp

<%-- 
    Document   : studentSuccess
    Created on : 05.Ağu.2013, 05:18:16
    Author     : ahmet.boz
--%>

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


 

Spring's form tags example

Name : ${student.name}
SurName : ${student.surName}
Lessons : []
Sex : ${student.sex}
Number : ${student.number}
Foreign Languages : ${student.foreignLanguages}

5. Spring Bean Configuration

Son olarak mesajlar.properties ve Controller'ımızı configurasyon dosyamıza kaydediyoruz.
 dispatcher-servlet.xml



    

    
    
        
            
                indexController
                student
            
        
    
    
    
 
 
 
 
 
  
 
  
 
  
  
 
  
  
    

    
    



Artık projemiz çalışır durumda. Tabi son olarak redirect.jsp içerisinde
<% response.sendRedirect("student.htm"); %> değişikliğini yapmayı unutmuyoruz, hazırladığımız sayfanın açılması için.



Spring MVC de dikkat etmeniz gereken en önemli şey isimlendirmleri doğru yerlerde kullanmanız arkadaşlar. Yardıma ihtiyaç duyduğunuz yerde iletişime geçebilirsiniz. Yorumlardan dönmeye çalışacağım. Kolay gelsin.

Spring MVC Form Validasyonu

Merhaba arkadaşlar,

Bu dersimizde daha önce giriş yaptığımız ve genel olarak yapısı ve configurasyon ayarları üzerinden geçtiğimiz Spring MVC Form Validayonu ile devam ediyoruz.
Bu örneğimizde bir form oluşturacağız ve form propertilerine değerler bağlayacağız.
Genel olarak Form Handler yapısını anlatmaya çalışacağım için yazım biraz uzun olabilir ama kolay takip edilebilir olması için önce yapıyı anlatıp sonra örnek yapacağız. Bu yazımdan sonra örneğide incelemenizi tavsiye ederim.

Spring MVC de Form submit edildiğinde handle edebilmek için Form Controller'lar kullanılır. Kendi Form Controller'ınızı yazmak için yalnızca SimpleFormControlle'dan türetmeniz ve metodlarını override etmeniz yeterli olacaktır.

1. Binding Values

SimpleFormController constructor metodu içerisinde hangi HTML form'u ile ilişkilendireceğinizi ve form içerisinde kullanacağınız model veya nesneleri burada tanımlıyoruz.

   public class StudentController extends SimpleFormController{
 //...
 public StudentController(){
  setCommandClass(Student.class);
  setCommandName("studentForm");
 }

  • setCommandClass(Student.class) – Form propertileri Student objesi içerisinde tutulur. 
  • setCommandName(“studentForm”) – "studentForm" action ismine sahip HTML form'u submit edildiğinde Spring request'i bu Controller'a yönlendirir.

2. Form Submission

Html form'u submit edildiğinde Controller'ın onSubmit() metodu execute edilecektir. Submit edilen form propertileri burada handle edilecektir ve eğer validasyonları geçmiş başarılı olaylarsa bu metod bir ModelAndView nesnesi döndürür.

public class StudentController extends SimpleFormController{
 //...
 @Override
 protected ModelAndView onSubmit(HttpServletRequest request,
  HttpServletResponse response, Object command, BindException errors)
  throws Exception {
 
  Student student= (Student )command;
  System.out.println(student);
  return new ModelAndView("studentSuccess","student",student);
 }

3. Initialization

Bazı durumlarda Form bileşenlerinin değerlerini form render edilmeden ilklenmesini isteyebilirsiniz. Yani form bileşenlerinin ilk başta default bir değeri olsun diyebilirsiniz. Bu durumda formBackingObject() metodunu override etmelisiniz.

public class StudentController extends SimpleFormController{
 //...
 @Override
 protected Object formBackingObject(HttpServletRequest request)
  throws Exception {
 
  Student student = new Student();
  student.setLesson(new String []{"Data Structure"});
  return student ;
 }

4. Data Referencing

HTML form'u içerisinde ihtiyaç duyduğunuz checkbox değerleri, dropbox değerleri (selection values) vs gibi liste verilerini bu metod içerinde doldurabilirsiniz.

public class StudentController extends SimpleFormController{
 //...
 @Override
 protected Map referenceData(HttpServletRequest request) throws Exception {
 
  Map referenceData = new HashMap();
 
  //Data referencing for web framework checkboxes
  List lessonList = new ArrayList();
  lessonList.add("Data Structure");
  lessonList.add("Database");
  lessonList.add("Algorithm");
  lessonList.add("Object Oriented Programming");
  referenceData.put("lessonList", lessonList);
                return referenceData;
        }

5. SimpleFormController Bean

Son olarak oluşturduğumuz Controller'ı bir bean olarak ekliyoruz. Ve formView ve successView properti değerlerini ezerek kendi hazırladığımız view'leri set ediyoruz. Bu iki properti değeri InternalResourceViewResolver bean'i ile birlikte bize doğru viewlerin dönmesini sağlar.

    
 
 
 
 
 
  
 
    
  
    
  • "formView"  >  "/WEB-INF/jsp/studentForm.jsp".
  • "successView"  >  "/WEB-INF/jsp/studentSuccess.jsp".
Evet arkadaşlar, genel olarak Spring MVC 'nin Form Handling mekanizmasını anlattım. Bir sonraki yazımda bu anlattıklarımı örnekleyeceğim. Örnek yazıma buradan ulaşabilirsiniz.

Spring MVC Annotation Örneği

Merhaba arkadaşlar,

Bir önceki yazımda sizlerle Spring MVC yapısından bahsettim ve genel olarak Controller , View ve Model nedir küçük bir örnek üzerinden anlatmaya çalıştım. Bu makaleyide yine onun üzerine bina edeceğiz ancak burada .xml Configuration dosyalarında Controller mappinglerini yapmak yerine Spring Annotasyonlarını kullanarak yapacağız. Bir önceki örneği incelemeniz faydalı olabilir. Buradan ulaşabilirsiniz.

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

  1. Spring 2.5
  2. JDK 1.6
  3. Netbeans 7.2
  4. Apache Tomcat 7.0

1.Spring Controller & Handler Mapping

Burada .xml configurasyonlarından farklı olarak @Controller ve @RequestMapping annotasyonlarını kullanarak Controller sınıfımızı yazabiliriz.
  • Controller –  Artık uzun uzun AbstractController sınıfından extend etmemize gerek yok. @Controller annotasyonunu eklememiz yeterli olacaktır.
  • Handler Mapping – Burada handler tanımlarını BeanNameUrlHandlerMapping, ControllerClassNameHandlerMapping veya SimpleUrlHandlerMapping gibi mapping tanımları yapmak gerekmez, bunların hepsinin yerine @RequestMapping annotasyonu yeterli olacaktır.

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
 */
  
@Controller
@RequestMapping("/welcome")
public class HelloWorldController{
 
 @RequestMapping(method = RequestMethod.GET)
 public ModelAndView helloWorld(){
 
  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 with Annotation

${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


dispatcher-servlet.xml


 
    
 
    
    
        
            
                indexController
            
        
    
     
    

  • Controller tanımımda kullandığımız annotasyonların aktif olabilmesi için <context:component-scan> element'i eklenmeli. 
  • 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/welcome.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("welcome.htm"); %> değişikliğini yapmalısınız.

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.


Eclipse ile Maven Web Projesi Oluşturmak / How to Create Dynamic Web Project using Maven in Eclipse

Merhaba arkadaşlar,

Bu dersimizde Eclipse ile Maven Web Projesi oluşturmayı anlatmaya çalışacağım.
Daha önceki derslerimde kullanacağınız maven komutları ve maven nedir ne değildir , nasıl proje oluşturulur değinmiştik.Dileyen buradan göz atabilirler.

Bu yazımdaki uygulamayı geliştirdiğim toollar,
  • Eclipse
  • Maven
  • Jboss
  • M2Eclipse Plugin
Uygulamamıza başlıyoruz.

1) Eclipse de File>New>Other>Maven>Maven Project yolunu izleyerek bir maven projesi başlatıyoruz.



























2) Çıkan ekranda projenin kaydedileceği çalışma dizini seçilmesi istenmiş. Mevcut workSpace seçeneği işaretli kalsın ve devam edelim.










3) Çıkan ekranda bira bekleyerek maven archeType listesinin gelmesini bekliyoruz. Liste açıldıktan sonra  maven-archetype-webapp type'ı seçerek devam ediyoruz.

4) Açılan ekranda daha önceki yazımda bahsettiğim proje bilgilerini dolduruyoruz ve Finish diyoruz.














5) Aşağıdaki dizin yapısında bir maven webApp projenizin olması gerekmekte sonuıç olarak.

6) Şimdi sıra mevcut maven projemizi Dynamic Web Project'e çevirmemiz gerekmekte.Bunun için Run>External Tool>External Tool Configuration yolunu izliyoruz.

7) Açılan ekranda Program üzerinde sağ tık ile new Program diyoruz.
8)  Açılan ekranda gerekli bilgileri dolduruyoruz. Resim üzerinde adımları işaretledim.
Location : maven kurduğunuz dizinden bin altındaki mvn.bat dosyasını gösteriyoruz.
Working Directory : Projemizi gösteriyoruz.


9) Run'a tıkladıktan sonra projemiz build edilecektir ve SUCCESS mesajını görmemiz lazım sıkıntısız ilerleyebilmek için.







10) Build başarılı olduktan sonra elimizde Maven ile Dynamic Web Projemiz olacaktır. Şimdi projemiz üzerine gelerek sağ tık yapın ve Refresh diyoruz.















11) Refresh ettikten sonra proje üzerinde sağ tık ile properties açıyoruz ve Project Facets menüsüne geliyoruz. Burada Dynamic Web Project seçili olduğundan emin olalım.

12 ) Şimdi projemiz çalışır duruma gelmiş olmalı eğer bir sıkıntı yok ise. Ben Jboss kullanıyorum Server olarak , sizde farklı bisi yüklü olabilir fark etmez. Şimdi proje üzerinde sağ tık ile Run> Run on Server diyoruz ve açılan pencerede projemizi deploy edilecekler sekmesine atarak Finish diyoruz.
13) Son olarak Finish dediğimizde çalışır durumda olduğunu görmemiz gerekir.

Projemizi oluşturduk ve çalıştığını gördük. Sıkıntı çıkarsa iletişime geçin yardımcı olmaya çalışırım.Bundan sonraki yazılarımda da örnek uygulamalarla devam ediyor olacağım.
Kolay gelsin.