JavaEE Web Geliştirmeye Giriş

Java Servlet



Hazırlayan

Destan Sarpkaya
destan@dorukdestan.com

## İçerikte neler var? * İnternet (www kısmı) nasıl çalışır? * HTTP nedir? * Web sunucusu nedir? * Web sunucularının bir birlerinden farkı nedir? * Java Servlet nedir, nasıl çalışır? * Örnek bir Java Servlet yazılımı * Java Servlet nasıl çalıştırılır? - Java Servlet'i Tomcat'e deploy etme * XML kullanmadan servlet tanımlama * `web.xml` kullanmadan, yalnızca `@WebServlet` annotasyonu ile
## İnternet nasıl çalışır? * Servletleri anlamak için önce internetin nasıl çalıştığını bilmek gerekir. * Burada internetten kasıt yalnızca WWW(world wide web) kısmı tabi.

Bir web sayfası açmak istediğimizde neler olur?

http://wikipedia.org adresini tarayıcımıza yazdık, entera bastık. Ne oldu?

Dinamik içerik üretme sorununu her dil farklı biçimde çözer.

Servlet nedir?

Dinamik içerik üretme sorununa Java'nın getirdiği çözümdür.

Resmi Tanım

Java Servlet
A servlet is a Java programming language class used to extend the capabilities of servers that host applications accessed by means of a request-response programming model.

Tamam tamam Türkçesi de var :)

Java Servlet
Servlet, request-response programlama modeliyle erişilen uygulamaları barındıran sunucuların yeteneklerini geliştirmek için kullanılan bir Java programlama dili sınıfıdır.

En az 2 kez okumak gerekiyor :/

### Servlet bir Java sınıfıdır Bunu unutmayalım.
## Artık bi' servlet görelim! ``` package com.example.hello; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class HelloServlet extends HttpServlet { private static final long serialVersionUID = 1L; @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out = response.getWriter(); out.println("<h1>Hello world</h1>"); } } ```
Tahmin edebileceğiniz gibi bu servlet tarayıcınıza yalnızca `Hello world` yazılı bir sayfa getirecek.

Sunucular, sunucular...

Web sunucusu (Web Server)
Aslında internet üzerinden istemcilere web içeriği sunan tüm yazılımlar web sunucusudur.
Ancak bazı forumlarda bu kavramın yalnızca durağan içerik sunan sunucular için kullanıldığını görebilirsiniz.
Servlet Container
Java Servlet Spesifikasyonu'nun herhangi bir sürümünü implement eden web sunucularıdır. Örneğin JSR-315 Java™ Servlet 3.0 bir servlet spesifikasyonudur.
Uygulama Sunucusu (Application Server)
Sadece Java Servlet Spesifasyonu'nu değil, CDI, JAX-RS, EJB vs. gibi tüm JavaEE özelliklerini implement eden web sunucularıdır.

İsim vermek gerekirse

Web server
Apache, Nginx, lighttpd ...
Servlet Container
Apache Tomcat, Jetty ...
Application Server
JBoss AS, Glassfish, Apache TomEE, Oracle Web Logic ...

Servletler nasıl çalışır?

### Servlet containerın işlevi ne? * `main` method nerede? - main method sunucunun derinliklerinde saklı - Örneğin Tomcat kullanıyorsanız: [main method burada](https://github.com/apache/tomcat/blob/trunk/java/org/apache/catalina/startup/Bootstrap.java#L449) * JavaSE ve servlet uygulamaları farklıdır - Servlet uygulamalarında biz `main` method yazmayız - Bizim yazdığımız sınıflardan nesneler oluşturmak ve o nesnelerin methodlarını çağırmak servlet containerın(sunucunun) görevidir

Servlet Yaşam Döngüsü

 

Servletin yaşam döngüsü deploy edildiği (yüklenildiği) servlet container tarafından denetlenir.

Bir istek bir servlete yönlendirildiği zaman, servlet container şu adımları yapar:

Servlet Yaşam Döngüsü

  1. Bir servlet instanceı yoksa, servlet container:
    1. Servlet sınıfını yükler
    2. Servlet sınıfının bir instanceını oluşturur
    3. initialize methodunu çağırarak servlet instansını hazırlar
  2. Container service methodunu çağırır, request ve response nesnelerini parametre olarak verir.
  3. Container destroy methodunu çağırır ve ardından servleti sonlandırır (servlet container hafızada yer açmak isteyince veya container kendisi de kapanıyorken)
### Java Servlet Örneklerine Göz Atın * Temel kavramları ve servletlerin arka planda neler yaptığını genel hatlarıyla öğrendiniz. * Şimdi biraz uygulama zamanı * [Tutorial](http://dorukdestan.com/tutorials/) sayfasından servlet ile ilgili tutoriallara göz atabilirsiniz.