Java Spring MVC 5. Day (Beşinci Gün)

Java Spring MVC 5. Day (Beşinci Gün)

Neden Servletlerden Framework e geçildi? → url den gelen parametrelere göre doğrudan ayrışan bir yapı yok, bunu if else vs. kullanarak biz yapmalıyız. Sadece doGet ve doPost var. doGet içinde bir çok işlem yapıp ayrıştırmalıyız. → url den gelen parametrelere göre servletlere dağılması gerekiyor.

JSR303validation spesifikasyonu. Java standart validation, Annotation ile. Örneğin,

@NotNull

private String name; → bu şekilde oluyor ve buna bean validation deniyor.

Jsf vs spring → Jsf developerları web den soyutluyor. Desktop uygulaması yazar gibi uygulama yazdırıyor. Jsf ön yüz componentleri kendi veriyor, spring de ise kendimiz yapıyoruz bu işlemleri.

Convention → herkesin üstünde uzlaştığı bir kural. Örn : “HomeServlet default olarak home.jsp forward eder” şeklinde olabilir.

Convention over configuration → Yapılandırma yerine uzlaşmayı tercih etmek. Her bir servlet şu sayfaya gidecek şeklinde ayarlamak yerine, eğer bir standartımız olsaydı mesela HomeServlet home.jsp ye gönderecekti.

  • url → config dosyasında hangi servlete gitceğini belirtiyoruz. Farklı farklı url deki farklı farklı postları handle edebilmeli. Her biri için ayrı servlet oluşturulmamalı. TodoServlet → post/create, post/edit, post/list. Bu üç post işlemi de Todoservlet içinde olmalı çünkü aynı nesneyle ilgili.

POJOPlaying out java object: Sadece değişkenleri içeren java nesneleri

JavaEE 

JPA (Java Persistance API) : kalıcı işlemlerimizde kullanılan altyapıdır.

CDI (Context Dependency ınjection) : @inject → Annotation → Servis inject vs.

EJP → distributed uygulamalarda farklı lokasyonlardaki java nesnelerinin birbirleriyle konuşması için geliştirilmiştir → protokol

JMS → java Management Service

Jax-RS → Java enterprise için REST servis yazmak için framework.

JPA → database bağlantıları işlemleri için altyapı sağlar. Hibernate gibi implementasyonlar  yapabilir.

Dependency Pool → bağımlı olduğumuz , bağımlılık gerektiren tüm nesneleri burda topluyoruz. Eğer bu nesnleer gerekirse burdan oluşturuluyor. Biz ayrı ayrı uğraşmıyoruz.

Dependency pool daki her nesne Singleton. Eğer her seferinde yeni bir nesne üretilmesini istiyorsak buna göre ayarlamamız gerek. Default olarak sadece tek bi dosya üretiyor statik gibi çalışıyor.

Hiyerarşiyi kendi map edip oluşturuyor.

Spring → @Autowired, @Inject

CDI → @Inject

Örnek → Dependency Pool : UserDao , TxManager, Properties, Connection

UserDao(connection), TxManager(Properties) → bağımlı sınıflar

@Autowired

UserDao userDao; → bu şekilde annotation ile kullanınca kendisi dependency pool dan bu nesneyi bağımlı olduğu nesnelerle birlikte üretip bize getiriyor. Böylece biz uğraşmıyoruz.

Reflection → runtime da uygulama çalışırken uygulama içindeki verilere erişir. Private methodlara da erişebilirz normalde hakkımız olmadığı halde.

Thymeleaf

açık kaynaklı bir xml/html/html5 template engine. Mvc uygulamlarında view katmanında kullanılıyor.Spring mvc ile entegrasyonu var.

Natural: bu özellik ile normal html ile birebir uyumlu çalışır. Eklenecek scriptler vs thymeleaf ile direkt ekleyip gönderip test edebiliyoruz. Render olmadan da sayfanın nasıl göründüğü hakkında bize bir fikir verir.

  • th:href=”@{/css/main.css}” → runtime da nerede olduğunu biliyor ve ona göre path seçiyor.

  • th:text=”#{home.welcome}” → # işareti yerelleştirmeyi sağlıyor. → diller saat vs.

  • düz metin içine yazarken  [[${username}]] şeklinde yazıyoruz.

  • <div th:object="${session.user}" >

<p th:text=”{name} /> → th:text=”${session.user.name}”* → böyle de yazabiliriz

 </div>

  • < a href=”details.html” th:href=”@{/order/details{orderID=${o.id}}}”>view </a>

  • <div th:if="${user.isAdmin()==false}" >

  • <tr th:each="user: $(users)">

<td th:text=${username}> Deniz </td>

  •   → eğer false ise bu bloğu gösterme vs..