www.fatihkabakci.com

Personal Website and Computer Science TUR EN

SERVLET UYGULAMASI HELLO WORLD

Last update: 5/26/2015 9:54:00 PM

Yazan: Fatih KABAKCI

Bu yazıda basitçe Servlet çalışma mantığının anlaşılması adına, ilk olarak Hello World olarak bilinen merhaba dünya uygulaması gerçeklenecektir. Bilindiği üzere bir Servletin yaşam döngüsünü init(), service() ve destroy() metotları oluşturur. Bu yazıda bu metotların basitçe kullanımı ve ne oldukları açıklanacaktır. Daha önceden açıklanan Temel Servlet ve Apache Tomcat adlı yazılara bakabilirsiniz.

Bir Servlet inşa etmek için aşağıdaki temel adımlar uygulanır.

1. Servlet kaynak kodu uygun Tomcat sunucusu altında derlenir. Dizin webapps altında uygun bir context root oluşturularak WEB-INF/classes/ altına yerleştirilir.

2. web.xml dosyası oluşturulur ve parametreler sağlanır. Dizin WEB-INF/web.xml dosya dizinidir.

3. Tomcat sunucusu başlatılır.

4. İstemci isteği başlatılır. Çoğunlukla bu, bir tarayıcıdan başlatılan HTTP isteğidir.

HelloWorld Servlet Uygulaması

Yukarıdaki adımlar uygulanmadan önce Tomcat sunucusu temin edilmelidir. Bu örnekte Tomcat sunucusunu Windows 64 bitlik işletim sistemi .exe uzantılı servis bileşeni C:\Program Files\Apache Software Foundation\Tomcat 7.0 dizini altına kurulmuştur. Bu durum Tomcatin basit GUI' si yardımıyla kolaylıkla konfigüre edilebilmesi içindir.

1. HelloWorldServlet kaynak kodu aşağıdaki gibidir ve C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\JServlet\WEB-INF\classes dizini altına kopyalanmıştır.

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class HelloWorldServlet
 * 
 * @author www.fatihkabakci.com
 */
@WebServlet("/HelloWorldServlet")
public class HelloWorldServlet extends HttpServlet {
   private static final long serialVersionUID = 1L;

   private PrintWriter       out;

   /**
    * @see HttpServlet#HttpServlet()
    */
   public HelloWorldServlet() {
      super();
      // TODO Auto-generated constructor stub
   }

   /**
    * @see Servlet#init(ServletConfig)
    */
   public void init(ServletConfig config) throws ServletException {
      ServletContext servletCfg = config.getServletContext();
      String contextName = servletCfg.getServletContextName();
      System.out.println(contextName);
   }

   /**
    * @see Servlet#destroy()
    */
   public void destroy() {
      this.out.close();
   }

   /**
    * @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)
    */
   protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      // set output content type
      response.setContentType("text/html");
      // get output writer
      this.out = response.getWriter();
      out.println("<h1>Hello World</h1>");
      out.flush();
   }
}

Burada JServlet context root dosyası, yani web uygulamasının adını temsil eder. Tüm web uygulamaları varsayılan olarak webapps dizini altına konulmalıdır. webapps dizini altındaki her bir web uygulaması, kendi dizini altında WEB-INF, WEB-INF\classes ve WEB-INF\web.xml dosyalarını barındırmalıdır. Bu dosyalar da el ile yaratılır.

C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\JServlet\WEB-INF\classes\HelloWorldServlet.java dosyası JIT derleyici ile derlenir ve .class dosyası bu dizinde oluşturulur.

javac HelloWorldServlet.java -classpath "C:\Program Files\Apache Software Foundation\Tomcat 7.0\lib\servlet-api.jar"

Yukarıdaki komut ile HelloWorldServlet sınıfı derlenir. classpath ortam değişkenini windows ortamında varsayılan olarak belirtmek isterseniz, komutu javac HelloWorldServlet.java olarak kullanmanız yeterli olacaktır.

2. C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\JServlet\WEB-INF\web.xml dizini altında web.xml dosyası aşağıdaki gibi güncellenir.

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" 
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
id="WebApp_ID" version="3.0">
  <display-name>JServlet</display-name>
  <servlet>
       <servlet-name>HelloWorldServlet</servlet-name>
       <servlet-class>HelloWorldServlet</servlet-class>
   </servlet>

   <servlet-mapping>
       <servlet-name>HelloWorldServlet</servlet-name>
       <url-pattern>/HelloWorldServlet</url-pattern>
   </servlet-mapping>
</web-app>

3. Tomcat C:\Program Files\Apache Software Foundation\Tomcat 7.0\bin\Tomcat7.exe çalıştırılarak aşağıdaki gibi başlatılır.


4. Tarayıcıdan http://localhost:8080/JServlet/HelloWorldServlet isteği başlatılır. Çıktı aşağıdaki gibidir.


Yukarıdaki 4 adım bir Servlet uygulamasını çalıştırmak için kullanılır. Kodların ve konfigurasyon parametrelerinin açıklamaları bir sonraki ayrımda yapılmaktadır.

Eclipse Ortamında HelloWorld Servlet Uygulaması

Bu örnekte Tomcat sunucusunu Windows 64 bitlik işletim sistemi .zip uzantılı kaynak dosyalar D:\Tomcat 7.0\apache-tomcat-7.0.61 dizini altına kurulmuştur.

1. Bir web projesi için Eclipse içerisinde File -> New -> Dynamic Web Project ile yeni bir proje oluşturulur.

File -> New -> Dynamic Web Project

2. Açılan aşağıdaki JServlet adlı projesi ve uygun konfigurasyon parametleri verilir.


3. Next butonu ile build path konfigure edilir. Varsayılan olarak src folderi ile devam edelim.


4. Next butonu ile Context root, yani web uygulaması adı verilir. Burada Proje ile aynı isim verilmiştir. Bunun anlamı, proje altında çalıştıracak her bir Servlet için sunucu adı ve port bilgisinden hemen sonra bu context root adının verileceğidir. Örnekler yerel sunucuda çalıştırılacağı için tarayıcının http istekleri http://localhost:8080/JServlet/ adı ile başlayacaktır. Panelde ayrıca web uygulamanızda kullanılan diğer verilerin bulunduğu içerik dosya adı belirlenir. Varsayılan olarak WebContent olarak verilmiştir. Bunun yanında Eclipse IDE' ye web projenizin ve konfigurasyon parametlerinin bulunduğu web.xml dosyasını açıkça yaratmasını belirtebilirsiniz.


Yukarıdaki 4 işlemi gerçekleştirdikten sonra JServlet adlı dinamik web projesi aşağıdaki gibi oluşturulmuştur. Servlet sınıflarını yerleştireceğiniz src kaynak dosyası altında com.fatihkabakci paketi elle yaratılmıştır.


Yukarıdaki 4 adımı herhangi bir dinamik web projesi oluştururken kullanabilirsiniz. Şimdi com.fatihkabakci paketi altında ilk servlet sınıfını oluşturalım. New -> Servlet ile basitçe yeni bir Servlet sınıfı oluşturabilir.


Bu panelde Servletin hangi proje ve kaynak dosya altında yer alacağı, Servletin adı ve üst sınıfı gibi bilgiler verilir.


Next ile devam edildiğinde aşağıdaki ekran görülür. Burada web.xml dosyasında yer alacak parametreler belirlenir. Bir sonraki adımda bu dosyaya el ile müdahale yapacağımız için bu adım pas geçilmiştir.


Bir sonraki ayrımda, Servletin yaşam döngüsü inşa edilir. Burada temel olarak sadece init(), service() ve destroy() metotları seçilmiştir.


Yeni durumda oluşturulan HelloWorldServlet sınıfı aşağıda verilmektedir.


package com.fatihkabakci;

import java.io.IOException;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class HelloWorldServlet
 * 
 * @author www.fatihkabakci.com
 */
@WebServlet("/HelloWorldServlet")
public class HelloWorldServlet extends HttpServlet {
   private static final long serialVersionUID = 1L;

   /**
    * @see HttpServlet#HttpServlet()
    */
   public HelloWorldServlet() {
      super();
      // TODO Auto-generated constructor stub
   }

   /**
    * @see Servlet#init(ServletConfig)
    */
   public void init(ServletConfig config) throws ServletException {
      // TODO Auto-generated method stub
   }

   /**
    * @see Servlet#destroy()
    */
   public void destroy() {
      // TODO Auto-generated method stub
   }

   /**
    * @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)
    */
   protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      // TODO Auto-generated method stub
   }
}

HelloWorldServlet sınıfı HttpServlet soyut sınıfından türetilmiştir. Bu HTTP istekleri ve cevaplarını yönetebileceğiniz Servlet arabirimini uygulayan sınıflar inşa edeceğiniz anlamına gelir. Servletin temel yaşam döngüsü metotları olan, init(), service() ve destroy() metotları bu uygulamada implemente edilmiştir. Örnek içerisinde belirli bir parametreyi ilk kullanımına hazırlama işlemi yapmayacağımız için, ekrana Hello World basan kodları service() metoduna eklenecektir. Servlette, bazen kullanılan veri XML, protokol de web üzerinde herhangi bir istek mesajı olabilirken, çoğunlukla bilgi bir HTTP ile, HTML formatında gönderilir ve alınır. Bu uygulama içinde de, web sayfasına en büyük başlık karakteri ile(HTML h1) Hello World yazdırılacaktır.


package com.fatihkabakci;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class HelloWorldServlet
 * 
 * @author www.fatihkabakci.com
 */
@WebServlet("/HelloWorldServlet")
public class HelloWorldServlet extends HttpServlet {
   private static final long serialVersionUID = 1L;

   private PrintWriter       out;

   /**
    * @see HttpServlet#HttpServlet()
    */
   public HelloWorldServlet() {
      super();
      // TODO Auto-generated constructor stub
   }

   /**
    * @see Servlet#init(ServletConfig)
    */
   public void init(ServletConfig config) throws ServletException {
      ServletContext servletCfg = config.getServletContext();
      String contextName = servletCfg.getServletContextName();
      System.out.println(contextName);
   }

   /**
    * @see Servlet#destroy()
    */
   public void destroy() {
      this.out.close();
   }

   /**
    * @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)
    */
   protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      // set output content type
      response.setContentType("text/html");
      // get output writer
      this.out = response.getWriter();
      out.println("<h1>Hello World</h1>");
      out.flush();
   }
}

Eclipse içerisinde yukarıdaki sınıf çalıştırdığında ilk olarak Eclipse Tomcat sunucusunu başlatır ve tarayıcı ile http://localhost:8080/JServlet/HelloWorldServlet HTTP isteğinde bulunur. Program da ilk olarak init() metodu çağrılır ve Eclipse konsol ekranına JServlet, proje context root adı basılır. Bu aynı zamanda bu proje altındaki tüm Servlet çağrıları için geçerlidir. Daha sonra Tomcat konteyner' ı tarafından service() metodu işletilir. service() metodu ilk olarak çıktının html formatında olacağını belirler. Ardından ekrana büyük başlık karakteri ile Hello World yazan çıktıyı gönderir. Tomcat sonlandırıldığında ise destroy() metodu çıktıyı kapatır.

HelloWorldServlet uygulamasının Eclipse tarafında çalıştırılması hazırdır. Ancak web.xml dosyası çoğu zaman developer tarafında kontrol edilmek istenebilir. Eclipse, biz bu dosyayı güncellemesekte, arka planda kendisi bu dosyası başlangıçtaki varsayılan parametrelere göre hazırlar ve Servlet konfigurasyon bilgilerini yerleştirir. Ancak konfigürasyon belirli durumlarda değişmesi gerekebilir. Bu durumda web.xml dosyası güncellenmeye ihtiyaç duyar. Aksi halde Tomcat sunucusu Servleti bulamayabilir. Yukarıdaki program için uygun web.xml dosyası aşağıda verilmiştir.


<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" 
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
id="WebApp_ID" version="3.0">
  <display-name>JServlet</display-name>
  <servlet>
       <servlet-name>HelloWorldServlet</servlet-name>
       <servlet-class>com.fatihkabakci.HelloWorldServlet</servlet-class>
   </servlet>

   <servlet-mapping>
       <servlet-name>HelloWorldServlet</servlet-name>
       <url-pattern>/HelloWorldServlet</url-pattern>
   </servlet-mapping>
</web-app>

Yukarıdaki parametreler ve tanımlamalar için Apache Tomcat adlı yazıya bakabilirsiniz.

Program çıktısının görüntüsü aşağıdaki gibidir.

There has been no comment yet

Name:


Question/Comment
   Please verify the image




The Topics in Computer Science

Search this site for





 

Software & Algorithms

icon

In mathematics and computer science, an algorithm is a step-by-step procedure for calculations. Algorithms are used for calculation, data processing, and automated reasoning.

Programming Languages

icon

A programming language is a formal constructed language designed to communicate instructions to a machine, particularly a computer. It can be used to create programs to control the behavior of a machine. Java,C, C++,C#

Database

icon

A database is an organized collection of data. The data are typically organized to model aspects of reality in a way that supports processes requiring information.

Hardware

icon

Computer hardware is the collection of physical elements that constitutes a computer system. Computer hardware refers to the physical parts or components of a computer such as the monitor, memory, cpu.

Web Technologies

icon

Web development is a broad term for the work involved in developing a web site for the Internet or an intranet. Html,Css,JavaScript,ASP.Net,PHP are one of the most popular technologies. J2EE,Servlet, JSP,JSF, ASP

Mobile Technologies

icon

Mobile application development is the process by which application software is developed for low-power handheld devices, such as personal digital assistants, enterprise digital assistants or mobile phones. J2ME

Network

icon

A computer network or data network is a telecommunications network that allows computers to exchange data. In computer networks, networked computing devices pass data to each other along data connections.

Operating Systems

icon

An operating system is software that manages computer hardware and software resources and provides common services for computer programs. The OS is an essential component of the system software in a computer system. Linux,Windows

Computer Science

icon

Computer science is the scientific and practical approach to computation and its applications.A computer scientist specializes in the theory of computation and the design of computational systems.