31 Ağustos 2014 Pazar

Ubuntu sunucuya java ve tomcat kurulumu.

Merhaba arkadaşlar, bu yazımda size ubuntu sunucu üzerinde java kurulumu yapmayı ve apache tomcat kurmayı göstereceğim. Bir projede geliştirdiğim kodlarımı  linux sunucuya deploy etmem gerekti ve bu işlemleri yaparken birkaç not aldım bu notlarımı da sizlerle paylaşayım istedim.

Yine her zamanki gibi adım adım anlatacağım  yapılacak işlemleri. Ben VM Player ile sanal bir sunucu kurdum benzer şekilde sizde ilerleyebilirsiniz. 


hazırlık1 : sunucuya bağlanıp login olalım..


hazırlık2  : login işleminden sonra sudo  bash komutuyla  root olalım.


1 -   İşlteim sistemi update gerektirebilir. Dolayısıyla ilk olarak sunucuyu update ediyoruz.
sudo apt-get update

2 -      SSH(server) kurulumu için terminal üzerinden (sunucuya putty yada benzeri bir tool ile bağlanmak isterseniz bu kurulumu yapmanız gerekir)
sudo apt-get install openssh-server
                                                            
3 - Java kurulumuna başlıyoruz.
 sudo apt-get install openjdk-7-jdk

4 - Java –version komutu ile javanın yüklenip yüklenmediğini görebilirsiniz.
 Java –version


5 - JAVA_HOME değişkeinin set edilmesi(nano /etc/environment)
 JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64/

6 - JAVA_HOME değişkeninin kontrolü
 echo $JAVA_HOME


7 – Dosya indirme işlemleri yapmak için kullanıcı directory ye gidilir
 cd  /home/levent

8 - Apache Tomcat  indirme işlemi

9 - İndirilen tar dosyasını açma işlemi
 tar -xvf apache-tomcat-7.0.55.tar.gz

10 – home/levent dizinine açtığımız Apache Kurulum dosyası  /user/local’e taşınır.
mv apache-tomcat-7.0.55 /usr/local/

11- etc/init.d dizininde tomcat7055 dosyası oluşturulur.
cd /etc/init.d/
touch tomcat7055

12 - tomcat7055 dosyası açılarak içeriği aşağıdaki şekilde düzenlenir.
#!/bin/bash
export CATALINA_HOME=/usr/local/apache-tomcat-7.0.55
PATH=/sbin:/bin:/usr/sbin:/usr/bin
start() {
 sh $CATALINA_HOME/bin/startup.sh
}
stop() {
 sh $CATALINA_HOME/bin/shutdown.sh
}
case $1 in
  start|stop) $1;;
  restart) stop; start;;
  *) echo "Run as $0 <start|stop|restart>"; exit 1;;
Esac
13 - tomcat7055 dosyasını çalıştırma izni için aşağıdaki komut çalıştırılır
sudo chmod 755 tomcat7055

14 -  tomcat erişim ayarlarını yapmak için tomcat-users.xml dosyası açılır
nano /usr/local/apache-tomcat-7.0.55/conf/tomcat-users.xml

15 - tomcat-users.xml dosyasına aşağıdaki satırlar eklenir.
<tomcat-users>
<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<user username="levent" password="12345" roles="manager-gui,admin-gui"/>
</tomcat-users>

16 – son olarak tomcat servisi start edilir.
sudo /etc/init.d/tomcat7055 start


17 -  browser üzerinden aşağıdaki adresi yazarak test edin.


18 – başlarken çalışması için
sudo nano ~/.bashrc

 19 – Java_Home ve Catalina_home değerleri burada set edilir
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
export CATALINA_HOME=/usr/local/apache-tomcat-7.0.55

 20 – kaydedip çıktıktan sonra alttaki komut çalıştırılır.
 . ~/.bashrc

 21 – test için ise  alttaki komut çalıştırılır.
$CATALINA_HOME/bin/startup.sh

22- yada 19-20-21 nolu işlemlerin yerine  kısaca allatki komutla startup dosyasına tomcat eklenir
sudo update-rc.d tomcat7055 defaults


23 – makine restart edildikten sonra tekrar browser üzerinden sunucu test edilir.


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