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.
JSR303 → validation 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.
POJO → Playing 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>