26 Ağustos 2013 Pazartesi

Dosya Kurtarma Programları

Merhaba arkadaşlar.

Geçenlerde internette okuduğum bir kaynakta , dosya kurtarma programlarını anlatmıştı. İlgimi çekti ve işe yarar diye düşünerek sizlerlede paylaşmak istedim.

Önemli bir dosyanız mı bozuldu? Yoksa yanlışlıkla sildiniz mi? Manevi ve maddi değeri yüksek verilerinizin kaybolması çıldırtıcı olabilir. Elinizde doğru programlar olursa kurtarma şansınız bir hayli yüksek. Her ne kadar %100 garanti vermese de, tamamen kaybetmek yerine bu programları denemeye değer.





1. Recuva Free

Recuva Free, en yaygın kullanılan ve gücü tescilli dosya kurtarma yazılımlarından biri. Kullanım sihirbazı ne tür bir dosya aradığınızı, nerelere bakmasını istediğinizi soruyor ve aramaya başlıyor. FAT, exFAT ve NTFS dosya sistemleri destekleniyor.

Bulunan dosyalar listeleniyor (Resimlerin ön izlemeleri de görüntüleniyor.) ve ihtiyacınız olan dosyaları birkaç tıklamayla kurtarabiliyorsunuz. Programı gelişmiş modda kullanırsanız daha fazla seçenek ve belli bir konudaki metinlerin yer aldığı dosyalar gibi daha detaylı arama özelliklerine sahip oluyorsunuz. Bu durumda arama yavaş gerçekleşiyor ama daha fazla dosya kurtarılıyor. Ayrıca önemli bilgilerin olduğu dosyaların silinmemesi için güvenlik kilidi de koyabiliyorsunuz.

2. UNDELETE 360

Undelete 360 paralı bir programın ücretsiz sürümü; bu nedenle dosya filtreleme, ön izleme gibi bazı özellikler kullanılamıyor. Bu özellikler kapalı olmasına rağmen arayüzde duruyor ve isterseniz ödeme yaparak açabiliyorsunuz. Kurtarılacak dosyaların sayısında ya da büyüklüğünde herhangi bir sınır yok ve kullanımı oldukça kolay. Silinen dosyaları arıyor ve işlem ağacından kurtarılacak dosyaları seçiyorsunuz.

Arama hızı mükemmel değil ama Undelete 360 diğer kurtarma programlarının kaçırdığı dosyaları kurtarabiliyor. O yüzden bilgisayarınıza kurun ve ihtiyacınız olduğunda deneyin derim.

3. PARTITION RECOVERY

Standart kurtarma programları birkaç dosyayı kurtarmak için oldukça başarılı ama bir sabit disk bölümünü tamamını kaybettiyseniz MiniTool Partition Recovery’i kurmalısınız.

Program, kullanımı kolaylaştıran arama sihirbazı temelli bir arayüze sahip. Problem yaşadığınız sürücüyü işaretleyin, aranacak bölümü seçin ve kayıp bölümün aranmasını bekleyin. Bulunanlar size rapor olarak aktarılacak ve birkaç saniyede dosyalarınızı geri getireceksiniz.

Programla birlikte önyüklemeli bir kurtarma diskiniz olmuyor, dolayısıyla sistem bölümünüz zarar gördüyse MiniTool Partition Recovery size fazla yardım edemez ama sistem bölümü dışındaki kayıp bölümleri hızlıca kurtarmanızı sağlar.

4. WISE DATA RECOVERY

Wise Data Recovery’den daha kolay kullanılan bir kurtarma programını hayal etmek oldukça zor! Programda menü, karışık seçenekler ve soru pencereleri yok. Tek yapmanız gereken bir sürücü seçmek, “Scan” düğmesine tıklamak ve programın silinen tüm dosyaları bulmasını beklemek.

Ardından ihtiyacınız olan dosyayı seçip “Recover” düğmesine tıklıyorsunuz ve dosyalarınız kurtarılıyor. Program FAT tabanlı sürücülerle çalışmıyor gibi görünüyor ve benim test için kullandığım USB’den hiçbir dosyayı kurtaramadı, ancak NTFS tabanlı bir sürücüden dosya kurtarmak istiyorsanız programı alet çantanıza ekleyin.

5. PHOTOREC DIGITAL PICTURE RECOVERY

PhotoRec; birkaç sınırlamaya rağmen oldukça güçlü bir kurtarma programı. Program ücretsiz ve neredeyse tüm işletim sistemlerinde (DOS, Windows, Linux, OS X), farklı dosya sistemleriyle ve cihazlarla çalışıyor. Verilerinizi kurtarmak için 200’den fazla dosya biçimine ait teknik detaylardan yararlanıyor ve birlikte gelen TestDisk aracı silinen bölümleri de kurtarabiliyor.

Ancak programın bir zorluğu var: PhotoRec oldukça basit, DOS benzeri bir arayüze sahip ki bunun birçok kullanıcının gözünü korkutacağını öngörmek zor değil. Bu durum programı karışık hâle getirmiyor ve sizi yapılması gereken her adımla ilgili bilgilendiriyor. Yine de bu programda sadece işlevsellik ön planda ve siz kolay kullanılan bir program arıyorsanız diğerlerine bakmanızı öneririm.

6. FREEUNDELETE

FreeUndelete eski, yavaş ve sadece ev bilgisayarınızda kullanmanız için. Program test amaçlı FAT sürücüm kurtarma yapamadı ki bu iyi bir başlangıç değil. Ancak NTFS sürücüsünde durum değişti ve kaybolan tüm dosyaları buldu.

Bulunan dosyalar kullanıcının kolay tespit etmesi için tek bir liste yerine klasör yapısında gösteriliyor ve kurtarmanız gereken dosyaları bir iki tıklamayla geri alabiliyorsunuz.

Daha iyi dosya kurtarma araçları mevcut ama FreeUndelete’i ilk tercih ettiğiniz kurtarma programı işe yaramazsa alternatif olarak kullanabilirsiniz.

7. PARAGON RESCUE KIT

Eğer bilgisayarınız önyükleme yapamayacak kadar kullanılamaz hâle geldiyse daha önce kurduğunuz hiçbir kurtarma programı işe yaramaz. Paragon Rescue Kit Free ise diğerlerinden biraz daha farklı. Paragon’un kalıp dosyasını önceden boş bir CD’ye yazmanız gerekiyor.

Daha sonra bilgisayarınızın başına bir şey gelirse CD’yi takıyorsunuz, Windows çökmüş olsa bile program çalışmaya başlıyor.

Program, kaybolan veya silinmiş bir bölümü geri yükleyebiliyor. İçindeki Boot Corrector genel önyükleme problemlerini çözüp bilgisayarınızı tekrar çalışır hâle getirebilir ama o da işe yaramazsa Paragon’un Dosya Aktarım Sihirbazı önemli dosyaları başka bir yerel sürücüye aktarmanıza veya CD/DVD’ye yazmanıza yardımcı olabilir. Genel olarak kullanışlı bir program olduğunu söyleyebilirim.

8. GLARY UNDELETE

Gösterişe kaçmayan bir program olan Glary Undelete, dosya kurtarma konusunda oldukça temel işlevleri yerine getiriyor. Bir sürücü seçmek ve ‘”Search” düğmesine basıp beklemekten başka bir şey yapmıyorsunuz.

Gerçi beklemek biraz zaman alıyor, Glary Undelete çoğu programdan daha yavaş. Program hem FAT hem de NTFS sürücülerden dosya kurtarma konusunda iyi iş çıkarıyor ve bulduğu dosyaları hem tek bir liste hem de klasörler hâlinde kullanıcıya sunuyor.

Ayrıca dosya türüne veya isme göre filtreleyip aradığınızı daha kolay bulabilirsiniz. Glary Undelete’te ekstra olarak sunulan fazla özellik bulunmuyor ama program, temel özellikler konusunda iyi bir puan alıyor.

9.PANDORA RECOVERY

Bazı diğer programların aksine Pandora Recovery, bulduğu dosyaları sadece liste olarak kullanıcıya sunmuyor.

Dosyaları Windows Gezgini’nden aşina olduğunuz bir arayüzle de bulabiliyor veya mükemmel arama aracıyla isim, boyut, oluşturma tarihi veya son değiştirme tarihine göre listeleyebiliyorsunuz. Üzücü olansa -özellikle FAT sürücülerde- dosya tespitinin her zaman güvenilir olmaması ve Quick Scan modunun pek işe yaramaması.

Surface Scan modu her şeyi kurtardı, o yüzden programın denemeye değer olduğunu düşünüyorum.

10. PC INSPECTOR FILE RECOVERY

PC Inspector File Recovery, yaptıüım testlerde iyi bir iş çıkardı. Hem FAT hem de NTFS sürücülerdeki tüm kayıp dosyaların yerini tespit etti. Dosyalar basit bir klasör görünümünde sıralanıyor ve basit arama aracıyla isme göre arama yapmak da mümkün. Program dosyaları yerel sürücülere veya ağ sürücülerine kaydedebiliyor.

Tabii ki bu noktaya gelmek biraz zaman alabilir çünkü arayüz, sol tarafta aşağı uzayan bir sürü sekmeyle kafa karıştırıyor. Nasıl kullanacağınızı öğrenmek için USB bellek veya önemsiz bir diskle alıştırma yapmanızı öneriyorum.

Dosyaların metin olarak ön izlemesini görebiliyorsunuz ama JPEG dosyalarının görsel ön izlemesini görememek biraz tuhaf. PC Inspector File Recovery, kurtarma motoru için övgüyü hak ediyor ama programa iyice hâkim olmak için biraz çalışmanız gerekiyor.

12 Ağustos 2013 Pazartesi

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.

6 Ağustos 2013 Salı

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.

5 Ağustos 2013 Pazartesi

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 Handling Mekanizması / 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.

2 Ağustos 2013 Cuma

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.

Bloger ile SyntaxHighlighter Kullanımı / How to Use SyntaxHighlighter with Bloger

Merhaba arkadaşlar, Bu yazımda SyntaxHighlighter kullanımını anlatmaya çalışacağım.Bu yazıyı okuyorsanız sizde bilirsiniz ki paylaşacağınız kod parçacıklarını html de düzenlemek oldukça zordur ve tarayıcılar tarafından html,css,xml .. gibi kaynak kodlar olduğu gibi basılmaz. Eğer yazılarınız içerisinde HTML, CSS, JavaScript veya herhangi bir programlama diline ait bir kaynak kod yayınlıyorsanız SyntaxHighlighter eklentisi, işinize çok yarayacak bir eklentidir. Bu eklenti ile birlikte, yayınladığınız kodlar, renklendirilerek estetik bir görünüme kavuşur.

Evet blogunuza eklemek için Blogger Kumanda Paneli > Şablon > HTML’yi Düzenle diyoruz ve aşağıdaki kod parçasını </head> taginin hemen üzerine yapıştıralım. Aynı şekilde bloger için değil sadece kendi geliştirimlerinizde de uygulamanıza ekleyebilirsiniz.







Artık yazılarınızda html,java,xhtml,javascript.. vs kod parçalarını çok daha rahat kullanabilirsiniz. Kullanım için kodlarınızı hangi programlama diline ait ise onun tag'ini kullanarak aşağıdaki tag'ler arasına yazmalısınız.

   
   
    HTML kodlarımız buraya yazılacak.
   
    JavaScript kodlarımız buraya yazılacak.
   

Yazıldığı dilin algılanıp, renklendirilebildiği brushların listesi aşağıdadır.
actionscript3, bash, shell, c-sharp, csharp, cpp, c, css, delphi, pas, pascal, diff, patch, groovy, js, jscript, javascript, java, jfx, javafx, perl, pl, php, plain, text, ps, powershell, py, python, rails, ror, ruby, scala, sql, vb, vbnet, xml, xhtml, xslt, html, xhtml
 
Bu yazımız da bu kadar arkadaşlar. Kolay gelsin. 

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.


5 Temmuz 2013 Cuma

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.