jsp etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
jsp etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

19 Şubat 2016 Cuma

spring mvc ile controller dan view katmanına parametre gönderme işlemi

Merhaba,
bu yazımda spring ile controller dan view katmanına  parametre nasıl gönderildiğinden bahsedeceğim.  Bu  işi iki farklı şekilde yapabilirsiniz. Birincisi spring MVC içinde gelen ModelMap objesinden oluşturup bu objeye bir değişken set edersiniz. İkinci yöntem ise yine ModelMap objesini de kapsayan ModelAndView classını oluşturarak bu class'a obje  eklersiniz.

İlk yöntem:
@RequestMapping(value = {"/", "/hello"}, method = RequestMethod.GET)
public String printWelcome(ModelMap model) {
    model.addAttribute("message", "started!");    return "hello";}

ModelMap objesine message adında bir değişken set ediyoruz(model.addAttribute)

ikinci yöntem:
@RequestMapping(value = {"/hello2"}, method = RequestMethod.GET)
public ModelAndView printWelcome2() {
    ModelAndView mv = new ModelAndView("hello");    mv.addObject("message", "started2");    return mv;}

Oluşturduğumuz ModelAndView class'ına message diye bir String obje ekliyoruz.


 Her iki controller da da view katmanına message adında bir değişken yollamaktadır. Bu işlemden sonra ilgili JSP  sayfasına giderek ${message} şeklinde bir yazımla değişkeni ekrana basabilir veya istediğiniz şekilde kullanabilirsiniz.

12 Ekim 2014 Pazar

Spring + Quartz ile zamanlanmış görevler

Merhaba,
bu yazımda sizlere spring ve quartz entegrasyonundan bahsedeceğim. Bir projede belli aralıklarla işlem yapmak isterseniz(SMS gönderme , Mail gönderme, vs ..), bu yapıdan faydalanabilirsiniz. Ben bu projede 10 sn aralıklarla mail gönderme işlemini anlatacağım, kodları inceleyerek zamanlanmış görevler hakkında bilgi sahibi olabilirsiniz.

Öncelikli olarak intelliJ aracılığıyla bir Spring web projesi oluşturuyoruz.
Proje bittiğinde aşağıdaki yapıda olacaktır:


pom.xml dosyasına quartz dependency tanımlamalarını yaparak hemen başlayalım.

pom.xml
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>3.1.2.RELEASE</version>
        </dependency>

        <!-- Quartz API -->
        <dependency>
            <groupId>opensymphony</groupId>
            <artifactId>quartz</artifactId>
            <version>1.6.3</version>
        </dependency>

        <dependency>
            <groupId>commons-collections</groupId>
            <artifactId>commons-collections</artifactId>
            <version>3.2.1</version>
        </dependency>

        <dependency>
            <groupId>org.apache.directory.studio</groupId>
            <artifactId>org.apache.commons.logging</artifactId>
            <version>1.1.1</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-support</artifactId>
            <version>2.0.6</version>
        </dependency>

Web projesi oluşturduğum için projeye gelen tüm URL leri  index.jsp  sayfasına yönlendirelim. Yönlendirme yapmasak ta quartz çalışacaktır ancak yönlendirme yaparsak projeyi çalıştırdığımız bir karşılama sayfası olur ve sayfa bulunamadı hatası almayız.
HelloController .java
@Controller
@RequestMapping("/")
public class HelloController {
                @RequestMapping(method = RequestMethod.GET)
                public String printWelcome(ModelMap model) {
                               model.addAttribute("message", "Hello world!");
                               return "hello";
                }
}

scheduler için xml dosyası aracılığıyla MailReportServiceImpl .java dosyasındaki mailSend metotunu çağıracağız. Dolayısıyla bu class ve metodu hemen oluşturalım.

 MailReportServiceImpl .java
package com.company.service.impl;

import com.company.service.MailReportService;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;

/**
 * Created by levent.yildiz on 12.10.2014.
 */
public class MailReportServiceImpl implements MailReportService {
    @Override
    public void mailSend() {

        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Calendar calendar = Calendar.getInstance();
        String strDate = dateFormat.format(calendar.getTime());

        //TODO : development
        //Mail gönderme işlemi burada yapılacak
        System.out.println("Mail Gonderiliyor.." + strDate);
    }
}



Ve son aşamada quartz ayarlarını bir xml dosyasından yapıyoruz.
MailReportServiceImpl , MethodInvokingJobDetailFactoryBean(Quartz) ve SimpleTriggerBean(Quartz) metotlarını çağıran bean ler oluşturuyoruz.

MethodInvokingJobDetailFactoryBean metodunu çağırırken kendi yazdığımız MailReportServiceImpl  classını ve mailSend metodunu refere ediyoruz.

Birde son olarak SimpleTriggerBean metoduna bu job'un ne sıklıkla çalışması gerektiğini set ediyoruz.

<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p" xmlns="http://www.springframework.org/schema/beans"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">


    <!-- Beans -->
    <bean id="mail"
          class="com.company.service.impl.MailReportServiceImpl"/>


    <bean id="methodJobDetailBean"
          class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"
          p:concurrent="false" p:targetObject-ref="mail" p:targetMethod="mailSend"/>


    <!-- For Testing -->
    <bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean"
          p:jobDetail-ref="methodJobDetailBean" p:startDelay="20000"
          p:repeatInterval="10000"/>


    <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"
          p:waitForJobsToCompleteOnShutdown="true">
        <property name="triggers">
            <list>
                <ref bean="simpleTrigger"/>
            </list>
        </property>
    </bean>
  
</beans>


projenin çıktısı aşağıdaki gibi olacaktır:


kaynak dosyalar(github) : indirmek için tıklayın

jslt koşullu seçenekler(choose when otherwise)

Merhaba arkadaşlar,
Aslında daha önceden size jslt tarafında koşullu ifadelerin nasıl tanımlanacağını paylaşmıştım. Ancak Internet üzerinde bir araştırma yaparken stackoverflow da gözüme çarpan bir açıklama oldu. Önceki yazıyı kirletmeden yeni bir başlık altında sizlere de paylaşayım istedim. Kullanım sade ve anlaşılır olduğu için orijinal haline dokunmadan paylaşıyorum:


<c:choose>
  <c:when test="${condition1}">
    ...
  </c:when>
  <c:when test="${condition2}">
    ...
  </c:when>
  <c:otherwise>
    ...
  </c:otherwise>
</c:choose>


<c:if test="${temperature eq 'HOT' || temperature eq 'VERYHOT'}">



21 Eylül 2014 Pazar

javax ile smtp mail gönderme

Merhabalar herkese,
bu yazımda sizlere javax ile smtp doğrulama yaparak mail gönderme işlemi yapacağız. Java da Mail gönderme işlemi yapan birkaç yöntem var ben sadece bir tanesini anlatacağım. Bu size şimdilik  yol göstermiş olsun ilerleyen zamanlarda ihtiyaç duyulursa diğer metodları da yazarım.


Öncelikle yine intelliJ ile bir web(Spring MVC) projesi oluşturarak işe başlıyoruz.
projenin bitmiş hali aşağıdaki yapıda olacaktır:


projeyi oluşturduktan sonra maven dosyasını(pom.xml) aşağıdaki tanımlamaları ekleyelim.
pom.xml 
        <dependency>
            <groupId>javax.mail</groupId>
            <artifactId>mail</artifactId>
            <version>1.4</version>
        </dependency>

        <dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-mapper-asl</artifactId>
            <version>1.7.1</version>
        </dependency>

burada gördüğünüz üzere iki farklı tanımlama var. Birincisi mail göndermemize yarayan jar diğeri ise json değerleri okumamıza yarar.


index html sayfasında basit bir form oluşturalım ve bu form sayesinden son kullanıcıdan mail bilgilerini alalım.

index.html 
<div class="mailDiv">
    <form role="form" id="mailForm" method="POST" onsubmit="return false;">
        <div class="form-group">
            <input type="text" class="form-control" name="firstname" id="firstname" placeholder="Ad">
        </div>

        <div class="form-group">
            <input type="text" class="form-control" name="lastname" id="lastname" placeholder="Soyad">
        </div>
        <div class="form-group">
            <input type="email" class="form-control" id="email" name="email" placeholder="E-Posta">
        </div>

        <div class="form-group">
            <input type="password" class="form-control" id="password" name="password" placeholder="Sifre">
        </div>

        <div class="form-group">
            <input type="text" class="form-control" id="subject" name="subject" placeholder="Konu">
        </div>

        <div class="form-group">
            <textarea class="form-control" rows="3" name="message"></textarea>
        </div>
        <button type="submit" id="btnFormPost" class="btn btn-primary">Gonder</button>
    </form>
</div>

özetle bu formdan bilgileri post edip java ile karşılayacağız. Daha sonra  gelen değerli alarak Javax ile mail gönderme yapacağız.

 MailController.java
        final Mail mail = new Mail();
        mail.setFirstname(request.getParameter("firstname")); // Adı
        mail.setLastname(request.getParameter("lastname")); // Soyadı
        mail.setFromMail(request.getParameter("email")); //Gönderen Mail
        mail.setToMail(request.getParameter("email")); // Alan Mail
        mail.setPassword(request.getParameter("password")); // Gönderen Mail Şifresi
        mail.setMessage(request.getParameter("message")); // Mail mesajı
        mail.setSubject(request.getParameter("subject")); //mail konusu


        mail.setHost("smtp.gmail.com"); //sender smtp host
        mail.setPort(587);//smtp port

        Properties props = new Properties();
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.starttls.enable", "true");
        props.put("mail.smtp.host", mail.getHost());
        props.put("mail.smtp.port", "587");//gönderen mail port

üstteki kodlar ile formdan gelen bilgilerle Mail nesnesini dolduracağız. Ayrıca Properties sınıfını da gmail in mail sunucu bilgilerine göre dolduruyoruz. Diğer mail sunucular için ayarları(port,auth,host,..vs) güncellemeyi unutmayın.

projenin çıktısı aşağıdaki gibidir:


formdan girilen değerlerle mail gönderme işlemi yaptıktan sonra Adı,Soyadı,Email ve Email gönderme durumunu ekrana yazacaktır.

kaynak dosyalar(github) : indirmek için tıklayın

20 Eylül 2014 Cumartesi

Jsp ile Basit Dört işlem

Merhaba, hatırlarsanız  Neden yazıyorum? Neler yazacağım ? başlıklı yazımda sizlere(yeni başlayanlara) dört işlem ve form işlemlerinden başlayarak belirli bir java seviyesi kazandırmayı amaçladığımı belirtmiştim.
Bu yazımda  jsp sayfası üzerinden form işlemleri çerçevesinde basit aritmetik işlemler(Toplama,Çıkarma,Çarpma,Bölme) yapacağız.

Hemen intelliJ ile bir web(Spring MVC) projesi oluşturarak işe başlıyoruz.
Projenin bitmiş hali aşağıdaki yapıda olacaktır:


Oluşturduğumuz projenin görsel tarafıyla zaman kaybetmemek adına projeyi  bootstrap üzerine inşa edeceğim.
Öncelikle bootstrap  kaynak(source) linklerini jsp sayfamıza ekleyelim.

index.html 
<!-- minified CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">

<!-- minified JavaScript -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>

Projede jquery ve ajax post işlemleri yaptıracağımız için Jquery  kodlarını da   sayfaya ekleyelim.
 index.html
<!-- minified jQuery -->
<script src="http://code.jquery.com/jquery-2.1.0.min.js"></script>


sonuçları json formatında alacağım için pom xml'e jackson-mapper-asl' yi ekliyorum.
pom.xml 
        <dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-mapper-asl</artifactId>
            <version>1.7.1</version>
        </dependency>

OpController.java dosyasında tüm işlemler(toplama,çıkarma,çarpa,bölme) için birer method ekleyelim.

OpController.java 
    @RequestMapping(value = "/topla.html", method = RequestMethod.POST)
    public
    @ResponseBody
    Numbers topla(HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        Numbers numbers = new Numbers();
        numbers.setFirstNum(Integer.parseInt(request.getParameter("firstNum")));
        numbers.setSecNum(Integer.parseInt(request.getParameter("secNum")));
        numbers.setResult((double) (numbers.getFirstNum() + numbers.getSecNum()));
        return numbers;
    }


Yazıda bilgi tekrarı yaparak sizleri sıkmamak adına yazımı burada sonlandırıyorum.Kolay anlaşılabilmesi için  projenin kaynak kodlarını yazarken gerekli yerlerde  yorum satırları ekledim. Bu size yol gösterecektir.

Projenin çıktısı aşağıdaki gibi olacaktır:




kaynak dosyalar(github) : indirmek için tıklayın

14 Eylül 2014 Pazar

Spring MVC ve JSLT ile controllerdan(java) view'a(jsp) değer göndermek-2 (Foreach + If)

Merhaba, bir önceki yazımda controllerdan aldığımız değerleri view katmanında nasıl listeleyeceğimizi görmüştük. Bu yazımda ise sizlere controllerdan set edilen değerleri listelerken If kontrolünün nasıl yapılacağını ve array lerin nasıl listeleneceğini inceleyeceğiz.

Yine intelliJ ile bir web(spring MVC) projesi oluşturarak işe başlayacağız.
projemizin bitmiş halinin görünümü(Hiyerarşik yapı) aşağıdaki gibi olacaktır.



ilk olarak controllerda bilgiler ve diller diye iki farklı arrayList tanımladım. diller ; programlama dilleri bilgisini tutacak  , bilgiler ise kişi bilgilerini(ad,soyad) tutacak.
NOT: Normal şartlarda bilgileri arrayListte tutmak size anlamsız gelebilir ancak jsp(view) sayfasında farklı iki foreach ve if kullanımına yer verdim. Kullanımlardaki farklılıkları daha kolay inceleyebilmeniz için böyle bir yöntem tercih ettim.

ListController.java 
    @RequestMapping(value = "/", method = RequestMethod.GET)
    public ModelAndView index() {
        ModelAndView mv = new ModelAndView("index"); // index sayfasına gider

        HashMap<String, String> hashMap = new HashMap<String, String>();
        hashMap.put("adi", "Levent");
        hashMap.put("soyadi", "YILDIZ");

        ArrayList bilgiler = new ArrayList();
        bilgiler.add(hashMap);

        mv.addObject("bilgiler", bilgiler);

        List<String> list = new ArrayList<String>();
        list.add("C");
        list.add("Java");
        list.add("C++");
        list.add("C#");
        list.add("phyton");

        mv.addObject("diller", list);

        return mv;
    }


bu bilgileri ekrana basabilmek için yine bir önceki yazımda olduğu gibi jslt yi maven'a ekliyoruz.
pom.xml
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>



maven'a ekledikten sonra yine jsp sayfasının en üstünde jslt core'u çağırıyoruz.

index.jsp
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>


bu işlemlerden sonra arraylist'i foreach ile ekrana basabiliriz.

index.jsp
<%--kullanım 1--%>
<c:forEach var="bilgi" items="${bilgiler}">
    <c:choose>
        <c:when test="${bilgi.adi!=null && bilgi.adi!=''}">
            <p> Adi :  ${bilgi.adi} &nbsp;</p>
        </c:when>
    </c:choose>
    <c:choose>
        <c:when test="${bilgi.soyadi!=null && bilgi.soyadi!=''}">
            <p> Soyadi :  ${bilgi.soyadi} &nbsp;</p>
        </c:when>
    </c:choose>
</c:forEach>


 index.jsp
<%--kullanım2--%>
<c:if test="${not empty diller}">

    <ul>
        <c:forEach var="listLangs" items="${diller}">
            <li>${listLangs}</li>
        </c:forEach>
    </ul>

</c:if>


üstteki kodları projenize ekleyip çalıştırdığınızda controllerdan doldurulan diller(Programlama Dilleri)  ve bilgiler(Kullanıcı Bilgileri) ekrana yazdırılacaktır. Ekran çıktısı aşağıdaki gibi olacaktır.

kaynak dosyalar(github) : indirmek için tıklayın

Spring MVC ve JSLT ile controllerdan(java) view'a(jsp) değer göndermek

Merhaba,
bu yazımda size Spring ile controller dan view'a listelenecek verilerin nasıl gönderildiğini anlatacağım.

Öncelikli olarak inteliJ ile web(spring MVC ) projesi oluşturuyoruz.

projenin yapısı  aşağıdaki gibi olacaktır.


projeyi oluşturduktan sonra yapacağımız işlemleri sırasıyla ve en kısa haliyle yazıyorum;
  • pom.xml(maven) dosyasına jslt core 'u eklemek. 
  • Controller içinde listelenecek değerleri set etmek.
  • view kısmında(Jsp sayfası) bu değerleri ekrana basmak (tabi öncelikle jsp sayfasında  jslt core u çağırmak).


jslt yi maven'a eklemek için
pom.xml 
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>



controllerda değişkenleri set etmek için.
 ListController.java
    @RequestMapping(value = "/" , method = RequestMethod.GET)
    public ModelAndView index(){
        ModelAndView mv = new ModelAndView("index"); // index sayfasına gider
        mv.addObject("adi","levent");
        mv.addObject("soyadi","YILDIZ");
        return mv;
    }

index.jsp de göstermek için adı ve soyadı diye iki değer set edip addObject metoduyla bu derğerleri  springin  ModelAndView nesnesine ekliyoruz.



 index.jsp
<b>Adi :</b> ${adi}
<hr/>
<b>Soyadi : </b> ${soyadi}

controller tarafında doldurduğumuz adi ve soyadi değerlerini ekrana basmak için  ${değişken adi} şeklinde kodlama yapıyoruz. Bu sayede controller da dolan adı ve soyadı değişkenleri ekrana yazılacaktır.


Yazının başında da belirttiğim üzere sadece controllerda değer set edip view da ekrana yazdırdık. Bir sonraki yazımda  List(ArrayList)  tanımlama yapıp view katmanında göstereceğim.


kaynak dosyalar(github) : indirmek için tıklayın

24 Ağustos 2014 Pazar

Spring ile kaynak(resources) dosyalardan değer dosyalarını okuma

Merhaba, daha önceki bir yazımda jsp ile resource dosyalarının nasıl okunacağını paylaşmıştım. Ancak o yazının içindede bahsettiğim üzere bu yöntem önerilen yöntem değildi. Sadece yeni başlayanlara yol göstermek için adım adım bu işin mantığına nasıl gideceğini göremeleri ve kendilerini geliştirme aşamalarında bilgi  halkalarında eksiklik olmaması adına böyle bir paylaşımda bulunmuştum.

Parantez içinde belirtmem gereken birşey var:  Ben hep uzun soluklu yazıları okurken sıkılırdım. Dolayısıyla ne olursa olsun kısa yazacağım düşüncesi hep aklımın bir köşesinde durur ve  bazen bocalama hatta iyice uzatmama neden oluyor gibi. Anlatmak istediğimi tam olarak yansıtamamış olabilirim düşüncesiyle yazıyı  uzattıkça uzatıyorum sanki :) neyse  ilerleyen zamanlarda yazdıkça düzelir ve gelişir herhalde  :)

Hemen konuya dönerek size kulağı kısa yoldan göstermeyi anlatacağım.
kullanılan teknolojiler:
- intellij idea
- Java
- Spring framework

Öncelikli olarak intellij ile spring MVC tabanlı web projemizi oluşturuyoruz.
projenin son hali aşağıdaki hiyerarşik  yapıda olacaktır


src/main dizininin altında resources adında bir dizin oluşturuyoruz(spring varsayılan olarak buraya bakar). yine değerleri okumak için bu dizinin altında conf.properties adında bir dosya oluşturuyoruz.

src\main\conf.properties
 #mysql
db.url = localhost:3306
db.user = root
db.pass = 123456

  
Burada kalıcı ve anlaşılır olması için anlamlı dosyalar ve değerler yazmaya çalıştım. Yani yapacağımız işlemlerle  MySQL connection bilgilerini tutan ayar dosyasındaki değerleri okuyormuşsunuz gibi düşünün.

mvc-dispatcher-servlet.xml dosyasına aşağıdaki parametreyi ekliyoruz.  bunun anlamı spring ayağa kalkarken resources dizinindeki conf.properties dosyasının değerini okuyup akılda tutar.

mvc-dispatcher-servlet.xml
     <context:property-placeholder location="classpath:conf.properties"/>
  

Bu işlemlerden sonra com.company.controller paketinin altında DefaultController adında bir controller oluşturalım
com.company.controller / DefaultController
 package com.company.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
@RequestMapping("/")
public class DefaultController {

    @Value("${db.url}")
    public String dbUrl;


    @Value("${db.user}")
    public String dbUser;


    @Value("${db.pass}")
    public String dbPass;


    @RequestMapping(method = RequestMethod.GET)
    public String printWelcome(ModelMap model) {
        model.addAttribute("message", "Hello world!");

        model.addAttribute("url", this.dbUrl); // url bilgisini ekle
        model.addAttribute("user", this.dbUser); // user bilgisini ekle
        model.addAttribute("pass", this.dbPass); // pass bilgisini ekle

        return "index";
    }
}


    @Value("${db.url}")  tanımlamasıyla String tipinde dbUrl değişkeninin değerini  kaynak dosyadaki  db.url ile eşleştirdik.

    @Value("${db.user}") yine aynı mantıkla kaynaktaki db.user değerini aldık.

    @Value("${db.pass}") kaynaktaki db.pass değerini aldık.


son olarak ta okuduğumuz değerleri ekrana basmak için index.jsp sayfasını aşağıdaki şekilde düzenlenir.

src\main\webapp\WEB-INF\pages\index.jsp
 <html>
<body>
<h5>${message}</h5>

<hr/>
<b> URL : </b> ${url}

<hr/>
<b> Username : </b> ${user}

<hr/>
<b> Password : </b> ${pass}

</body>
</html>



Projeyi derleyip çalıştırınca(http://localhost:8080/) ekran çıktısı aşağıdaki gibi olacaktır:


kaynak dosyalar(github) : indirmek için tıklayın

Spring framework + Jquery + Ajax ile basit bir post işlemi.

Herkese merhaba,  hatırlarsanız blog yazmaya başlarken bir karar almıştım ve aşama aşama sizlerle birlikte proje yapmayı planlıyordum. Üzülerek belirtiyorum ki bu yazım projeye başladığımı haber veren bir paylaşım içermemektedir. Aksine iş yoğunluğumdan dolayı bir süre daha bu proje ertelenecektir.  Burada altını çizmem gereken bir durum var vazgeçmedim sadece iş yoğunluğumdan dolayı bu projeyi  erteledim. Evet arkadaşlar sizlere sıfırdan bir projeyi adım adım(ekran görüntüsü  + yazı + kaynak kod şekline) anlatacağım söz :) .

Daha fazla yazıyı uzatmadan  geçen süre içerisinde vakit buldukça aldığım notlarımı düzenleyerek paylaşmak istiyorum ki Türkçe kaynak  sıkıntısı yaşayan arkadaşların kendini geliştirmesine katkıda bulunmuş ve bu yolda yollarına bir ışık tutmuş olayım.

Bu yazımda bir Jsp projesinde form değerlerinin nasıl POST edileceğini anlatacağım.
Kullanılan teknolojiler:
- IntelliJ idea
- Java
- Spring framework
- Jquery 
- Ajax

Her zamanki gibi web tabanlı Spring MVC projemizi oluşturuyoruz.  Projenin bitmiş hali aşağıdaki gibi olacaktır:



Öncelikle model adlı paketin altında Person adında bir class oluşturuyoruz(POJO). İçinde sadece değişkenler, getter ve setter methodları olan classlara POJO(Plain Old Java Objects) deniyor.

Com.company.model / Person
package com.company.model;

public class Person {

    private String firstname;
    private String lastname;
    private String email;

    public String getFirstname() {
        return firstname;
    }

    public void setFirstname(String firstname) {
        this.firstname = firstname;
    }

    public String getLastname() {
        return lastname;
    }

    public void setLastname(String lastname) {
        this.lastname = lastname;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

İkinci olarak index.jsp sayfasını aşağıdaki şekilde düzenliyoruz. Bu sayfada basic bir form var ve jquery ile form elementlerine ulaşarak (Jquery selector)  ajax ile formu post ediyoruz ve Springin json formatında döndürdüğü sonuçları ekrana yazdırıyoruz.

Burada hem zaman kaybetmemek hemde yeniden tekerleği keşfetmemek adına görüntünün otomatik oluşması için bootstrap kullanacağım siz isterseniz kendi tasarımınızı oluşturabilirsiniz. Bootstrap linkleri aşağıdadır.
    <link href="http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css" rel="stylesheet">
    <script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>



src\main\webapp\WEB-INF\pages\index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title></title>

    <%--bootstrap css--%>
    <link href="http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css" rel="stylesheet">

    <%--bootstrap js--%>
    <script type="text/javascript" src="http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>

    <%--jquery js--%>
    <script type="text/javascript" src="http://code.jquery.com/jquery-2.1.0.min.js"></script>

</head>
<body>
<style>

    .personDiv{ margin:0px auto; margin-top: 10px;  padding:20px; width: 50%; border: 1px solid #000; }

</style>

<script>
    $( document ).ready(function() {

        $("#btnFormPost").click(function () {

            alert("clicked");
            $.ajax({
                type: "post",
                dataType: "json",
                url: "http://localhost:8080/person/add.htm",
                data:'firstname=' + $("#firstname").val() + "&lastname=" + $("#lastname").val() + "&email=" + $("#email").val(),
                success: function(response){

                    $("#resFirstName").text(response["firstname"]);
                    $("#resLastName").text(response["lastname"]);
                    $("#resEmail").text(response["email"]);
                },
                error: function(){
                    alert('Post İşlemi Esnasında Bir Hata Oluştu');
                }//error finish
            });//ajax finish
        });//click finish

    });
</script>

<div class="personDiv">
<form role="form" name="personForm" method="POST" onsubmit="return false;">
    <div class="form-group">
        <label for="firstname">Ad</label>
        <input type="text" class="form-control" name="firstname" id="firstname" placeholder="Ad">
    </div>

    <div class="form-group">
        <label for="lastname">Soyad</label>
        <input type="text" class="form-control" name="lastname" id="lastname" placeholder="Soyad">
    </div>
    <div class="form-group">
        <label for="email">E-Posta</label>
        <input type="email" class="form-control" id="email" name="email" placeholder="E-Posta">
    </div>
    <button type="submit"  id="btnFormPost" class="btn btn-primary">Gonder</button>
</form>
</div>

<div class="personDiv" id="result">
    <div class="form-group">
        <label>Adı : </label>
        <label id="resFirstName"></label>
    </div>
    <div class="form-group">
        <label>Soyadı : </label>
        <label id="resLastName"></label>
    </div>
    <div class="form-group">
        <label>E-Posta : </label>
        <label id="resEmail"></label>
    </div>
</div>

</body>
</html>

Son olarak controller u yazıyoruz. Controller dosyasında  URL de "/" gördüğünde varsayılan olarak index.jsp sayfası çağrılacak URL de  "/person/add.htm”  gördüğünde ise add methodu devreye girecek ve formdan gelen değerleri alıp tekrar forma geri gönderecek.

Com.company.controller / PersonController
package com.company.controller;

import com.company.model.Person;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@Controller
public class PersonController {


    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String index() {
        return "index";
    }


    @RequestMapping(value = "/person/add.htm", method = RequestMethod.POST)
    public
    @ResponseBody
    Person add(HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        Person person = new Person();

        String firstName = request.getParameter("firstname");
        String lastName = request.getParameter("lastname");
        String email = request.getParameter("email");

        person.setEmail(email);
        person.setFirstname(firstName);
        person.setLastname(lastName);

        return person;
    }
}


@Controller  anatosyanu ile sınıfımızın bir controller olduğunu belirttik.
@RequestMapping ile URL in nasıl map edileceğini ve hangi methoda göre değer alacağımızı belirttik.
@ResponseBody ile methodun içinde çıktı oluşturacağımızı belirttik.
yapılan işlemler özetle bu kadardı :)

Aslında burada formdan değerler alındıktan sonra DB işlemleri yaptırabilirdik. Sizlere bir anda bilgi yüklemesi yaparak kafanızı karıştırmayım istedim eğer talep olursa   İlerleyen yazılarımda da POST edilen değerleri DB ye aktarma işlemlerini anlatıyor olurum.

Her neyse tüm bu işlemlerden sonra projeyi  derleyip, web browserdan çalıştırıp (http://localhost:8080/) 
ilgili alanları doldurarak  Gönder butonuna basarsak değerler post edilip, response oluşturulacaktır. ve response edilen değerler ekrana yazılacaktır.






kaynak dosyalar(github) : indirmek için tıklayın