9.JSP (Java Server Pages)

JSP (JAVA SERVER PAGES)

JSP teknolojisi html sayfası içerisinde dinamik olarak jsp takılarının belirlenebildiği önemli bir teknolojidir.
Jsp teknolojisi de arka planda java servlet apilerini kullanmaktadır.böyle bir teknolojinin avantajı örneğin servlet teknoljisinde bir html cevabı için programcının server tarafta kendisinin bu html yazısını oluşturmalıdır. Ancak jsp ile server tarafında çalışan kod html sayfası içesine gömülür (java script let) ve reponse durumunda bu kodlar dinamik olarak çalıtırılarak sayfa oluşturulur.bir jsp uygulaması servlet programlarda olduğu gibi dynamic web project oluturlur jsp file ekleyrek oluturablir. Jsp kullamanın benzer teknolojilere göre avatajları vardır. Benzer şekilde jsp uygulamaları içinde bir jar dosyası gerekmetedir.

Anahtar notlar : Eclipse ide sinde bir jsp uyuglaması şu şekilde oluşturulur:

1 – Dynamic web project açılır. Açılan projede proje ismi verildikten sonra istenirse dynamic web module version uygun şekilde seçilir. Next butonu ile birlikte iki defa geçildikten sonra web xml dosyasının otomatik oluturup oluşturulmaması belirlenir. Genelde default olarak web xml oluşturma seçili değildir. Finish butonu ile birlikte bu aşamadan sonra build path menüsünde uygun jar dosyaları external jars seçeneği ile eklenmedir. jsp uyugulamaları için servlet ve jsp ye ilişkin apileri eklenmelidir. (Tomcat ' in lib klasörü içindeki ilgili jar dosyaları)Bu aşamadan sonra proje içerisindeki java resource dizini içerinde src nin içine ilgili jsp dosyası eklenmelidir.jsp dosyasının nerede bulanacağına ilişkin pencerede jsp dosyasının ismi de belirlenebilir.

JSP Genel Sentax Yapısı

JSP kodları, HTML'de (şüphesiz diğer markup dillerde de olabilir) açısal parantez yüzde ve yüzde açısal parantez içerisinde yazılmaktadır.(<% …..... %>)herhngi bir text mutlaka açısal açısal parantez yüzde ve yüzde açısal parantez doşına yazılmalıdır. açısal parantez yüzde ve yüzde açısal Arasına bir deyim yazılabilir. Örneğin :

<% out.println("Merhaba JSP"); %> <% out.println("<b> IP adresi: </b>" + request.getRemoteAddr()); %>

Jsp Yorum Satırları :

Yorum satırları açısal parantez yüzde, yüzde açısal parantez dışına yazılmalıdır Buna göre aslında html yorum satırlarını da sayarsak jsp sayfasına iki şekilde yorum satırı yazılabilir.Buna göre aslında açısal paratez yüzde ve yüzde açısal parantez arasına yalnızca deyimler yazılabilir.

Jsp Bidirim takıları : <%! int a;%>

Jsp de bildirim işlemi açısal paratez yüzde ünlem ve yüzde açısal parantez içesinde yapılmalıdır.

002-JSPDecleraiton

Jsp ifade işlemleri( JSP Expression Tag) : <%= “ali” + “veli” %>

Bilindiği gibi ifade (expression) sabitlerden operatörlerden oluşan herhangi bir dizilime denmektedir Jsp de açısal paratez yüzde eşittir, yüzde açısal parantez içerine yazılan ifadelerin üretttikleri değerler String e dönüştürülerek çağrılır. Burada içerisine ifade konulduğunda “;” ile bitirilmemesi gerektiğine dikkat edilmelidir.

003-Expressions

Sınıf çalışması : Basit bir form içerisinde kişi adı soyadı doğum tarihi girdiğinde; kişinin yaşını bir html form içierisinde döndüren programı yazınız.

004-SimpleAgeCalculator

Sınıf çalıması :
2 adet form yapınız. 1. formda ad soyad, tckimlik no ve d.tarihi bilgileri girilsin 2. formda ise tc kimlik noya göre bulunan kişinin yaşı ile beraber bilgilerinide veren, bulunamazsa aranan kişi bulanmadı şeklinde bir sayfa döndüren uygulamayı jsp kullanarak yaznınz. Not : Eklenen data lar person isimli bir sınınf için de seri etme yöntemi kullanılarak bir dosyada saklanacaktır. Tc kimlik no' nun 11 haneden oluşması son rakamının çift sayı olması ve rakamlardan oluşması kontrol edilecektir.

005-SimplePeopleInformation

Çalışma sorusu: yukarıdaki örneği JSON formatında kaydetip, JSON formatında işlem yapan şekle sokunuz.

Anahtar Notlar :

```package org.csystem;

public class App { public static void main(String[] args) { try { DictionaryDBHelper helper = new DictionaryDBHelper();

        for (WordInfo wi : helper.getWords())
            System.out.println(wi);

        System.out.println("*************************");

        WordInfo wi = new WordInfo(3, "glass");

        helper.getMeaning(wi);

        System.out.println(wi);

    }
    catch (Throwable ex) {
        System.err.println(ex.getMessage());
    }        
}

}

package org.csystem;

import java.util.ArrayList; import java.util.List;

public class WordInfo { private int m_id; private String m_word; private List m_meanings; public WordInfo(int id, String word) { super(); m_id = id; m_word = word; m_meanings = new ArrayList<>(); }

public boolean add(Meaning m)
{
    if (m == null)
        throw new IllegalArgumentException("Invalid arguments");

    return m_meanings.add(m);
}

public int getId()
{
    return m_id;
}
public void setId(int id)
{
    m_id = id;
}
public String getWord()
{
    return m_word;
}
public void setWord(String word)
{
    m_word = word;
}    

public Meaning get(int index)
{
    return m_meanings.get(index);
}

@Override
public String toString()
{
    return String.format("%s:%s", m_word, m_meanings.isEmpty() ? "" : m_meanings);
}    

} package org.csystem;

public class Meaning { private int m_id; //... private String m_meaning; public Meaning(int id, String meaning) { super(); m_id = id; m_meaning = meaning; } public int getId() { return m_id; } public void setId(int id) { m_id = id; } public String getMeaning() { return m_meaning; } public void setMeaning(String meaning) { m_meaning = meaning; } @Override public String toString() {
return m_meaning; } } package org.csystem;

import java.sql.*; import java.util.ArrayList; import java.util.List;

public class DictionaryDBHelper { private static final String JDBC_DRIVER = "com.mysql.jdbc.Driver"; private static final String DB_URL = "jdbc:mysql://localhost:3306/mydictionarydb"; private static final String USER_NAME = "root"; private static final String PASSWORD = "csd1993";

public DictionaryDBHelper() throws ClassNotFoundException, SQLException 
{
    Class.forName(JDBC_DRIVER);        
}    

public List<WordInfo> getWords() throws Exception
{
    String sql = "select * from words";
    List<WordInfo> result = new ArrayList<>();

    try (Connection conn = DriverManager.getConnection(DB_URL, USER_NAME, PASSWORD); Statement stmt = conn.createStatement()) {
        ResultSet rs = stmt.executeQuery(sql);

        while (rs.next())
            result.add(new WordInfo(rs.getInt(1), rs.getString(2)));                        
    }
    catch (Exception ex) {
        throw ex;
    }

    return result;        
}    

public WordInfo getMeaning(WordInfo wi) throws Exception
{
    String sql = "select * from meanings where word_id=" + wi.getId();        

    try (Connection conn = DriverManager.getConnection(DB_URL, USER_NAME, PASSWORD); Statement stmt = conn.createStatement()) {
        ResultSet rs = stmt.executeQuery(sql);

        while (rs.next())
            wi.add(new Meaning(rs.getInt(1), rs.getString(3)));                        
    }
    catch (Exception ex) {
        throw ex;
    }

    return wi;        
}    

public int insertWord(WordInfo w) throws Exception
{
    String sql = "insert into words (word) values (?)";
    int result = 0;

    try (Connection conn = DriverManager.getConnection(DB_URL, USER_NAME, PASSWORD); PreparedStatement stmt = conn.prepareStatement(sql)) {
        stmt.setString(1, w.getWord());                    

        result = stmt.executeUpdate();
    }
    catch (Exception ex) {
        throw ex;
    }

    return result;
}

public int updateWord(WordInfo wi) throws Exception
{
    String sql = "update words set word=? where words_id=?";
    int result = 0;

    try (Connection conn = DriverManager.getConnection(DB_URL, USER_NAME, PASSWORD); PreparedStatement stmt = conn.prepareStatement(sql)) {
        stmt.setString(1, wi.getWord());
        stmt.setInt(2, wi.getId());
        result = stmt.executeUpdate();
    }
    catch (Exception ex) {
        throw ex;
    }

    return result;        
}

public int deleteWord(WordInfo wi) throws Exception
{
    String sql = "delete from words where word=?";
    int result = 0;

    try (Connection conn = DriverManager.getConnection(DB_URL, USER_NAME, PASSWORD); PreparedStatement stmt = conn.prepareStatement(sql)) {
        stmt.setString(1, wi.getWord());            
        result = stmt.executeUpdate();
    }
    catch (Exception ex) {
        throw ex;
    }

    return result;        
}    

}```

JSP Actions

JSP içerisinde xml sentaksına benzer bir şekilde servlet motorunun davranışına ilişkin bir takım belirlemeler yapılabilmektedir. Örn herhangi bir dosyanın Scriplet'e dahil edilmesi ismini "Java Beans" denilen bileşenlerin kullanılması, başka bir sayfaya ileri yönlü iletilmesi gibi bir takım işlemler bu şekilde kolaylıkla yapılabilmektedir. JSP Action bildirimlerinin genel biçimleri şu şekildedir:

<jsp: actionname: attribute="value"/>

Aslında Action elemanları önceden tanımlanmış fonksiyonlardır. JSP nin desteklediği Actionlar şunlardır:

  • JSP:include
  • JSP:useBeean
  • JSP:setProperty
  • JSP:getProperty
  • JSP:forward
  • JSP:plugin
  • JSP:element
  • JSP:attribute
  • JSP:body
  • JSP:text

JSP Actionlarının Ortak Attributeları

2 adet attribute tüm JSP aksiyonlarında ortak olarak kullanılmaktadır.

ID Attribute: Id attribute Action elemanını ayırt etmek için kullanılan tekil bir bilgidir.

Scope Attribute:Bu attribute action elemanının yaşam döngüsünü içeren bir attribute tur. Page:Request:Session:Application

<jsp:include> action

Sınıf çalışması: JSP ile zaman dışarıdan ayrı bir dosyadan alınacak şekilde basit bir dijital saat uygulaması geliştiriniz.

007-JSPIncludeAction

<jsp:usebean 
<jsp:getproperty
<jsp:setproperty

JSP içerisinde ismine bean denilen sınıflar ve temel olarak veri elemanları kullanılabilmektedir. Bu işlem ile sınıfın get ve set metotları getProperty ve setProperty actionları ile tanıtılıp, bean kullanılabilmektedir.

<JSP:useBean> action'ı varsa varolan nesneyi kullanır, yoksa yeniden yaratır. Buna göre bu 3 action birlikte kullanılmaktadır.

<jsp:useBean/> aşağıdaki gibidir. Burada takısından sonra belirtilen setProp ve getProp elemanları eğer useBean takısının sonrasında yaratılmışsa nesne olsa da olmasa da çağrılır. Eğer useBean takısının içinde yazılmışsa nesne yeniden yaratıldığında çağrılır. Bu durumda yalnızca yeni nesne yaratılmışsa çağrılır. Burada getProperty ve setProperty takılarının name ve attribute elemanları ile useBean takısının aynı olması gerektiğine dikkat edilmelidir.

008-UsingBean

Sınıf Çalışması: JSP kullanarak basit bir ürün giriş ekranı hazırlayınız. Form içerisinde ürüne ilişkin ürün adı, ürün kodu ve ürün adedi ve ücret bilgileri bulunacaktır. Başka bir form üzerinden ürün koduna göre arama yapılan ve bulunan ürünün bilgilerini "useBean" şeklinde gösteren bir uygulamayı yazınız.

Sınıf Çalışması 2: Yukarıdaki örneği update.html formu ekleyiniz, bulunan ürünü içerisinde elemanları barındıran yeni bir form(JSP ile hazırlanmış) açılsın, form üzerinde güncelle butonuna basıldığında başka bir Servlet üzerinden güncelleme işlemi yapılsın. Delete kısmını ekleyiniz. Menü seçildiğinde tüm ürünleri listeleyen kısmınıda yazınız.

Sınıf Çalışması 3: Bir önceki uygulamada yeni bir Customers isimli tablo ekleyiniz. Bu tablonun alanları customer_id, name, address, email olacaktır. Projede verilere erişim için her bir sınıf için servis katmanlarını da yazınız.

Sınıf Çalışması 4: "searchdetail.html" isimli form tasarlayınız. Bu form içinde bir text alana radio butonlarda seçilen kritere göre arama algoritmasını ürünler için bir "select.html" tag'ine aktaran uygulamayı yazınız.

009-SimpleProductAutomation

Anahtar not: Bean olarak kullanılacak sınıfların default constructorları mutlaka bulunmalıdır.

(public Product() {})

results matching ""

    No results matching ""