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.