Programlama

Java Servlet

13.03.2006
Ya ben nasıl olduğunu anlamadım ama sabah İnanç Gümüş isimli arkadaşla konuşuyordum ve 1 saat kadar sonra kendimi Servlet nedir nasıl çalışır konusunu araştırırken buldum :) Yaptığım kısa araştırmanın notlarını da hemen aktarayım efenim durmayayım.

Şimdi öncelikle bu Servlet denen şey aslında HttpServlet'den türetilmiş bir Java Class'i ve belli başlı metodları ile gelen request'leri değerlendirip HTML olarak Response üretebiliyorsunuz. Aslında ben daha karışık bir şey bekliyordum ama bütün olay bir Class yapıp bunun doGet(), doPost() gibi methodlarını override etmekten ibaret.

Şimdi bu servlet denen şeyin çalışabilmesi içi öncelikle bir Application Server'a ihtiyacı var. Bu Jboss, Jetty veya Apache tomcat gibi bir sunucu olabilir. Yazdığınız Servlet'leri .war isimli bir pakette topladıktan sonra bu sonucuya gönderiyor ve http üzerinden web sayfası çağırır gibi çağırabiliyorsunuz.

Özellikle Borland Jbuilder gibi bir IDE'ye sahipseniz Servlet yapmak yaklaşık olarak 5 dakikanızı falan alacak olan bir iş ama tabii olayın arka planını bilmekte her zaman için fayda vardır ;)

Şöyle bir Servlet örneği yazayım buraya da görün bakalım :

public class myServ extends HttpServlet
{
    private static final String CONTENT_TYPE = "text/html; charset=windows-1254";
    //Initialize global variables
    public void init() throws ServletException
    {
    }
    //Process the HTTP Get request
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    {
        response.setContentType(CONTENT_TYPE);
        PrintWriter out = response.getWriter();
        out.println("<html>");
        out.println("<head><title>myServ</title></head>");
        out.println("<body bgcolor=\"#ffffff\">");
        out.println("<p>The servlet has received a " + request.getMethod() + ". This is the reply.</p>");
        out.println("<p>The servlet has received a " + request.getParameter("deneme") + ". This is the reply.</p>");
        out.println("</body>");
        out.println("</html>");
        out.close();
    }
    //Process the HTTP Post request
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    {
        doGet(request, response);
    }
    //Clean up resources
    public void destroy()
    {
    }
}
Aha böyle bir şey işte servlet dedikleri Class. Bu servlet'e çağrıda bulunmak için internet explorer'da
http://localhost/myServ?deneme=merhaba
gibi bir adrese gitmeniz (tabii uygulama sunucusu devredeyken) yeterli olacaktır.

Bu servlet, JSP gibi şeyler Java'nın Enterprise (J2EE) tarafını oluşturan kısımlar. Şahsen J2SE'den pek çıkmak istemesem de İnanç Kardeşim öl desin ölürüm yani :)

Servlet'den bahsetmişken işin en alt yapısından da bahsedeyim. Şimdi efendim CGI gibi bir arabirim kullanıyorsanız web sayfanıza yapılan her Request ayrı bir program tarafından işlenecektir. E 1000 tane request için 1000 tane program çalıştıracağınız için sıçış söz konusu olacaktır. Ama servlet'de böyle mi ya? Yalnızca 1 adet program var ve her Request bir thread olarak işleniyor. 1000 Request için yine bir zorlanma söz konusu tabii ama C ile CGI birleşiminden her zaman iyidir :) Ayrıca 2 CGI programının birbiriyle haberleşmesi zor (bazen imkansız) iken Servlet'ler birbirleri ile gayet kolay bir şekilde haberleşebiliyorlar.

Son olarak JSP'den bahsedelim. JSP de özellikle tasarım kaygısı olan sitelerde kullanılabilecek bir J2EE çözümü olarak karşımıza çıkıyor. JSP'nin mantığı ASP ve PHP gibi dilleri kullananların aşina olacağı şekliyle <% %> tagları arasına yazılmış Java kodlarının kullanılmasına dayanıyor. Aynen Java'da ne varsa çatır çatır JSP altyapısında kullanabiliyorsunuz yalnız Session, Response gibi ek objeler de geliyor tabi internete özgü olaraktan. Veee JSP'nin en can alıcı özelliğini söyleyelim. JSP sayfaları ilk kez çalıştırılırken Servlet olarak derleniyor ve sonraki Request'ler her zaman bu Servlet Class'ini kullanıyor. Ta ki JSP'nin içeriği değişene kadar durum böyle kalıyor.

Bir de Bean denen olayı anlatayım. Bean bean bean duyuyordum da ulan ne acaip bir şey bu diyordum. Meğer bean dediğimiz olay belli interface'leri uygulayan sınıflardan başkası değilmiş. Mesela Message Bean'i oluşturmak için MessageBean interface'ini uyguluyorsunuz alın size Message Bean. Daha sonra bu bean'i isteğin yerde kullan. Sanırım asıl amacı Container olarak kullanılması bu bean denen zamazingonun.

Hey Allaaaam ya!

Bunları da Oku, Sorucam

Yorum Yok

Yorum Yaz