Servletler - Hızlı Kılavuz

Servlet nedir?

Java Servletleri, bir Web veya Uygulama sunucusunda çalışan ve bir Web tarayıcısından veya diğer HTTP istemcisinden gelen istekler ile HTTP sunucusundaki veritabanları veya uygulamalar arasında orta katman görevi gören programlardır.

Servletleri kullanarak, web sayfası formları aracılığıyla kullanıcılardan girdi toplayabilir, bir veritabanından veya başka bir kaynaktan kayıtlar sunabilir ve dinamik olarak web sayfaları oluşturabilirsiniz.

Java Servletleri genellikle Common Gateway Interface (CGI) kullanılarak uygulanan programlarla aynı amaca hizmet eder. Ancak Servletler, CGI ile karşılaştırıldığında çeşitli avantajlar sunar.

  • Performans önemli ölçüde daha iyidir.

  • Servletler, bir Web sunucusunun adres alanı içinde çalışır. Her müşteri talebini işlemek için ayrı bir süreç oluşturmak gerekli değildir.

  • Servletler, Java'da yazıldıkları için platformdan bağımsızdır.

  • Sunucudaki Java güvenlik yöneticisi, bir sunucu makinesindeki kaynakları korumak için bir dizi kısıtlama uygular. Bu nedenle sunucu uygulamaları güvenilirdir.

  • Java sınıfı kitaplıklarının tam işlevselliği bir sunucu uygulamasında mevcuttur. Daha önce görmüş olduğunuz soketler ve RMI mekanizmaları aracılığıyla apletler, veritabanları veya diğer yazılımlarla iletişim kurabilir.

Servlet Mimarisi

Aşağıdaki şema, bir Web Uygulamasındaki Sunucu Uygulamalarının konumunu gösterir.

Servlet Görevleri

Servletler aşağıdaki ana görevleri gerçekleştirir -

  • İstemciler (tarayıcılar) tarafından gönderilen açık verileri okuyun. Bu, bir Web sayfasındaki bir HTML formu içerir veya bir uygulamadan veya özel bir HTTP istemci programından da gelebilir.

  • İstemciler (tarayıcılar) tarafından gönderilen örtük HTTP istek verilerini okuyun. Bu, çerezleri, ortam türlerini ve tarayıcının anladığı sıkıştırma şemalarını vb. İçerir.

  • Verileri işleyin ve sonuçları oluşturun. Bu süreç, bir veritabanıyla konuşmayı, bir RMI veya CORBA çağrısını yürütmeyi, bir Web hizmetini çağırmayı veya yanıtı doğrudan hesaplamayı gerektirebilir.

  • Açık verileri (yani belgeyi) istemcilere (tarayıcılar) gönderin. Bu belge, metin (HTML veya XML), ikili (GIF görüntüleri), Excel vb. Dahil olmak üzere çeşitli biçimlerde gönderilebilir.

  • Örtük HTTP yanıtını istemcilere (tarayıcılara) gönderin. Bu, tarayıcılara veya diğer istemcilere ne tür bir belgenin döndürüldüğünü (örneğin, HTML), tanımlama bilgilerini ve önbelleğe alma parametrelerini ayarlamayı ve bu tür diğer görevleri içerir.

Servlet Paketleri

Java Servletleri, Java Servlet belirtimini destekleyen bir yorumlayıcıya sahip bir web sunucusu tarafından çalıştırılan Java sınıflarıdır.

Servletler kullanılarak oluşturulabilir javax.servlet ve javax.servlet.http Java'nın kurumsal sürümünün standart bir parçası olan paketler, Java sınıf kitaplığının büyük ölçekli geliştirme projelerini destekleyen genişletilmiş bir sürümüdür.

Bu sınıflar Java Servlet ve JSP belirtimlerini uygular. Bu öğreticiyi yazarken, sürümler Java Servlet 2.5 ve JSP 2.1'dir.

Java sunucu uygulamaları, diğer Java sınıfları gibi oluşturulmuş ve derlenmiştir. Sunucu uygulaması paketlerini yükledikten ve bunları bilgisayarınızın Sınıf Yoluna ekledikten sonra, sunucuları JDK'nın Java derleyicisi veya başka herhangi bir mevcut derleyici ile derleyebilirsiniz.

Sırada ne var?

Ortamınızı Servlet'lerle başlayacak şekilde ayarlamak için sizi adım adım yönlendiririm. Bu nedenle, Servlet'lerle güzel bir sürüş için kemerinizi bağlayın. Eminim bu eğitimden çok keyif alacaksınız.

Geliştirme ortamı, Servlet'inizi geliştireceğiniz, test edeceğiniz ve sonunda çalıştıracağınız yerdir.

Diğer herhangi bir Java programı gibi, Java derleyicisini kullanarak bir sunucu uygulaması derlemeniz gerekir. javac ve sunucu uygulaması derlendikten sonra, test etmek ve çalıştırmak için yapılandırılmış bir ortama konuşlandırılacaktır ..

Bu geliştirme ortamı kurulumu aşağıdaki adımları içerir -

Java Geliştirme Kitini Kurma

Bu adım, Java Yazılım Geliştirme Kiti'nin (SDK) bir uygulamasının indirilmesini ve uygun şekilde PATH ortam değişkeninin ayarlanmasını içerir.

SDK'yı Oracle'ın Java sitesinden indirebilirsiniz - Java SE İndirmeleri .

Java uygulamanızı indirdikten sonra, kurulumu kurmak ve yapılandırmak için verilen talimatları izleyin. Son olarak, PATH ve JAVA_HOME ortam değişkenlerini java ve javac içeren dizine başvuracak şekilde ayarlayın, tipik olarak sırasıyla java_install_dir / bin ve java_install_dir.

Windows çalıştırıyorsanız ve SDK'yı C: \ jdk1.8.0_65'e yüklediyseniz, aşağıdaki satırı C: \ autoexec.bat dosyanıza koyarsınız.

set PATH = C:\jdk1.8.0_65\bin;%PATH% 
set JAVA_HOME = C:\jdk1.8.0_65

Alternatif olarak, Windows NT / 2000 / XP'de Bilgisayarım'a sağ tıklayabilir, Özellikler'i, ardından Gelişmiş'i ve ardından Ortam Değişkenleri'ni seçebilirsiniz. Ardından, PATH değerini güncellersiniz ve OK düğmesine basarsınız.

Unix'te (Solaris, Linux, vb.), SDK /usr/local/jdk1.8.0_65'e kuruluysa ve C kabuğunu kullanıyorsanız, aşağıdakileri .cshrc dosyanıza koyarsınız.

setenv PATH /usr/local/jdk1.8.0_65/bin:$PATH 
setenv JAVA_HOME /usr/local/jdk1.8.0_65

Alternatif olarak, Borland JBuilder, Eclipse, IntelliJ IDEA veya Sun ONE Studio gibi bir Entegre Geliştirme Ortamı (IDE) kullanıyorsanız, IDE'nin Java'yı nereye yüklediğinizi bildiğini doğrulamak için basit bir program derleyin ve çalıştırın.

Web Sunucusunu Kurma - Tomcat

Piyasada, sunucu uygulamalarını destekleyen bir dizi Web Sunucusu bulunmaktadır. Bazı web sunucuları ücretsiz olarak indirilebilir ve Tomcat bunlardan biridir.

Apache Tomcat, Java Servlet ve Java Server Pages teknolojilerinin açık kaynaklı bir yazılım uygulamasıdır ve sunucu uygulamalarını test etmek için bağımsız bir sunucu görevi görebilir ve Apache Web Sunucusu ile entegre edilebilir. Makinenizde Tomcat'i kurmanın adımları şunlardır -

  • Tomcat'in son sürümünü şuradan indirin: https://tomcat.apache.org/.

  • Kurulumu indirdikten sonra, ikili dağıtımı uygun bir konuma açın. Örneğin, Windows'ta C: \ apache-tomcat-8.0.28'de veya Linux / Unix'te /usr/local/apache-tomcat-8.0.289'da ve bu konumlara işaret eden CATALINA_HOME ortam değişkenini oluşturun.

Tomcat, Windows makinesinde aşağıdaki komutlar uygulanarak başlatılabilir -

%CATALINA_HOME%\bin\startup.bat
or
C:\apache-tomcat-8.0.28\bin\startup.bat

Tomcat, Unix (Solaris, Linux, vb.) Makinesinde aşağıdaki komutlar çalıştırılarak başlatılabilir -

$CATALINA_HOME/bin/startup.sh
or
/usr/local/apache-tomcat-8.0.28/bin/startup.sh

Başlangıçtan sonra, Tomcat ile birlikte gelen varsayılan web uygulamaları şu adrese ziyaret edilerek kullanılabilir olacaktır: http://localhost:8080/. Her şey yolundaysa, aşağıdaki sonucu göstermelidir -

Tomcat'i yapılandırma ve çalıştırma hakkında daha fazla bilgi burada bulunan belgelerde ve Tomcat web sitesinde bulunabilir - http://tomcat.apache.org

Tomcat, Windows makinesinde aşağıdaki komutlar çalıştırılarak durdurulabilir -

C:\apache-tomcat-8.0.28\bin\shutdown

Tomcat, Unix (Solaris, Linux, vb.) Makinesinde aşağıdaki komutlar çalıştırılarak durdurulabilir -

/usr/local/apache-tomcat-8.0.28/bin/shutdown.sh

CLASSPATH'ı Kurma

Sunucu uygulamaları Java Platform, Standard Edition'ın bir parçası olmadığından, derleyiciye sunucu uygulaması sınıflarını tanımlamanız gerekir.

Windows çalıştırıyorsanız, aşağıdaki satırları C: \ autoexec.bat dosyanıza koymanız gerekir.

set CATALINA = C:\apache-tomcat-8.0.28 
set CLASSPATH = %CATALINA%\common\lib\servlet-api.jar;%CLASSPATH%

Alternatif olarak, Windows NT / 2000 / XP'de Bilgisayarım -> Özellikler -> Gelişmiş -> Ortam Değişkenleri'ne gidebilirsiniz. Daha sonra CLASSPATH değerini güncellersiniz ve OK düğmesine basarsınız.

Unix'te (Solaris, Linux, vb.) C kabuğunu kullanıyorsanız, aşağıdaki satırları .cshrc dosyanıza koyarsınız.

setenv CATALINA = /usr/local/apache-tomcat-8.0.28
setenv CLASSPATH $CATALINA/common/lib/servlet-api.jar:$CLASSPATH

NOTE - Geliştirme dizininizin C: \ ServletDevel (Windows) veya / usr / ServletDevel (Unix) olduğunu varsayarsak, yukarıda eklediğiniz gibi bu dizinleri CLASSPATH'a da eklemeniz gerekir.

Bir servlet yaşam döngüsü, yaratılışından yıkıma kadar tüm süreç olarak tanımlanabilir. Aşağıdakiler, bir sunucu uygulaması tarafından izlenen yollardır.

  • Sunucu uygulaması, init() yöntem.

  • Servlet çağırır service() bir müşterinin talebini işleme yöntemi.

  • Sunucu uygulaması, destroy() yöntem.

  • Son olarak sunucu uygulaması, JVM'nin çöp toplayıcısı tarafından toplanan çöptür.

Şimdi yaşam döngüsü yöntemlerini ayrıntılı olarak tartışalım.

İnit () Yöntemi

İnit yöntemi yalnızca bir kez çağrılır. Yalnızca sunucu uygulaması oluşturulduğunda çağrılır ve daha sonra herhangi bir kullanıcı isteği için çağrılmaz. Bu nedenle, tıpkı apletlerin init yönteminde olduğu gibi, tek seferlik başlatmalar için kullanılır.

Sunucu uygulaması normalde bir kullanıcı sunucu uygulamasına karşılık gelen bir URL'yi ilk kez çağırdığında oluşturulur, ancak sunucu uygulamasının sunucu ilk başlatıldığında yüklenmesini de belirtebilirsiniz.

Bir kullanıcı bir sunucu uygulamasını çağırdığında, her sunucu uygulamasının tek bir örneği oluşturulur ve her kullanıcı isteği, uygun şekilde doGet veya doPost'a devredilen yeni bir iş parçacığı ile sonuçlanır. İnit () yöntemi, sunucu uygulamasının ömrü boyunca kullanılacak bazı verileri basitçe oluşturur veya yükler.

İnit yöntem tanımı şuna benzer -

public void init() throws ServletException {
   // Initialization code...
}

Service () Yöntemi

Service () yöntemi, gerçek görevi gerçekleştirmek için ana yöntemdir. Servlet konteyneri (yani web sunucusu), istemciden (tarayıcılar) gelen istekleri işlemek ve biçimlendirilmiş yanıtı istemciye geri yazmak için service () yöntemini çağırır.

Sunucu bir sunucu uygulaması için her istek aldığında, sunucu yeni bir iş parçacığı oluşturur ve hizmeti çağırır. Service () yöntemi, HTTP istek türünü (GET, POST, PUT, DELETE, vb.) Kontrol eder ve uygun şekilde doGet, doPost, doPut, doDelete, vb. Yöntemlerini çağırır.

İşte bu yöntemin imzası -

public void service(ServletRequest request, ServletResponse response) 
   throws ServletException, IOException {
}

Service () yöntemi kapsayıcı tarafından çağrılır ve hizmet yöntemi uygun şekilde doGet, doPost, doPut, doDelete, vb. Yöntemlerini çağırır. Yani service () yöntemiyle hiçbir ilginiz yok, ancak istemciden aldığınız istek türüne bağlı olarak doGet () veya doPost () 'u geçersiz kılarsınız.

DoGet () ve doPost (), her hizmet isteğinde en sık kullanılan yöntemlerdir. İşte bu iki yöntemin imzası.

DoGet () Yöntemi

Bir GET isteği, bir URL için normal bir istekten veya METHOD belirtilmemiş bir HTML formundan kaynaklanır ve doGet () yöntemi ile işlenmelidir.

public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
   // Servlet code
}

DoPost () Yöntemi

POST isteği, METHOD olarak POST'u özel olarak listeleyen bir HTML formundan kaynaklanır ve doPost () yöntemi tarafından işlenmelidir.

public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
   // Servlet code
}

Destroy () Yöntemi

Destroy () yöntemi, sunucu uygulamasının yaşam döngüsünün sonunda yalnızca bir kez çağrılır. Bu yöntem, sunucu uygulamanıza veritabanı bağlantılarını kapatma, arka plan iş parçacıklarını durdurma, tanımlama bilgisi listeleri yazma veya diske vuruş sayıları yazma ve bu tür diğer temizleme etkinliklerini gerçekleştirme şansı verir.

Destroy () yöntemi çağrıldıktan sonra, sunucu uygulaması nesnesi çöp toplama için işaretlenir. Yok etme yöntemi tanımı şuna benzer -

public void destroy() {
   // Finalization code...
}

Mimari Diyagram

Aşağıdaki şekil, tipik bir sunucu uygulaması yaşam döngüsü senaryosunu göstermektedir.

  • Öncelikle sunucuya gelen HTTP istekleri servlet konteynerine delege edilir.

  • Sunucu uygulaması kapsayıcısı, service () yöntemini çağırmadan önce sunucu uygulamasını yükler.

  • Daha sonra sunucu uygulaması konteyneri, her bir iş parçacığı sunucu uygulamasının tek bir örneğinin service () yöntemini yürüten birden çok iş parçacığı oluşturarak birden çok isteği işler.

Servletler, HTTP isteklerine hizmet eden ve javax.servlet.Servletarayüz. Web uygulaması geliştiricileri genellikle, Servlet arabirimini uygulayan ve HTTP isteklerini işlemek için özel olarak tasarlanmış soyut bir sınıf olan javax.servlet.http.HttpServlet'i genişleten sunucu uygulamaları yazar.

Basit kod

Aşağıda, Hello World'ü göstermek için bir sunucu uygulaması örneğinin örnek kaynak kodu yapısı verilmiştir -

// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

// Extend HttpServlet class
public class HelloWorld extends HttpServlet {
 
   private String message;

   public void init() throws ServletException {
      // Do required initialization
      message = "Hello World";
   }

   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      
      // Set response content type
      response.setContentType("text/html");

      // Actual logic goes here.
      PrintWriter out = response.getWriter();
      out.println("<h1>" + message + "</h1>");
   }

   public void destroy() {
      // do nothing.
   }
}

Bir Servlet Derleme

Yukarıda gösterilen kodla HelloWorld.java adında bir dosya oluşturalım. Bu dosyayı C: \ ServletDevel (Windows'ta) veya / usr / ServletDevel (Unix'te) konumuna yerleştirin. Devam etmeden önce bu yol konumu CLASSPATH'a eklenmelidir.

Ortamınızın doğru kurulduğunu varsayarak, içeri girin ServletDevel HelloWorld.java dosyasını aşağıdaki gibi derleyin ve derleyin -

$ javac HelloWorld.java

Sunucu uygulaması başka herhangi bir kitaplığa bağlıysa, bu JAR dosyalarını CLASSPATH'inize de dahil etmeniz gerekir. Hello World programında başka bir kitaplık kullanmadığım için yalnızca servlet-api.jar JAR dosyasını ekledim.

Bu komut satırı, Sun Microsystems Java Yazılım Geliştirme Kiti (JDK) ile birlikte gelen yerleşik javac derleyicisini kullanır. Bu komutun düzgün çalışması için, PATH ortam değişkenine kullandığınız Java SDK'nın konumunu eklemeniz gerekir.

Her şey yolunda giderse, yukarıdaki derleme HelloWorld.classaynı dizindeki dosya. Sonraki bölüm, derlenmiş bir sunucu uygulamasının üretimde nasıl dağıtılacağını açıklayacaktır.

Servlet Dağıtımı

Varsayılan olarak, bir servlet uygulaması <Tomcat-installationdirectory> / webapps / ROOT yolunda bulunur ve sınıf dosyası <Tomcat-installationdirectory> / webapps / ROOT / WEB-INF / classes içinde bulunur.

Tam nitelikli bir sınıf adınız varsa com.myorg.MyServlet, bu durumda bu servlet sınıfı WEB-INF / classes / com / myorg / MyServlet.class içinde bulunmalıdır.

Şimdilik HelloWorld.class'ı <Tomcat-installationdirectory> / webapps / ROOT / WEB-INF / classes içine kopyalayalım ve aşağıdaki girişleri oluşturalım web.xml <Tomcat-installation-directory> / webapps / ROOT / WEB-INF / konumunda bulunan dosya

<servlet>
   <servlet-name>HelloWorld</servlet-name>
   <servlet-class>HelloWorld</servlet-class>
</servlet>

<servlet-mapping>
   <servlet-name>HelloWorld</servlet-name>
   <url-pattern>/HelloWorld</url-pattern>
</servlet-mapping>

<web-app> ... </web-app> etiketlerinde oluşturulacak girişlerin üstünde web.xml dosyasında mevcuttur. Bu tabloda zaten mevcut olan çeşitli girişler olabilir, ancak boşverin.

Neredeyse tamamladınız, şimdi <Tomcat-installationdirectory> \ bin \ startup.bat (Windows'ta) veya <Tomcat-installationdirectory> /bin/startup.sh (Linux / Solaris vb.) Kullanarak tomcat sunucusunu başlatalım ve son olarak şunu yazın: http://localhost:8080/HelloWorldtarayıcının adres kutusunda. Her şey yolunda giderse, aşağıdaki sonucu alırsınız

Bazı bilgileri tarayıcınızdan web sunucusuna ve nihayetinde arka uç programınıza aktarmanız gerektiğinde birçok durumla karşılaşmış olmalısınız. Tarayıcı, bu bilgileri web sunucusuna iletmek için iki yöntem kullanır. Bu yöntemler GET Yöntemi ve POST Yöntemi'dir.

GET Yöntemi

GET yöntemi, sayfa isteğine eklenen kodlanmış kullanıcı bilgilerini gönderir. Sayfa ve kodlanmış bilgiler,? (soru işareti) sembolü aşağıdaki gibidir -

http://www.test.com/hello?key1 = value1&key2 = value2

GET yöntemi, bilgileri tarayıcıdan web sunucusuna geçirmek için varsayılan yöntemdir ve tarayıcınızın Konum: kutusunda görünen uzun bir dize oluşturur. Sunucuya iletmek için parolanız veya diğer hassas bilgileriniz varsa asla GET yöntemini kullanmayın. GET yönteminin boyut sınırlaması vardır: bir istek dizesinde yalnızca 1024 karakter kullanılabilir.

Bu bilgiler QUERY_STRING üstbilgisi kullanılarak aktarılır ve QUERY_STRING ortam değişkeni aracılığıyla erişilebilir ve Servlet bu tür istekleri şu şekilde işler: doGet() yöntem.

POST Yöntemi

Bir arka uç programına bilgi aktarmanın genellikle daha güvenilir bir yöntemi POST yöntemidir. Bu, bilgileri GET yöntemiyle tamamen aynı şekilde paketler, ancak bunu bir? (soru işareti) URL'de ayrı bir mesaj olarak gönderir. Bu mesaj arka uç programına, işlemeniz için ayrıştırıp kullanabileceğiniz standart girdi biçiminde gelir. Servlet, bu tür istekleri kullanarakdoPost() yöntem.

Servlet kullanarak Form Verilerini Okuma

Servletler, duruma bağlı olarak aşağıdaki yöntemleri kullanarak form verilerini otomatik olarak ayrıştırır -

  • getParameter() - Bir form parametresinin değerini almak için request.getParameter () yöntemini çağırırsınız.

  • getParameterValues() - Parametre birden fazla görünüyorsa ve birden çok değer, örneğin onay kutusu döndürüyorsa bu yöntemi çağırın.

  • getParameterNames() - Mevcut istekteki tüm parametrelerin tam bir listesini istiyorsanız bu yöntemi çağırın.

URL kullanarak GET Yöntemi Örneği

İşte GET yöntemini kullanarak HelloForm programına iki değer aktaracak basit bir URL.

http://localhost:8080/HelloForm?first_name = ZARA&last_name = ALI

Aşağıda verilen HelloForm.javaweb tarayıcısı tarafından verilen girdiyi işlemek için servlet programı. KullanacağızgetParameter() iletilen bilgilere erişimi çok kolaylaştıran yöntem -

// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

// Extend HttpServlet class
public class HelloForm extends HttpServlet {
 
   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      
      // Set response content type
      response.setContentType("text/html");

      PrintWriter out = response.getWriter();
      String title = "Using GET Method to Read Form Data";
      String docType =
         "<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
         
      out.println(docType +
         "<html>\n" +
            "<head><title>" + title + "</title></head>\n" +
            "<body bgcolor = \"#f0f0f0\">\n" +
               "<h1 align = \"center\">" + title + "</h1>\n" +
               "<ul>\n" +
                  "  <li><b>First Name</b>: "
                  + request.getParameter("first_name") + "\n" +
                  "  <li><b>Last Name</b>: "
                  + request.getParameter("last_name") + "\n" +
               "</ul>\n" +
            "</body>" +
         "</html>"
      );
   }
}

Ortamınızın doğru şekilde ayarlandığını varsayarak, HelloForm.java'yı aşağıdaki gibi derleyin -

$ javac HelloForm.java

Her şey yolunda giderse, yukarıdaki derleme HelloForm.classdosya. Daha sonra bu sınıf dosyasını <Tomcat-installationdirectory> / webapps / ROOT / WEB-INF / classes içine kopyalamanız ve aşağıdaki girişleri oluşturmanız gerekir.web.xml <Tomcat-installation-directory> / webapps / ROOT / WEB-INF / konumunda bulunan dosya

<servlet>
   <servlet-name>HelloForm</servlet-name>
   <servlet-class>HelloForm</servlet-class>
</servlet>

<servlet-mapping>
   <servlet-name>HelloForm</servlet-name>
   <url-pattern>/HelloForm</url-pattern>
</servlet-mapping>

Şimdi tarayıcınızın Konum: kutusuna http: // localhost: 8080 / HelloForm? First_name = ZARA & last_name = ALI yazın ve tarayıcıda yukarıdaki komutu çalıştırmadan önce tomcat sunucusunu başlattığınızdan emin olun. Bu, aşağıdaki sonucu doğurur -

Using GET Method to Read Form Data

  • First Name: ZARA
  • Last Name: ALI

Form Kullanarak GET Yöntemi Örneği

HTML FORM ve gönder butonunu kullanarak iki değer ileten basit bir örnek. Bu girdiyi işlemek için aynı Servlet HelloForm'u kullanacağız.

<html>
   <body>
      <form action = "HelloForm" method = "GET">
         First Name: <input type = "text" name = "first_name">
         <br />
         Last Name: <input type = "text" name = "last_name" />
         <input type = "submit" value = "Submit" />
      </form>
   </body>
</html>

Bu HTML'yi Hello.htm dosyasında saklayın ve <Tomcat-installationdirectory> / webapps / ROOT dizinine koyun. Ne zaman olur erişim http: // localhost: 8080 / Hello.htm , burada yukarıdaki form gerçek çıkışıdır.

Tomcat'in çalıştığı yerel makinenizde sonucu görmek için First Name ve Last Name girmeyi deneyin ve ardından gönder düğmesine tıklayın. Sağlanan girdiye bağlı olarak, yukarıdaki örnekte belirtildiği gibi benzer bir sonuç üretecektir.

Form Kullanarak POST Yöntemi Örneği

GET ve POST yöntemlerini işleyebilmesi için yukarıdaki sunucu uygulamasında küçük değişiklikler yapalım. AşağıdaHelloForm.java GET veya POST yöntemlerini kullanarak web tarayıcısı tarafından verilen girdiyi işlemek için servlet programı.

// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

// Extend HttpServlet class
public class HelloForm extends HttpServlet {

   // Method to handle GET method request.
   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      
      // Set response content type
      response.setContentType("text/html");

      PrintWriter out = response.getWriter();
      String title = "Using GET Method to Read Form Data";
      String docType =
         "<!doctype html public \"-//w3c//dtd html 4.0 " +
         "transitional//en\">\n";
         
      out.println(docType +
         "<html>\n" +
            "<head><title>" + title + "</title></head>\n" +
            "<body bgcolor = \"#f0f0f0\">\n" +
               "<h1 align = \"center\">" + title + "</h1>\n" +
               "<ul>\n" +
                  "  <li><b>First Name</b>: "
                  + request.getParameter("first_name") + "\n" +
                  "  <li><b>Last Name</b>: "
                  + request.getParameter("last_name") + "\n" +
               "</ul>\n" +
            "</body>"
         "</html>"
      );
   }

   // Method to handle POST method request.
   public void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {

      doGet(request, response);
   }
}

Şimdi yukarıdaki Servlet'i derleyip dağıtın ve POST yöntemiyle Hello.htm kullanarak aşağıdaki gibi test edin -

<html>
   <body>
      <form action = "HelloForm" method = "POST">
         First Name: <input type = "text" name = "first_name">
         <br />
         Last Name: <input type = "text" name = "last_name" />
         <input type = "submit" value = "Submit" />
      </form>
   </body>
</html>

İşte yukarıdaki formun asıl çıktısı, Tomcat'in çalıştığı yerel makinenizde sonucu görmek için Ad ve Soyadını girmeyi deneyin ve ardından gönder düğmesine tıklayın.

Sağlanan girdiye bağlı olarak, yukarıdaki örneklerde belirtildiği gibi benzer bir sonuç üretecektir.

Onay Kutusu Verilerini Servlet Programına Aktarma

Onay kutuları, birden fazla seçeneğin seçilmesi gerektiğinde kullanılır.

İki onay kutusu içeren bir form için örnek HTML kodu CheckBox.htm

<html>
   <body>
      <form action = "CheckBox" method = "POST" target = "_blank">
         <input type = "checkbox" name = "maths" checked = "checked" /> Maths
         <input type = "checkbox" name = "physics"  /> Physics
         <input type = "checkbox" name = "chemistry" checked = "checked" /> 
                                          Chemistry
         <input type = "submit" value = "Select Subject" />
      </form>
   </body>
</html>

Bu kodun sonucu aşağıdaki formdur

Aşağıda, checkbox butonu için web tarayıcısı tarafından verilen girdiyi işlemek için CheckBox.java servlet programı verilmiştir.

// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

// Extend HttpServlet class
public class CheckBox extends HttpServlet {
 
   // Method to handle GET method request.
   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      
      // Set response content type
      response.setContentType("text/html");

      PrintWriter out = response.getWriter();
      String title = "Reading Checkbox Data";
      String docType =
         "<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";

      out.println(docType +
         "<html>\n" +
            "<head><title>" + title + "</title></head>\n" +
            "<body bgcolor = \"#f0f0f0\">\n" +
               "<h1 align = \"center\">" + title + "</h1>\n" +
               "<ul>\n" +
                  "  <li><b>Maths Flag : </b>: "
                  + request.getParameter("maths") + "\n" +
                  "  <li><b>Physics Flag: </b>: "
                  + request.getParameter("physics") + "\n" +
                  "  <li><b>Chemistry Flag: </b>: "
                  + request.getParameter("chemistry") + "\n" +
               "</ul>\n" +
            "</body>"
         "</html>"
      );
   }

   // Method to handle POST method request.
   public void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      
      doGet(request, response);
   }
}

Yukarıdaki örnek için şu sonucu gösterecektir -

Reading Checkbox Data

  • Maths Flag : : on
  • Physics Flag: : null
  • Chemistry Flag: : on

Tüm Form Parametrelerini Okuma

Aşağıda, kullanan genel bir örnek yer almaktadır. getParameterNames()Kullanılabilir tüm form parametrelerini okumak için HttpServletRequest yöntemi. Bu yöntem, parametre adlarını belirtilmemiş bir sırayla içeren bir Numaralandırma döndürür

Bir Numaralandırmaya sahip olduktan sonra, ne zaman duracağımızı belirlemek için hasMoreElements () yöntemini ve her bir parametre adını almak için nextElement () yöntemini kullanarak Numaralandırmayı standart bir şekilde döngüye alabiliriz.

// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;

// Extend HttpServlet class
public class ReadParams extends HttpServlet {
 
   // Method to handle GET method request.
   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      
      // Set response content type
      response.setContentType("text/html");

      PrintWriter out = response.getWriter();
      String title = "Reading All Form Parameters";
      String docType =
         "<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";

      out.println(docType +
         "<html>\n" +
         "<head><title>" + title + "</title></head>\n" +
         "<body bgcolor = \"#f0f0f0\">\n" +
         "<h1 align = \"center\">" + title + "</h1>\n" +
         "<table width = \"100%\" border = \"1\" align = \"center\">\n" +
         "<tr bgcolor = \"#949494\">\n" +
            "<th>Param Name</th>"
            "<th>Param Value(s)</th>\n"+
         "</tr>\n"
      );

      Enumeration paramNames = request.getParameterNames();

      while(paramNames.hasMoreElements()) {
         String paramName = (String)paramNames.nextElement();
         out.print("<tr><td>" + paramName + "</td>\n<td>");
         String[] paramValues = request.getParameterValues(paramName);

         // Read single valued data
         if (paramValues.length == 1) {
            String paramValue = paramValues[0];
            if (paramValue.length() == 0)
               out.println("<i>No Value</i>");
               else
               out.println(paramValue);
         } else {
            // Read multiple valued data
            out.println("<ul>");

            for(int i = 0; i < paramValues.length; i++) {
               out.println("<li>" + paramValues[i]);
            }
            out.println("</ul>");
         }
      }
      out.println("</tr>\n</table>\n</body></html>");
   }
   
   // Method to handle POST method request.
   public void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      
      doGet(request, response);
   }
}

Şimdi, yukarıdaki sunucu uygulamasını aşağıdaki formla deneyin -

<html>
   <body>
      <form action = "ReadParams" method = "POST" target = "_blank">
         <input type = "checkbox" name = "maths" checked = "checked" /> Maths
         <input type = "checkbox" name = "physics"  /> Physics
         <input type = "checkbox" name = "chemistry" checked = "checked" /> Chem
         <input type = "submit" value = "Select Subject" />
      </form>
   </body>
</html>

Şimdi yukarıdaki formu kullanarak sunucu uygulamasını çağırmak aşağıdaki sonucu üretecektir -

Reading All Form Parameters

Param Name Param Value(s)
maths on
chemistry on

Metin kutusu, radyo düğmesi veya açılır kutu vb.Gibi diğer nesnelere sahip başka herhangi bir formun verilerini okumak için yukarıdaki sunucu uygulamasını deneyebilirsiniz.

Bir tarayıcı bir web sayfası istediğinde, web sunucusuna, bu bilgiler HTTP isteğinin başlığının bir parçası olarak seyahat ettiği için doğrudan okunamayan birçok bilgiyi gönderir. Bununla ilgili daha fazla bilgi için HTTP Protokolünü kontrol edebilirsiniz .

Aşağıda, tarayıcı tarafından gelen ve web programlamada çok sık kullanacağınız önemli başlık bilgileri verilmiştir -

Sr.No. Üstbilgi ve Açıklama
1

Accept

Bu başlık, tarayıcının veya diğer istemcilerin işleyebileceği MIME türlerini belirtir. Değerleriimage/png veya image/jpeg en yaygın iki olasılıktır.

2

Accept-Charset

Bu başlık, tarayıcının bilgileri görüntülemek için kullanabileceği karakter kümelerini belirtir. Örneğin ISO-8859-1.

3

Accept-Encoding

Bu başlık, tarayıcının nasıl işleyeceğini bildiği kodlama türlerini belirtir. Değerlerigzip veya compress en yaygın iki olasılıktır.

4

Accept-Language

Bu başlık, sunucu uygulamasının birden fazla dilde sonuç üretebilmesi durumunda istemcinin tercih ettiği dilleri belirtir. Örneğin en, en-us, ru, vb.

5

Authorization

Bu başlık, istemciler tarafından parola korumalı Web sayfalarına erişirken kendilerini tanıtmak için kullanılır.

6

Connection

Bu başlık, istemcinin kalıcı HTTP bağlantılarını işleyip işlemediğini gösterir. Kalıcı bağlantılar, istemcinin veya diğer tarayıcının tek bir istekle birden çok dosyayı almasına izin verir. DeğeriKeep-Alive kalıcı bağlantıların kullanılması gerektiği anlamına gelir.

7

Content-Length

Bu başlık yalnızca POST istekleri için geçerlidir ve POST verilerinin boyutunu bayt cinsinden verir.

8

Cookie

Bu başlık, çerezleri daha önce tarayıcıya gönderen sunuculara döndürür.

9

Host

Bu başlık, orijinal URL'de verildiği şekliyle ana bilgisayarı ve bağlantı noktasını belirtir.

10

If-Modified-Since

Bu başlık, müşterinin sayfayı yalnızca belirtilen tarihten sonra değiştirilmişse istediğini belirtir. Sunucu bir kod gönderir, bu da şu anlama gelir:Not Modified daha yeni bir sonuç yoksa başlık.

11

If-Unmodified-Since

Bu üstbilgi, If-Modified-Since'in tersidir; yalnızca belgenin belirtilen tarihten daha eski olması durumunda işlemin başarılı olması gerektiğini belirtir.

12

Referer

Bu başlık, yönlendiren Web sayfasının URL'sini gösterir. Örneğin, Web sayfası 1'deyseniz ve Web sayfası 2'ye giden bir bağlantıya tıklarsanız, tarayıcı Web sayfası 2'yi istediğinde Web sayfası 1'in URL'si Referrer başlığına eklenir.

13

User-Agent

Bu başlık, istekte bulunan tarayıcıyı veya diğer istemciyi tanımlar ve farklı içeriği farklı tarayıcı türlerine döndürmek için kullanılabilir.

HTTP Üstbilgisini okuma yöntemleri

Sunucu uygulaması programınızda HTTP başlığını okumak için kullanılabilecek aşağıdaki yöntemler vardır. Bu yöntemler HttpServletRequest nesnesiyle kullanılabilir

Sr.No. Yöntem ve Açıklama
1

Cookie[] getCookies()

İstemcinin bu istekle gönderdiği tüm Çerez nesnelerini içeren bir dizi döndürür.

2

Enumeration getAttributeNames()

Bu istek için kullanılabilen özniteliklerin adlarını içeren bir Numaralandırma döndürür.

3

Enumeration getHeaderNames()

Bu isteğin içerdiği tüm başlık adlarının bir listesini döndürür.

4

Enumeration getParameterNames()

Bu istekte bulunan parametrelerin adlarını içeren String nesnelerinin Numaralandırmasını döndürür

5

HttpSession getSession()

Bu istekle ilişkili geçerli oturumu döndürür veya isteğin bir oturumu yoksa bir oturum oluşturur.

6

HttpSession getSession(boolean create)

Bu istekle ilişkili geçerli HttpSession'ı döndürür veya geçerli oturum yoksa ve create değeri true ise, yeni bir oturum döndürür.

7

Locale getLocale()

Accept-Language başlığına bağlı olarak istemcinin içeriği kabul edeceği tercih edilen Yerel Ayarı döndürür.

8

Object getAttribute(String name)

Adlandırılmış özniteliğin değerini bir Nesne olarak döndürür veya verilen adın özniteliği yoksa null döndürür.

9

ServletInputStream getInputStream()

ServletInputStream kullanarak isteğin gövdesini ikili veri olarak alır.

10

String getAuthType()

Sunucu uygulamasını korumak için kullanılan kimlik doğrulama şemasının adını, örneğin "BASIC" veya "SSL" veya JSP korumalı değilse null döndürür.

11

String getCharacterEncoding()

Bu isteğin gövdesinde kullanılan karakter kodlamasının adını döndürür.

12

String getContentType()

İsteğin gövdesinin MIME türünü veya tür bilinmiyorsa boş değerini döndürür.

13

String getContextPath()

İstek URI'sinin, isteğin içeriğini gösteren kısmını döndürür.

14

String getHeader(String name)

Belirtilen istek başlığının değerini bir String olarak döndürür.

15

String getMethod()

GET, POST veya PUT gibi bu isteğin yapıldığı HTTP yönteminin adını döndürür.

16

String getParameter(String name)

Bir istek parametresinin değerini String olarak veya parametre mevcut değilse null olarak döndürür.

17

String getPathInfo()

İstemcinin bu istekte bulunduğunda gönderdiği URL ile ilişkili tüm ekstra yol bilgilerini döndürür

18

String getProtocol()

İsteğin protokol adını ve sürümünü döndürür.

19

String getQueryString()

Yoldan sonra istek URL'sinde bulunan sorgu dizesini döndürür.

20

String getRemoteAddr()

İsteği gönderen istemcinin İnternet Protokolü (IP) adresini döndürür.

21

String getRemoteHost()

İsteği gönderen istemcinin tam nitelikli adını döndürür.

22

String getRemoteUser()

Kullanıcı kimliği doğrulanmışsa, bu istekte bulunan kullanıcının oturum açma bilgilerini döndürür veya kullanıcı kimliği doğrulanmamışsa boş değeri döndürür.

23

String getRequestURI()

Bu isteğin URL'sinin, protokol adından HTTP isteğinin ilk satırındaki sorgu dizesine kadar olan kısmını döndürür.

24

String getRequestedSessionId()

İstemci tarafından belirtilen oturum kimliğini döndürür.

25

String getServletPath()

Bu isteğin URL'sinin JSP'yi çağıran kısmını döndürür.

26

String[] getParameterValues(String name)

Verilen istek parametresinin sahip olduğu tüm değerleri içeren bir String nesneleri dizisi döndürür veya parametre yoksa null döndürür.

27

boolean isSecure()

Bu isteğin HTTPS gibi güvenli bir kanal kullanılarak yapılıp yapılmadığını gösteren bir Boole değeri döndürür.

28

int getContentLength()

İstek gövdesinin bayt cinsinden uzunluğunu ve giriş akışı tarafından kullanılabilir hale getirilen uzunluğunu veya uzunluk bilinmiyorsa -1 değerini döndürür.

29

int getIntHeader(String name)

Belirtilen istek başlığının değerini bir int olarak döndürür.

30

int getServerPort()

Bu isteğin alındığı bağlantı noktası numarasını döndürür.

HTTP Üstbilgi İsteği Örneği

Kullanan örnek aşağıdadır getHeaderNames()HTTP başlık bilgilerini okumak için HttpServletRequest yöntemi. Bu yöntem, geçerli HTTP isteği ile ilişkili başlık bilgilerini içeren bir Numaralandırma döndürür.

Bir Numaralandırmaya sahip olduktan sonra, ne zaman duracağımızı belirlemek için hasMoreElements () yöntemini ve her bir parametre adını almak için nextElement () yöntemini kullanarak Numaralandırmayı standart şekilde döngüye alabiliriz.

// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
 
// Extend HttpServlet class
public class DisplayHeader extends HttpServlet {
 
   // Method to handle GET method request.
   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      
      // Set response content type
      response.setContentType("text/html");
 
      PrintWriter out = response.getWriter();
      String title = "HTTP Header Request Example";
      String docType =
         "<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";

      out.println(docType +
         "<html>\n" +
         "<head><title>" + title + "</title></head>\n"+
         "<body bgcolor = \"#f0f0f0\">\n" +
         "<h1 align = \"center\">" + title + "</h1>\n" +
         "<table width = \"100%\" border = \"1\" align = \"center\">\n" +
         "<tr bgcolor = \"#949494\">\n" +
         "<th>Header Name</th><th>Header Value(s)</th>\n"+
         "</tr>\n"
      );
 
      Enumeration headerNames = request.getHeaderNames();
    
      while(headerNames.hasMoreElements()) {
         String paramName = (String)headerNames.nextElement();
         out.print("<tr><td>" + paramName + "</td>\n");
         String paramValue = request.getHeader(paramName);
         out.println("<td> " + paramValue + "</td></tr>\n");
      }
      out.println("</table>\n</body></html>");
   }
   
   // Method to handle POST method request.
   public void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {

      doGet(request, response);
   }
}

Şimdi yukarıdaki sunucu uygulamasının çağrılması şu sonucu üretecektir -

HTTP Header Request Example

Header Name Header Value(s)
accept */*
accept-language en-us
user-agent Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; InfoPath.2; MS-RTC LM 8)
accept-encoding gzip, deflate
host localhost:8080
connection Keep-Alive
cache-control no-cache

Önceki bölümde tartışıldığı gibi, bir Web sunucusu bir HTTP isteğine yanıt verdiğinde, yanıt tipik olarak bir durum satırı, bazı yanıt başlıkları, boş bir satır ve belgeden oluşur. Tipik bir yanıt şuna benzer -

HTTP/1.1 200 OK
Content-Type: text/html
Header2: ...
...
HeaderN: ...
   (Blank Line)
<!doctype ...>
<html>
   <head>...</head>
   <body>
      ...
   </body>
</html>

Durum satırı, HTTP versiyonundan (örnekte HTTP / 1.1), bir durum kodundan (örnekte 200) ve durum koduna karşılık gelen çok kısa bir mesajdan (örnekte OK) oluşur.

Aşağıda, web sunucusu tarafından tarayıcıya geri dönen ve bunları web programlamada çok sık kullanacağınız en kullanışlı HTTP 1.1 yanıt başlıklarının bir özeti verilmiştir -

Sr.No. Üstbilgi ve Açıklama
1

Allow

Bu başlık, sunucunun desteklediği istek yöntemlerini (GET, POST, vb.) Belirtir.

2

Cache-Control

Bu başlık, yanıt belgesinin güvenli bir şekilde önbelleğe alınabileceği koşulları belirtir. Değerlere sahip olabilirpublic, private veya no-cache vb. Genel, belgenin önbelleğe alınabilir olduğu anlamına gelir, Özel, belgenin tek bir kullanıcı için olduğu ve yalnızca özel (paylaşılmayan) önbelleklerde saklanabileceği anlamına gelir ve nocache, belgenin asla önbelleğe alınmaması gerektiği anlamına gelir.

3

Connection

Bu başlık, tarayıcıya HTTP bağlantılarında kalıcı kullanıp kullanmayacağını bildirir. Değericlose tarayıcıya kalıcı HTTP bağlantılarını kullanmaması talimatını verir ve keepalive kalıcı bağlantılar kullanmak anlamına gelir.

4

Content-Disposition

Bu başlık, tarayıcının kullanıcıdan yanıtı verilen adda bir dosyaya diske kaydetmesini istemesini istemenizi sağlar.

5

Content-Encoding

Bu başlık, sayfanın iletim sırasında kodlanma şeklini belirtir.

6

Content-Language

Bu başlık, belgenin yazıldığı dili belirtir. Örneğin en, en-us, ru, vb.

7

Content-Length

Bu başlık, yanıttaki bayt sayısını gösterir. Bu bilgiler, yalnızca tarayıcı kalıcı (canlı tutma) HTTP bağlantısı kullanıyorsa gereklidir.

8

Content-Type

Bu başlık, yanıt belgesinin MIME (Çok Amaçlı İnternet Posta Uzantısı) türünü verir.

9

Expires

Bu başlık, içeriğin güncel olmadığı ve dolayısıyla artık önbelleğe alınmayacağı zamanı belirtir.

10

Last-Modified

Bu başlık, belgenin en son ne zaman değiştirildiğini gösterir. İstemci daha sonra belgeyi önbelleğe alabilir ve bir tarih belirleyebilir.If-Modified-Since sonraki isteklerde başlık isteyin.

11

Location

Bu başlık, 300'lerde bir durum kodu olan tüm yanıtlara dahil edilmelidir. Bu, tarayıcıya belge adresini bildirir. Tarayıcı bu konuma otomatik olarak yeniden bağlanır ve yeni belgeyi alır.

12

Refresh

Bu başlık, tarayıcının ne kadar sürede güncellenmiş bir sayfa isteyeceğini belirtir. Bir sayfanın yenilenmesi için geçmesi gereken süreyi saniye cinsinden belirtebilirsiniz.

13

Retry-After

Bu başlık, istemciye talebini ne kadar sürede tekrar edebileceğini bildirmek için 503 (Hizmet Kullanılamıyor) yanıtıyla birlikte kullanılabilir.

14

Set-Cookie

Bu başlık, sayfayla ilişkilendirilmiş bir çerezi belirtir.

HTTP Yanıt Başlığını Ayarlama Yöntemleri

Sunucu uygulaması programınızda HTTP yanıt başlığını ayarlamak için kullanılabilecek aşağıdaki yöntemler vardır. Bu yöntemler HttpServletResponse nesnesiyle kullanılabilir.

Sr.No. Yöntem ve Açıklama
1

String encodeRedirectURL(String url)

SendRedirect yönteminde kullanım için belirtilen URL'yi kodlar veya kodlama gerekmiyorsa URL'yi değiştirmeden döndürür.

2

String encodeURL(String url)

Belirtilen URL'yi, içine oturum kimliğini ekleyerek kodlar veya kodlama gerekmiyorsa, URL'yi değiştirmeden döndürür.

3

boolean containsHeader(String name)

Adlandırılmış yanıt başlığının önceden ayarlanıp ayarlanmadığını gösteren bir Boole döndürür.

4

boolean isCommitted()

Yanıtın işlenip işlenmediğini gösteren bir Boole değeri döndürür.

5

void addCookie(Cookie cookie)

Belirtilen çerezi yanıta ekler.

6

void addDateHeader(String name, long date)

Verilen ad ve tarih değeriyle bir yanıt başlığı ekler.

7

void addHeader(String name, String value)

Verilen ad ve değere sahip bir yanıt başlığı ekler.

8

void addIntHeader(String name, int value)

Verilen ada ve tamsayı değerine sahip bir yanıt başlığı ekler.

9

void flushBuffer()

Arabellekteki herhangi bir içeriği istemciye yazılmasına zorlar.

10

void reset()

Arabellekte bulunan tüm verileri, durum kodunu ve başlıkları temizler.

11

void resetBuffer()

Başlıkları veya durum kodunu temizlemeden yanıttaki temeldeki arabelleğin içeriğini temizler.

12

void sendError(int sc)

Belirtilen durum kodunu kullanarak ve arabelleği temizleyerek istemciye bir hata yanıtı gönderir.

13

void sendError(int sc, String msg)

Belirtilen durumu kullanarak istemciye bir hata yanıtı gönderir.

14

void sendRedirect(String location)

Belirtilen yönlendirme konumu URL'sini kullanarak istemciye geçici bir yeniden yönlendirme yanıtı gönderir.

15

void setBufferSize(int size)

Yanıtın gövdesi için tercih edilen arabellek boyutunu ayarlar.

16

void setCharacterEncoding(String charset)

İstemciye gönderilen yanıtın karakter kodlamasını (MIME karakter kümesi), örneğin UTF-8 olarak ayarlar.

17

void setContentLength(int len)

Yanıttaki içerik gövdesinin uzunluğunu ayarlar HTTP sunucu uygulamalarında bu yöntem HTTP İçerik Uzunluğu başlığını ayarlar.

18

void setContentType(String type)

Yanıt henüz işlenmemişse, istemciye gönderilen yanıtın içerik türünü ayarlar.

19

void setDateHeader(String name, long date)

Verilen ad ve tarih değerine sahip bir yanıt başlığı ayarlar.

20

void setHeader(String name, String value)

Verilen ad ve değere sahip bir yanıt başlığı ayarlar.

21

void setIntHeader(String name, int value)

Verilen ada ve tamsayı değerine sahip bir yanıt başlığı ayarlar

22

void setLocale(Locale loc)

Yanıt henüz işlenmemişse yanıtın yerel ayarını ayarlar.

23

void setStatus(int sc)

Bu yanıt için durum kodunu ayarlar

HTTP Üstbilgi Yanıtı Örneği

Önceki örneklerde çalışan setContentType () yöntemini zaten gördünüz ve aşağıdaki örnek de aynı yöntemi kullanacaktı, ek olarak setIntHeader() ayarlama yöntemi Refresh başlık.

// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
 
// Extend HttpServlet class
public class Refresh extends HttpServlet {
 
   // Method to handle GET method request.
   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
   
      // Set refresh, autoload time as 5 seconds
      response.setIntHeader("Refresh", 5);
 
      // Set response content type
      response.setContentType("text/html");
 
      // Get current time
      Calendar calendar = new GregorianCalendar();
      String am_pm;
      int hour = calendar.get(Calendar.HOUR);
      int minute = calendar.get(Calendar.MINUTE);
      int second = calendar.get(Calendar.SECOND);
         
      if(calendar.get(Calendar.AM_PM) == 0)
         am_pm = "AM";
      else
         am_pm = "PM";
 
      String CT = hour+":"+ minute +":"+ second +" "+ am_pm;
    
      PrintWriter out = response.getWriter();
      String title = "Auto Refresh Header Setting";
      String docType =
         "<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";

      out.println(docType +
         "<html>\n" +
         "<head><title>" + title + "</title></head>\n"+
         "<body bgcolor = \"#f0f0f0\">\n" +
         "<h1 align = \"center\">" + title + "</h1>\n" +
         "<p>Current Time is: " + CT + "</p>\n"
      );
   }
   
   // Method to handle POST method request.
   public void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      
      doGet(request, response);
   }
}

Şimdi yukarıdaki sunucu uygulamasının çağrılması, her 5 saniyede bir aşağıdaki gibi geçerli sistem zamanını görüntüleyecektir. Yalnızca sunucu uygulamasını çalıştırın ve sonucu görmek için bekleyin -

Auto Refresh Header Setting

Current Time is: 9:44:50 PM

HTTP isteğinin ve HTTP yanıt mesajlarının biçimi benzerdir ve aşağıdaki yapıya sahip olacaktır:

  • Bir başlangıç ​​durum satırı + CRLF (Satır Başı + Satır Besleme yani Yeni Satır)

  • Sıfır veya daha fazla başlık satırı + CRLF

  • Boş bir satır, yani bir CRLF

  • Dosya, sorgu verileri veya sorgu çıktısı gibi isteğe bağlı bir mesaj gövdesi.

Örneğin, bir sunucu yanıt başlığı aşağıdaki gibi görünür -

HTTP/1.1 200 OK
Content-Type: text/html
Header2: ...
...
HeaderN: ...
   (Blank Line)
<!doctype ...>
<html>
   <head>...</head>
   <body>
      ...
   </body>
</html>

Durum satırı, HTTP versiyonundan (örnekte HTTP / 1.1), bir durum kodundan (örnekte 200) ve durum koduna karşılık gelen çok kısa bir mesajdan (örnekte OK) oluşur.

Aşağıda, Web Sunucusundan döndürülebilecek HTTP durum kodlarının ve ilişkili mesajların bir listesi bulunmaktadır -

Kod İleti Açıklama
100 Devam et İsteğin sadece bir kısmı sunucu tarafından alındı, ancak reddedilmediği sürece istemcinin talebe devam etmesi gerekiyor
101 Protokolleri Değiştirme Sunucu protokolü değiştirir.
200 tamam İstek tamam
201 Oluşturuldu İstek tamamlandı ve yeni bir kaynak oluşturuldu
202 Kabul edilmiş İstek işlenmek üzere kabul edildi, ancak işlem tamamlanmadı.
203 Yetkilendirilmemiş Bilgiler  
204 İçerik yok  
205 İçeriği Sıfırla  
206 Kısmi İçerik  
300 Çoklu seçimler Bir bağlantı listesi. Kullanıcı bir bağlantı seçebilir ve o konuma gidebilir. Maksimum beş adres
301 Kalıcı Olarak Taşındı İstenen sayfa yeni bir url'ye taşındı
302 Bulundu İstenen sayfa geçici olarak yeni bir url'ye taşındı
303 Diğerlerini Gör İstenen sayfa farklı bir url altında bulunabilir
304 Modifiye edilmemiş  
305 Proxy kullan  
306 Kullanılmayan Bu kod önceki bir sürümde kullanıldı. Artık kullanılmıyor, ancak kod ayrılmıştır
307 Geçici Yeniden Yönlendirme İstenen sayfa geçici olarak yeni bir url'ye taşındı.
400 Geçersiz istek Sunucu isteği anlamadı
401 Yetkisiz İstenen sayfanın bir kullanıcı adı ve şifreye ihtiyacı var
402 ödeme gerekli Bu kodu henüz kullanamazsınız
403 Yasak İstenen sayfaya erişim yasaktır
404 Bulunamadı Sunucu istenen sayfayı bulamıyor.
405 izinsiz metod Talepte belirtilen yönteme izin verilmiyor.
406 Kabul edilemez Sunucu, yalnızca istemci tarafından kabul edilmeyen bir yanıt oluşturabilir.
407 Proxy Kimlik Doğrulaması Gerekli Bu isteğin yerine getirilebilmesi için önce bir proxy sunucusuyla kimlik doğrulamanız gerekir.
408 İstek zaman aşımına uğradı İstek, sunucunun beklemeye hazırlandığından daha uzun sürdü.
409 Fikir ayrılığı Bir çakışma nedeniyle istek tamamlanamadı.
410 Gitti İstenen sayfa artık mevcut değil.
411 Uzunluk Gerekli "İçerik Uzunluğu" tanımlanmadı. Sunucu, onsuz isteği kabul etmeyecektir.
412 Ön Koşul Başarısız İstekte belirtilen ön koşul, sunucu tarafından yanlış olarak değerlendirildi.
413 girilen veri çok fazla Sunucu isteği kabul etmeyecek çünkü istek varlığı çok büyük.
414 URL isteği Çok Uzun URL çok uzun olduğu için sunucu isteği kabul etmeyecek. Bir "gönderi" isteğini uzun bir sorgu bilgisine sahip bir "alma" isteğine dönüştürdüğünüzde gerçekleşir.
415 Desteklenmeyen Medya Türü Ortam türü desteklenmediği için sunucu isteği kabul etmeyecek.
417 Beklenti Başarısız  
500 İç Sunucu Hatası İstek tamamlanmadı. Sunucu beklenmedik bir koşulla karşılaştı.
501 Uygulanmadı İstek tamamlanmadı. Sunucu, gerekli işlevselliği desteklemedi.
502 Hatalı Ağ Geçidi İstek tamamlanmadı. Sunucu, yukarı akış sunucusundan geçersiz bir yanıt aldı.
503 hizmet kullanılamıyor İstek tamamlanmadı. Sunucu geçici olarak aşırı yükleniyor veya çalışmıyor.
504 Ağ Geçidi Zaman Aşımı Ağ geçidi zaman aşımına uğradı.
505 HTTP Sürümü Desteklenmiyor Sunucu, "http protokolü" sürümünü desteklemiyor.

HTTP Durum Kodunu Ayarlama Yöntemleri

Sunucu uygulaması programınızda HTTP Durum Kodunu ayarlamak için aşağıdaki yöntemler kullanılabilir. Bu yöntemler HttpServletResponse nesnesiyle kullanılabilir.

Sr.No. Yöntem ve Açıklama
1

public void setStatus ( int statusCode )

Bu yöntem, rastgele bir durum kodu ayarlar. SetStatus yöntemi, bağımsız değişken olarak bir int (durum kodu) alır. Yanıtınız özel bir durum kodu ve bir belge içeriyorsa, PrintWriter ile herhangi bir içeriği gerçekten döndürmeden önce setStatus'u çağırdığınızdan emin olun .

2

public void sendRedirect(String url)

Bu yöntem , yeni belgenin URL'sini veren bir Konum başlığı ile birlikte bir 302 yanıtı oluşturur.

3

public void sendError(int code, String message)

Bu yöntem, bir HTML belgesi içinde otomatik olarak biçimlendirilen ve istemciye gönderilen kısa bir mesajla birlikte bir durum kodu (genellikle 404) gönderir.

HTTP Durum Kodu Örneği

Aşağıda, istemci tarayıcısına bir 407 hata kodu gönderecek örnek verilmiştir ve tarayıcı size "Kimlik doğrulaması gerekiyor !!!" İleti.

// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;

// Extend HttpServlet class
public class showError extends HttpServlet {
 
   // Method to handle GET method request.
   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      
      // Set error code and reason.
      response.sendError(407, "Need authentication!!!" );
   }
   
   // Method to handle POST method request.
   public void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      
      doGet(request, response);
   }
}

Şimdi yukarıdaki sunucu uygulamasının çağrılması aşağıdaki sonucu görüntüleyecektir -

HTTP Status 407 - Need authentication!!!

type Status report

messageNeed authentication!!!

descriptionThe client must first authenticate itself with the proxy (Need authentication!!!).

Apache Tomcat/5.5.29

Sunucu Filtreleri, aşağıdaki amaçlarla Servlet Programlamada kullanılabilen Java sınıflarıdır -

  • Arka uçta bir kaynağa erişmeden önce istemciden gelen istekleri engellemek için.

  • İstemciye geri gönderilmeden önce sunucudan gelen yanıtları değiştirmek için.

Spesifikasyonların önerdiği çeşitli filtre türleri vardır -

  • Kimlik Doğrulama Filtreleri.
  • Veri sıkıştırma Filtreleri.
  • Şifreleme Filtreleri.
  • Kaynak erişim olaylarını tetikleyen filtreler.
  • Görüntü Dönüştürme Filtreleri.
  • Günlük Kaydı ve Denetleme Filtreleri.
  • MIME-TYPE Zincir Filtreleri.
  • Simgeleştirme Filtreleri.
  • XML İçeriğini Dönüştüren XSL / T Filtreleri.

Filtreler, dağıtım tanımlayıcı dosyasında dağıtılır web.xml ve sonra uygulamanızın dağıtım tanımlayıcısındaki sunucu uygulaması adlarıyla veya URL modelleriyle eşleyin.

Web kapsayıcısı, web uygulamanızı başlattığında, dağıtım tanımlayıcısında beyan ettiğiniz her filtrenin bir örneğini oluşturur. Filtreler, dağıtım tanımlayıcısında bildirildikleri sırayla yürütülür.

Servlet Filtre Yöntemleri

Filtre, javax.servlet.Filter arayüzünü uygulayan bir Java sınıfıdır. Javax.servlet.Filter arabirimi üç yöntem tanımlar -

Sr.No. Yöntem ve Açıklama
1

public void doFilter (ServletRequest, ServletResponse, FilterChain)

Bu yöntem, zincirin sonundaki bir kaynak için bir istemci talebi nedeniyle zincirden bir istek / yanıt çifti her geçtiğinde konteyner tarafından çağrılır.

2

public void init(FilterConfig filterConfig)

Bu yöntem, hizmete konulmakta olduğunu bir filtreye belirtmek için web kapsayıcısı tarafından çağrılır.

3

public void destroy()

Bu yöntem, hizmet dışı bırakıldığını bir filtreye belirtmek için web kapsayıcısı tarafından çağrılır.

Servlet Filtresi - Örnek

Aşağıda, istemcilerin IP adresini ve güncel tarih saatini yazdıran Servlet Filtresi Örneği verilmiştir. Bu örnek size Servlet Filter hakkında temel bir anlayış verecektir, ancak aynı konsepti kullanarak daha gelişmiş filtre uygulamaları yazabilirsiniz -

// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;

// Implements Filter class
public class LogFilter implements Filter  {
   public void  init(FilterConfig config) throws ServletException {
      
      // Get init parameter 
      String testParam = config.getInitParameter("test-param"); 

      //Print the init parameter 
      System.out.println("Test Param: " + testParam); 
   }
   
   public void  doFilter(ServletRequest request, ServletResponse response,
      FilterChain chain) throws java.io.IOException, ServletException {

      // Get the IP address of client machine.
      String ipAddress = request.getRemoteAddr();

      // Log the IP address and current timestamp.
      System.out.println("IP "+ ipAddress + ", Time " + new Date().toString());

      // Pass request back down the filter chain
      chain.doFilter(request,response);
   }

   public void destroy( ) {
      /* Called before the Filter instance is removed from service by the web container*/
   }
}

Derleme LogFilter.java olağan şekilde ve sınıf dosyanızı <Tomcat-installationdirectory> / webapps / ROOT / WEB-INF / classes içine koyun

Web.xml'de Servlet Filtresi Eşleme

Filtreler tanımlanır ve sonra bir URL'ye veya Servlet'e eşlenir, tıpkı Servlet'in tanımlanmasıyla aynı şekilde ve ardından bir URL modeline eşlenir. Dağıtım tanımlayıcı dosyasında filtre etiketi için aşağıdaki girişi oluşturunweb.xml

<filter>
   <filter-name>LogFilter</filter-name>
   <filter-class>LogFilter</filter-class>
   <init-param>
      <param-name>test-param</param-name>
      <param-value>Initialization Paramter</param-value>
   </init-param>
</filter>

<filter-mapping>
   <filter-name>LogFilter</filter-name>
   <url-pattern>/*</url-pattern>
</filter-mapping>

Yukarıdaki filtre, belirttiğimiz için tüm sunucu uygulamaları için geçerli olacaktır. /*konfigürasyonumuzda. Yalnızca birkaç sunucu uygulamasına filtre uygulamak istiyorsanız, belirli bir sunucu uygulaması yolu belirtebilirsiniz.

Şimdi herhangi bir sunucu uygulamasını her zamanki gibi çağırmayı deneyin ve web sunucusu günlüğünüzde oluşturulan günlüğü göreceksiniz. Yukarıdaki logu ayrı bir dosyada oturum açmak için Log4J logger'ı kullanabilirsiniz.

Birden Çok Filtre Kullanmak

Web uygulamanız, belirli bir amaç için birkaç farklı filtre tanımlayabilir. AuthenFilter ve LogFilter olmak üzere iki filtre tanımladığınızı düşünün . Aşağıda belirtildiği gibi farklı bir eşleme oluşturmanız gerekmesi dışında, sürecin geri kalanı yukarıda açıklandığı gibi kalacaktır -

<filter>
   <filter-name>LogFilter</filter-name>
   <filter-class>LogFilter</filter-class>
   <init-param>
      <param-name>test-param</param-name>
      <param-value>Initialization Paramter</param-value>
   </init-param>
</filter>

<filter>
   <filter-name>AuthenFilter</filter-name>
   <filter-class>AuthenFilter</filter-class>
   <init-param>
      <param-name>test-param</param-name>
      <param-value>Initialization Paramter</param-value>
   </init-param>
</filter>

<filter-mapping>
   <filter-name>LogFilter</filter-name>
   <url-pattern>/*</url-pattern>
</filter-mapping>

<filter-mapping>
   <filter-name>AuthenFilter</filter-name>
   <url-pattern>/*</url-pattern>
</filter-mapping>

Filtreler Uygulama Sırası

Web.xml'deki filtre eşleme öğelerinin sırası, web kapsayıcısının filtreyi sunucu uygulamasına uygulama sırasını belirler. Filtrenin sırasını tersine çevirmek için, web.xml dosyasındaki filtre eşleme öğelerini ters çevirmeniz yeterlidir.

Örneğin, yukarıdaki örnek önce LogFilter'ı uygular ve ardından AuthenFilter'ı herhangi bir sunucu uygulamasına uygular ancak aşağıdaki örnek sıralamayı tersine çevirir -

<filter-mapping>
   <filter-name>AuthenFilter</filter-name>
   <url-pattern>/*</url-pattern>
</filter-mapping>

<filter-mapping>
   <filter-name>LogFilter</filter-name>
   <url-pattern>/*</url-pattern>
</filter-mapping>

Bir sunucu uygulaması bir istisna attığında, web kapsayıcısı, web.xml atılan istisna türüyle bir eşleşme için istisna türü öğeyi kullanan.

Kullanmanız gerekecek error-page web.xml'deki öğesi belirli yanıtlara yanıt olarak sunucu uygulamalarının çağrılmasını belirtmek için exceptions veya HTTP status codes.

web.xml Yapılandırması

Tanımlanmış herhangi bir istisna veya hata olduğunda çağrılacak bir ErrorHandler sunucu uygulamanız olduğunu düşünün . Aşağıda, web.xml'de oluşturulan giriş olacaktır.

<!-- servlet definition -->
<servlet>
   <servlet-name>ErrorHandler</servlet-name>
   <servlet-class>ErrorHandler</servlet-class>
</servlet>

<!-- servlet mappings -->
<servlet-mapping>
   <servlet-name>ErrorHandler</servlet-name>
   <url-pattern>/ErrorHandler</url-pattern>
</servlet-mapping>

<!-- error-code related error pages -->
<error-page>
   <error-code>404</error-code>
   <location>/ErrorHandler</location>
</error-page>

<error-page>
   <error-code>403</error-code>
   <location>/ErrorHandler</location>
</error-page>

<!-- exception-type related error pages -->
<error-page>
   <exception-type>
      javax.servlet.ServletException
   </exception-type >
   <location>/ErrorHandler</location>
</error-page>

<error-page>
   <exception-type>java.io.IOException</exception-type >
   <location>/ErrorHandler</location>
</error-page>

Tüm istisnalar için genel bir Hata İşleyiciye sahip olmak istiyorsanız, her istisna için ayrı hata sayfası öğeleri tanımlamak yerine aşağıdaki hata sayfasını tanımlamalısınız -

<error-page>
   <exception-type>java.lang.Throwable</exception-type >
   <location>/ErrorHandler</location>
</error-page>

İstisna İşleme için yukarıdaki web.xml hakkında dikkat edilmesi gereken noktalar aşağıdadır -

  • Sunucu uygulaması ErrorHandler, diğer sunucu uygulamaları gibi normal şekilde tanımlanır ve web.xml'de yapılandırılır.

  • 404 (Bulunamadı) veya 403 (Yasak) durum kodunda herhangi bir hata varsa, ErrorHandler sunucu uygulaması çağrılır.

  • Web uygulaması ServletException veya IOException atarsa, web kapsayıcısı / ErrorHandler sunucu uygulamasını çağırır.

  • Farklı türdeki hataları veya istisnaları işlemek için farklı Hata İşleyicileri tanımlayabilirsiniz. Yukarıdaki örnek çok geneldir ve size temel kavramı açıklama amacına hizmet etmesini umuyoruz.

Öznitelik İste - Hatalar / İstisnalar

Aşağıda, bir hata işleme sunucu uygulamasının hatanın / istisnanın doğasını analiz etmek için erişebileceği istek özniteliklerinin listesi verilmiştir.

Sr.No. Öznitelik ve Açıklama
1

javax.servlet.error.status_code

Bu özellik, bir java.lang.Integer veri türünde depolandıktan sonra depolanabilen ve analiz edilebilen durum kodunu verir.

2

javax.servlet.error.exception_type

Bu özellik, bir java.lang.Class veri türünde depolandıktan sonra depolanabilen ve analiz edilebilen istisna türü hakkında bilgi verir.

3

javax.servlet.error.message

Bu öznitelik, bir java.lang.String veri türünde depolandıktan sonra depolanabilen ve analiz edilebilen bilgiye tam hata mesajı verir.

4

javax.servlet.error.request_uri

Bu özellik, sunucu uygulamasını çağıran URL hakkında bilgi verir ve bir java.lang.String veri türünde depolandıktan sonra depolanabilir ve analiz edilebilir.

5

javax.servlet.error.exception

Bu özellik, saklanabilen ve analiz edilebilen istisna hakkında bilgi verir.

6

javax.servlet.error.servlet_name

Bu özellik, java.lang.String veri türünde depolandıktan sonra depolanabilen ve analiz edilebilen sunucu uygulaması adını verir.

Hata İşleyici Servlet Örneği

Bu örnek size Servlet'te İstisna İşleme hakkında temel bir anlayış verecektir, ancak aynı konsepti kullanarak daha karmaşık filtre uygulamaları yazabilirsiniz -

// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;

// Extend HttpServlet class
public class ErrorHandler extends HttpServlet {
 
   // Method to handle GET method request.
   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
         
      // Analyze the servlet exception       
      Throwable throwable = (Throwable)
      request.getAttribute("javax.servlet.error.exception");
      Integer statusCode = (Integer)
      request.getAttribute("javax.servlet.error.status_code");
      String servletName = (String)
      request.getAttribute("javax.servlet.error.servlet_name");
         
      if (servletName == null) {
         servletName = "Unknown";
      }
      String requestUri = (String)
      request.getAttribute("javax.servlet.error.request_uri");
      
      if (requestUri == null) {
         requestUri = "Unknown";
      }

      // Set response content type
      response.setContentType("text/html");

      PrintWriter out = response.getWriter();
      String title = "Error/Exception Information";
      String docType =
         "<!doctype html public \"-//w3c//dtd html 4.0 " +
         "transitional//en\">\n";
         
      out.println(docType +
         "<html>\n" +
         "<head><title>" + title + "</title></head>\n" +
         "<body bgcolor = \"#f0f0f0\">\n");

      if (throwable == null && statusCode == null) {
         out.println("<h2>Error information is missing</h2>");
         out.println("Please return to the <a href=\"" + 
            response.encodeURL("http://localhost:8080/") + 
            "\">Home Page</a>.");
      } else if (statusCode != null) {
         out.println("The status code : " + statusCode);
      } else {
         out.println("<h2>Error information</h2>");
         out.println("Servlet Name : " + servletName + "</br></br>");
         out.println("Exception Type : " + throwable.getClass( ).getName( ) + "</br></br>");
         out.println("The request URI: " + requestUri + "<br><br>");
         out.println("The exception message: " + throwable.getMessage( ));
      }
      out.println("</body>");
      out.println("</html>");
   }
   
   // Method to handle POST method request.
   public void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      
      doGet(request, response);
   }
}

Derleme ErrorHandler.java her zamanki gibi ve sınıf dosyanızı koyun / webapps / ROOT / WEB-INF / sınıflar.

İstisnaları işlemek için web.xml'ye aşağıdaki yapılandırmayı ekleyelim -

<servlet>
   <servlet-name>ErrorHandler</servlet-name>
   <servlet-class>ErrorHandler</servlet-class>
</servlet>

<!-- servlet mappings -->
<servlet-mapping>
   <servlet-name>ErrorHandler</servlet-name>
   <url-pattern>/ErrorHandler</url-pattern>
</servlet-mapping>

<error-page>
   <error-code>404</error-code>
   <location>/ErrorHandler</location>
</error-page>

<error-page>
   <exception-type>java.lang.Throwable</exception-type >
   <location>/ErrorHandler</location>
</error-page>

Şimdi herhangi bir istisna oluşturan veya yanlış bir URL yazan bir sunucu uygulaması kullanmayı deneyin, bu Web Kapsayıcıyı çağırmak için tetikler. ErrorHandlerservlet ve programlandığı gibi uygun bir mesaj görüntüler. Örneğin, yanlış bir URL yazarsanız, aşağıdaki sonucu görüntüler -

The status code : 404

Yukarıdaki kod bazı web tarayıcılarında çalışmayabilir. Öyleyse Mozilla ve Safari ile deneyin ve çalışmalıdır.

Çerezler, istemci bilgisayarda saklanan metin dosyalarıdır ve çeşitli bilgi takibi amacıyla saklanır. Java Servlets, HTTP tanımlama bilgilerini şeffaf bir şekilde destekler.

Geri dönen kullanıcıları belirlemenin üç adımı vardır:

  • Sunucu komut dosyası, tarayıcıya bir dizi çerez gönderir. Örneğin isim, yaş veya kimlik numarası vb.

  • Tarayıcı, bu bilgileri ileride kullanılmak üzere yerel makinede depolar.

  • Tarayıcı bir dahaki sefere web sunucusuna herhangi bir istek gönderdiğinde, bu tanımlama bilgilerini sunucuya gönderir ve sunucu, kullanıcıyı tanımlamak için bu bilgileri kullanır.

Bu bölüm size tanımlama bilgilerini nasıl ayarlayacağınızı veya sıfırlayacağınızı, bunlara nasıl erişeceğinizi ve nasıl sileceğinizi öğretecektir.

Bir Çerezin Anatomisi

Çerezler genellikle bir HTTP başlığında ayarlanır (bununla birlikte JavaScript, doğrudan bir tarayıcıya da bir çerez ayarlayabilir). Çerezi ayarlayan bir sunucu uygulaması şuna benzer başlıklar gönderebilir -

HTTP/1.1 200 OK
Date: Fri, 04 Feb 2000 21:03:38 GMT
Server: Apache/1.3.9 (UNIX) PHP/4.0b3
Set-Cookie: name = xyz; expires = Friday, 04-Feb-07 22:03:38 GMT; 
   path = /; domain = tutorialspoint.com
Connection: close
Content-Type: text/html

Gördüğünüz gibi, Set-Cookie başlığı bir ad-değer çifti, bir GMT tarihi, bir yol ve bir etki alanı içerir. Ad ve değer URL olarak kodlanacaktır. Son kullanma tarihi alanı, tarayıcıya verilen saat ve tarihten sonra çerezi "unutması" için bir talimattır.

Tarayıcı tanımlama bilgilerini depolayacak şekilde yapılandırılmışsa, bu bilgileri son kullanma tarihine kadar saklayacaktır. Kullanıcı, tarayıcıyı çerezin yolu ve etki alanıyla eşleşen herhangi bir sayfaya yönlendirirse, çerezi sunucuya yeniden gönderir. Tarayıcının başlıkları şöyle görünebilir -

GET / HTTP/1.0
Connection: Keep-Alive
User-Agent: Mozilla/4.6 (X11; I; Linux 2.2.6-15apmac ppc)
Host: zink.demon.co.uk:1126
Accept: image/gif, */*
Accept-Encoding: gzip
Accept-Language: en
Accept-Charset: iso-8859-1,*,utf-8
Cookie: name = xyz

Daha sonra sunucu uygulamacığı, bir dizi Çerez nesnesi döndüren request.getCookies () istek yöntemi aracılığıyla çereze erişime sahip olacaktır .

Servlet Çerez Yöntemleri

Servlet'te çerezleri işlerken kullanabileceğiniz yararlı yöntemlerin listesi aşağıdadır.

Sr.No. Yöntem ve Açıklama
1

public void setDomain(String pattern)

Bu yöntem, örneğin tutorialspoint.com gibi tanımlama bilgisinin uygulandığı etki alanını ayarlar.

2

public String getDomain()

Bu yöntem, örneğin tutorialspoint.com gibi tanımlama bilgisinin uygulandığı alanı alır.

3

public void setMaxAge(int expiry)

Bu yöntem, çerezin süresi dolmadan önce ne kadar sürenin (saniye cinsinden) geçmesi gerektiğini belirler. Bunu ayarlamazsanız, çerez yalnızca mevcut oturum için geçerli olacaktır.

4

public int getMaxAge()

Bu yöntem, çerezin saniye cinsinden belirtilen maksimum yaşını döndürür; Varsayılan olarak -1, çerezin tarayıcı kapanana kadar devam edeceğini belirtir.

5

public String getName()

Bu yöntem, çerezin adını döndürür. İsim oluşturulduktan sonra değiştirilemez.

6

public void setValue(String newValue)

Bu yöntem, çerezle ilişkilendirilen değeri ayarlar

7

public String getValue()

Bu yöntem, çerezle ilişkilendirilen değeri alır.

8

public void setPath(String uri)

Bu yöntem, bu tanımlama bilgisinin uygulanacağı yolu belirler. Bir yol belirtmezseniz, çerez geçerli sayfayla aynı dizindeki tüm URL'ler ve tüm alt dizinler için döndürülür.

9

public String getPath()

Bu yöntem, bu çerezin uygulandığı yolu alır.

10

public void setSecure(boolean flag)

Bu yöntem, tanımlama bilgisinin yalnızca şifreli (yani SSL) bağlantılar üzerinden gönderilip gönderilmeyeceğini belirten boole değerini ayarlar.

11

public void setComment(String purpose)

Bu yöntem, bir tanımlama bilgisinin amacını açıklayan bir yorumu belirtir. Tarayıcının çerezi kullanıcıya sunması durumunda yorum yararlıdır.

12

public String getComment()

Bu yöntem, bu tanımlama bilgisinin amacını açıklayan yorumu döndürür veya tanımlama bilgisinin açıklaması yoksa boş bırakılır.

Servlet ile Çerezleri Ayarlama

Çerezleri sunucu uygulamasıyla ayarlamak üç adımdan oluşur -

(1) Creating a Cookie object - Çerez kurucusunu, her ikisi de dizelerden oluşan bir çerez adı ve bir çerez değeri ile çağırırsınız.

Cookie cookie = new Cookie("key","value");

Adın veya değerin beyaz boşluk veya aşağıdaki karakterlerden herhangi birini içermemesi gerektiğini unutmayın -

[ ] ( ) = , " / ? @ : ;

(2) Setting the maximum age- Çerezin ne kadar süre (saniye olarak) geçerli olacağını belirtmek için setMaxAge kullanırsınız. Aşağıdaki, 24 saatlik bir çerez ayarlayacaktır.

cookie.setMaxAge(60 * 60 * 24);

(3) Sending the Cookie into the HTTP response headers - HTTP yanıt başlığına aşağıdaki gibi tanımlama bilgileri eklemek için response.addCookie'yi kullanırsınız -

response.addCookie(cookie);

Misal

Ad ve soyad için tanımlama bilgilerini ayarlamak için Form Örneğimizi değiştirelim .

// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
 
// Extend HttpServlet class
public class HelloForm extends HttpServlet {

   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      
      // Create cookies for first and last names.      
      Cookie firstName = new Cookie("first_name", request.getParameter("first_name"));
      Cookie lastName = new Cookie("last_name", request.getParameter("last_name"));

      // Set expiry date after 24 Hrs for both the cookies.
      firstName.setMaxAge(60*60*24);
      lastName.setMaxAge(60*60*24);

      // Add both the cookies in the response header.
      response.addCookie( firstName );
      response.addCookie( lastName );

      // Set response content type
      response.setContentType("text/html");
 
      PrintWriter out = response.getWriter();
      String title = "Setting Cookies Example";
      String docType =
         "<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
      
      out.println(docType +
         "<html>\n" +
            "<head>
               <title>" + title + "</title>
            </head>\n" +
            
            "<body bgcolor = \"#f0f0f0\">\n" +
               "<h1 align = \"center\">" + title + "</h1>\n" +
               "<ul>\n" +
                  "  <li><b>First Name</b>: "
                  + request.getParameter("first_name") + "\n" +
                  "  <li><b>Last Name</b>: "
                  + request.getParameter("last_name") + "\n" +
               "</ul>\n" +
            "</body>
         </html>"
      );
   }
}

Yukarıdaki sunucu uygulamasını derleyin HelloForm ve web.xml dosyasında uygun girişi oluşturun ve son olarak servlet'i çağırmak için HTML sayfasını izlemeyi deneyin.

<html>
   <body>
      <form action = "HelloForm" method = "GET">
         First Name: <input type = "text" name = "first_name">
         <br />
         Last Name: <input type = "text" name = "last_name" />
         <input type = "submit" value = "Submit" />
      </form>
   </body>
</html>

HTML içeriğini Hello.htm dosyasında tutun ve <Tomcat-installationdirectory> / webapps / ROOT dizinine koyun. Ne zaman olur erişim http: // localhost: 8080 / Hello.htm , burada yukarıdaki form gerçek çıkışıdır.

Adı ve Soyadı girmeyi deneyin ve ardından gönder düğmesine tıklayın. Bu, ekranınızda adınızı ve soyadınızı görüntüler ve aynı zamanda, bir dahaki sefere Gönder düğmesine bastığınızda sunucuya geri gönderilecek olan FirstName ve lastName iki çerez ayarlayacaktır.

Sonraki bölüm, bu tanımlama bilgilerine web uygulamanıza nasıl erişeceğinizi açıklayacaktır.

Servlet ile Çerezleri Okuma

Çerezleri okumak için, bir dizi javax.servlet.http.Cookie nesnesini çağırarak oluşturmanız gerekir .getCookies()HttpServletRequest yöntemi . Ardından dizi içinde dönün ve her çereze ve ilişkili değere erişmek için getName () ve getValue () yöntemlerini kullanın.

Misal

Önceki örnekte belirlediğimiz çerezleri okuyalım -

// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
 
// Extend HttpServlet class
public class ReadCookies extends HttpServlet {
 
   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      
      Cookie cookie = null;
      Cookie[] cookies = null;

      // Get an array of Cookies associated with this domain
      cookies = request.getCookies();

      // Set response content type
      response.setContentType("text/html");

      PrintWriter out = response.getWriter();
      String title = "Reading Cookies Example";
      String docType =
         "<!doctype html public \"-//w3c//dtd html 4.0 " +
         "transitional//en\">\n";
         
      out.println(docType +
         "<html>\n" +
         "<head><title>" + title + "</title></head>\n" +
         "<body bgcolor = \"#f0f0f0\">\n" );

      if( cookies != null ) {
         out.println("<h2> Found Cookies Name and Value</h2>");

         for (int i = 0; i < cookies.length; i++) {
            cookie = cookies[i];
            out.print("Name : " + cookie.getName( ) + ",  ");
            out.print("Value: " + cookie.getValue( ) + " <br/>");
         }
      } else {
         out.println("<h2>No cookies founds</h2>");
      }
      out.println("</body>");
      out.println("</html>");
   }
}

Sunucu uygulamasının üzerinde derleyin ReadCookiesve web.xml dosyasında uygun girişi oluşturun. First_name çerezini "John" ve last_name çerezini "Player" olarak ayarlasaydınız , http: // localhost: 8080 / ReadCookies çalıştırıldığında aşağıdaki sonuç görüntülenir -

Found Cookies Name and Value

Name : first_name, Value: John
Name : last_name, Value: Player

Servlet ile Çerezleri Sil

Çerezleri silmek çok basittir. Bir çerezi silmek istiyorsanız, aşağıdaki üç adımı izlemeniz yeterlidir -

  • Zaten var olan bir çerezi okuyun ve Çerez nesnesinde saklayın.

  • Kullanarak çerez yaşını sıfır olarak ayarlayın setMaxAge() mevcut bir çerezi silme yöntemi

  • Bu çerezi yanıt başlığına geri ekleyin.

Misal

Aşağıdaki örnek, "first_name" adlı mevcut tanımlama bilgisini siler ve bir dahaki sefere ReadCookies sunucu uygulamasını çalıştırdığınızda, ilk_adı için boş değer döndürür.

// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
 
// Extend HttpServlet class
public class DeleteCookies extends HttpServlet {
 
   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      
      Cookie cookie = null;
      Cookie[] cookies = null;
         
      // Get an array of Cookies associated with this domain
      cookies = request.getCookies();

      // Set response content type
      response.setContentType("text/html");
 
      PrintWriter out = response.getWriter();
      String title = "Delete Cookies Example";
      String docType =
         "<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
         
      out.println(docType +
         "<html>\n" +
         "<head><title>" + title + "</title></head>\n" +
         "<body bgcolor = \"#f0f0f0\">\n" );
         
      if( cookies != null ) {
         out.println("<h2> Cookies Name and Value</h2>");

         for (int i = 0; i < cookies.length; i++) {
            cookie = cookies[i];

            if((cookie.getName( )).compareTo("first_name") == 0 ) {
               cookie.setMaxAge(0);
               response.addCookie(cookie);
               out.print("Deleted cookie : " + cookie.getName( ) + "<br/>");
            }
            out.print("Name : " + cookie.getName( ) + ",  ");
            out.print("Value: " + cookie.getValue( )+" <br/>");
         }
      } else {
         out.println("<h2>No cookies founds</h2>");
      }
      out.println("</body>");
      out.println("</html>");
   }
}

Sunucu uygulamasının üzerinde derleyin DeleteCookiesve web.xml dosyasında uygun girişi oluşturun. Şimdi http: // localhost: 8080 / DeleteCookies çalıştırıldığında aşağıdaki sonuç görüntülenir -

Cookies Name and Value

Deleted cookie : first_name

Name : first_name, Value: John

Name : last_name, Value: Player

Şimdi http: // localhost: 8080 / ReadCookies'i çalıştırmayı deneyin ve aşağıdaki gibi yalnızca bir çerez gösterecektir -

Found Cookies Name and Value

Name : last_name, Value: Player

Tanımlama bilgilerinizi Internet Explorer'da manuel olarak silebilirsiniz. Araçlar menüsünden başlayın ve İnternet Seçenekleri'ni seçin. Tüm tanımlama bilgilerini silmek için Tanımlama Bilgilerini Sil'e basın.

HTTP "durumsuz" bir protokoldür, yani bir istemci bir Web sayfasını her aldığında, istemcinin Web sunucusuna ayrı bir bağlantı açması ve sunucunun otomatik olarak önceki istemci isteğinin kaydını tutmamasıdır.

Yine de web istemcisi ile web sunucusu arasında oturumu sürdürmenin üç yolu vardır -

Kurabiye

Bir web sunucusu, her web istemcisine tanımlama bilgisi olarak benzersiz bir oturum kimliği atayabilir ve istemciden gelen sonraki istekler, alınan tanımlama bilgisi kullanılarak tanınabilir.

Çoğu zaman tarayıcı bir çerezi desteklemediği için bu etkili bir yol olmayabilir, bu nedenle oturumları sürdürmek için bu prosedürü kullanmanızı önermem.

Gizli Form Alanları

Bir web sunucusu, aşağıdaki gibi benzersiz bir oturum kimliğiyle birlikte gizli bir HTML form alanı gönderebilir -

<input type = "hidden" name = "sessionid" value = "12345">

Bu giriş, form gönderildiğinde belirtilen ad ve değerin otomatik olarak GET veya POST verilerine dahil edildiği anlamına gelir. Web tarayıcısı her geri istek gönderdiğinde, farklı web tarayıcılarının kaydını tutmak için session_id değeri kullanılabilir.

Bu, oturumu takip etmenin etkili bir yolu olabilir, ancak normal (<A HREF...>) bir köprü metni bağlantısına tıklamak bir form gönderimi ile sonuçlanmaz, bu nedenle gizli form alanları da genel oturum izlemeyi destekleyemez.

URL Yeniden Yazma

Her URL'nin sonuna oturumu tanımlayan bazı ekstra veriler ekleyebilirsiniz ve sunucu bu oturum tanımlayıcısını o oturum hakkında depoladığı verilerle ilişkilendirebilir.

Örneğin, http://tutorialspoint.com/file.htm;sessionid = 12345 ile oturum tanımlayıcısı, istemciyi tanımlamak için web sunucusundan erişilebilen sessionid = 12345 olarak eklenir.

URL yeniden yazma, oturumları sürdürmenin daha iyi bir yoludur ve tarayıcılar çerezleri desteklemediğinde bile çalışır. URL'yi yeniden yazmanın dezavantajı, basit bir statik HTML sayfası durumunda bile bir oturum kimliği atamak için her URL'yi dinamik olarak oluşturmanız gerekmesidir.

HttpSession Nesnesi

Yukarıda belirtilen üç yoldan ayrı olarak, servlet, bir kullanıcıyı birden fazla sayfa isteği veya bir Web sitesi ziyareti boyunca tanımlamanın ve bu kullanıcıyla ilgili bilgileri depolamanın bir yolunu sağlayan HttpSession Arayüzü sağlar.

Sunucu uygulaması kapsayıcısı, bir HTTP istemcisi ile HTTP sunucusu arasında bir oturum oluşturmak için bu arabirimi kullanır. Oturum, kullanıcıdan birden fazla bağlantı veya sayfa talebi karşısında belirli bir süre boyunca devam eder.

Genel yöntemi çağırarak HttpSession nesnesini alırsınız getSession() HttpServletRequest'in aşağıdaki gibi -

HttpSession session = request.getSession();

İstemciye herhangi bir belge içeriği göndermeden önce request.getSession () öğesini çağırmanız gerekir . HttpSession nesnesi aracılığıyla kullanılabilen önemli yöntemlerin bir özeti:

Sr.No. Yöntem ve Açıklama
1

public Object getAttribute(String name)

Bu yöntem, bu oturumda belirtilen adla ilişkili nesneyi döndürür veya ad altında hiçbir nesne bağlı değilse null.

2

public Enumeration getAttributeNames()

Bu yöntem, bu oturuma bağlı tüm nesnelerin adlarını içeren String nesnelerinin Numaralandırılmasını döndürür.

3

public long getCreationTime()

Bu yöntem, 1 Ocak 1970 GMT gece yarısından itibaren milisaniye cinsinden ölçülen bu oturumun oluşturulduğu zamanı döndürür.

4

public String getId()

Bu yöntem, bu oturuma atanan benzersiz tanımlayıcıyı içeren bir dize döndürür.

5

public long getLastAccessedTime()

Bu yöntem, 1 Ocak 1970 GMT gece yarısından bu yana, oturumun son erişilen zamanını milisaniye biçiminde döndürür.

6

public int getMaxInactiveInterval()

Bu yöntem, sunucu uygulaması kapsayıcısının oturumu istemci erişimleri arasında açık tutacağı maksimum zaman aralığını (saniye) döndürür.

7

public void invalidate()

Bu yöntem, bu oturumu geçersiz kılar ve ona bağlı tüm nesnelerin bağlantısını kaldırır.

8

public boolean isNew(

İstemci oturumu henüz bilmiyorsa veya oturuma katılmamayı seçerse bu yöntem true döndürür.

9

public void removeAttribute(String name)

Bu yöntem, belirtilen adla bağlı nesneyi bu oturumdan kaldırır.

10

public void setAttribute(String name, Object value)

Bu yöntem, belirtilen adı kullanarak bir nesneyi bu oturuma bağlar.

11

public void setMaxInactiveInterval(int interval)

Bu yöntem, sunucu uygulaması kapsayıcısının bu oturumu geçersiz kılmasından önce istemci istekleri arasındaki süreyi saniye cinsinden belirtir.

Oturum İzleme Örneği

Bu örnek, bir oturum için oluşturma zamanını ve son erişilen zamanı bulmak için HttpSession nesnesinin nasıl kullanılacağını açıklar. Zaten mevcut değilse, yeni bir oturumu istekle ilişkilendiririz.

// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
 
// Extend HttpServlet class
public class SessionTrack extends HttpServlet {
 
   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
         
      // Create a session object if it is already not  created.
      HttpSession session = request.getSession(true);
         
      // Get session creation time.
      Date createTime = new Date(session.getCreationTime());
         
      // Get last access time of this web page.
      Date lastAccessTime = new Date(session.getLastAccessedTime());

      String title = "Welcome Back to my website";
      Integer visitCount = new Integer(0);
      String visitCountKey = new String("visitCount");
      String userIDKey = new String("userID");
      String userID = new String("ABCD");

      // Check if this is new comer on your web page.
      if (session.isNew()) {
         title = "Welcome to my website";
         session.setAttribute(userIDKey, userID);
      } else {
         visitCount = (Integer)session.getAttribute(visitCountKey);
         visitCount = visitCount + 1;
         userID = (String)session.getAttribute(userIDKey);
      }
      session.setAttribute(visitCountKey,  visitCount);

      // Set response content type
      response.setContentType("text/html");
      PrintWriter out = response.getWriter();

      String docType =
         "<!doctype html public \"-//w3c//dtd html 4.0 " +
         "transitional//en\">\n";

      out.println(docType +
         "<html>\n" +
            "<head><title>" + title + "</title></head>\n" +
            
            "<body bgcolor = \"#f0f0f0\">\n" +
               "<h1 align = \"center\">" + title + "</h1>\n" +
               "<h2 align = \"center\">Session Infomation</h2>\n" +
               "<table border = \"1\" align = \"center\">\n" +
                  
                  "<tr bgcolor = \"#949494\">\n" +
                     "  <th>Session info</th><th>value</th>
                  </tr>\n" +
                     
                  "<tr>\n" +
                     "  <td>id</td>\n" +
                     "  <td>" + session.getId() + "</td>
                  </tr>\n" +
                  
                  "<tr>\n" +
                     "  <td>Creation Time</td>\n" +
                     "  <td>" + createTime + "  </td>
                  </tr>\n" +
                  
                  "<tr>\n" +
                     "  <td>Time of Last Access</td>\n" +
                     "  <td>" + lastAccessTime + "  </td>
                  </tr>\n" +
                  
                  "<tr>\n" +
                     "  <td>User ID</td>\n" +
                     "  <td>" + userID + "  </td>
                  </tr>\n" +
                  
                  "<tr>\n" +
                     "  <td>Number of visits</td>\n" +
                     "  <td>" + visitCount + "</td>
                  </tr>\n" +
               "</table>\n" +
            "</body>
         </html>"
      );
   }
}

Yukarıdaki sunucu uygulamasını derleyin SessionTrackve web.xml dosyasında uygun girişi oluşturun. Şimdi http: // localhost: 8080 / SessionTrack çalıştırıldığında, ilk kez çalıştıracağınız zaman aşağıdaki sonucu görüntüleyecektir -

Welcome to my website

Session Infomation

Session info value
id 0AE3EC93FF44E3C525B4351B77ABB2D5
Creation Time Tue Jun 08 17:26:40 GMT+04:00 2010
Time of Last Access Tue Jun 08 17:26:40 GMT+04:00 2010
User ID ABCD
Number of visits 0

Şimdi aynı sunucu uygulamasını ikinci kez çalıştırmayı deneyin, aşağıdaki sonucu gösterecektir.

Welcome Back to my website

Session Infomation

info type value
id 0AE3EC93FF44E3C525B4351B77ABB2D5
Creation Time Tue Jun 08 17:26:40 GMT+04:00 2010
Time of Last Access Tue Jun 08 17:26:40 GMT+04:00 2010
User ID ABCD
Number of visits 1

Oturum Verilerini Silme

Bir kullanıcının oturum verileriyle işiniz bittiğinde, birkaç seçeneğiniz vardır -

  • Remove a particular attribute- Belirli bir anahtarla ilişkili değeri silmek için public void removeAttribute (Dize adı) yöntemini çağırabilirsiniz .

  • Delete the whole session- Tüm bir oturumu iptal etmek için public void invalidate () yöntemini çağırabilirsiniz .

  • Setting Session timeout- Bir oturum için zaman aşımını ayrı ayrı ayarlamak için genel void setMaxInactiveInterval (int interval) yöntemini çağırabilirsiniz .

  • Log the user out - Servlet 2.4'ü destekleyen sunucuları arayabilirsiniz logout istemcinin Web sunucusundaki oturumunu kapatmak ve tüm kullanıcılara ait tüm oturumları geçersiz kılmak için.

  • web.xml Configuration - Tomcat kullanıyorsanız yukarıda belirtilen yöntemlerin dışında oturum zaman aşımını web.xml dosyasında aşağıdaki gibi yapılandırabilirsiniz.

<session-config>
   <session-timeout>15</session-timeout>
</session-config>

Zaman aşımı dakika olarak ifade edilir ve Tomcat'te 30 dakika olan varsayılan zaman aşımını geçersiz kılar.

Sunucu uygulamasındaki getMaxInactiveInterval () yöntemi, saniye cinsinden bu oturum için zaman aşımı süresini döndürür. Dolayısıyla, oturumunuz web.xml'de 15 dakika yapılandırılırsa, getMaxInactiveInterval () 900 döndürür.

Bu eğitim, JDBC uygulamasının nasıl çalıştığını anladığınızı varsayar. Bir sunucu uygulaması aracılığıyla veritabanı erişimine başlamadan önce, bir veritabanıyla birlikte uygun JDBC ortamı kurulumuna sahip olduğunuzdan emin olun.

JDBC ve ortam kurulumunu kullanarak veritabanına nasıl erişileceğine ilişkin daha fazla ayrıntı için, JDBC Eğitimimizi inceleyebilirsiniz .

Temel kavramla başlamak için, basit bir tablo oluşturalım ve bu tabloda aşağıdaki gibi birkaç kayıt oluşturalım:

Tablo Oluştur

Oluşturmak için Employees TEST veritabanındaki tablo için aşağıdaki adımları kullanın -

Aşama 1

Bir Command Prompt ve aşağıdaki gibi kurulum dizinine geçin -

C:\>
C:\>cd Program Files\MySQL\bin
C:\Program Files\MySQL\bin>

Adım 2

Veritabanına aşağıdaki şekilde giriş yapın

C:\Program Files\MySQL\bin>mysql -u root -p
Enter password: ********
mysql>

Aşama 3

Tabloyu oluşturun Employee içinde TEST aşağıdaki gibi veritabanı -

mysql> use TEST;
mysql> create table Employees (
   id int not null,
   age int not null,
   first varchar (255),
   last varchar (255)
);
Query OK, 0 rows affected (0.08 sec)
mysql>

Veri Kayıtları Oluşturun

Son olarak Employee tablosunda aşağıdaki gibi birkaç kayıt oluşturursunuz -

mysql> INSERT INTO Employees VALUES (100, 18, 'Zara', 'Ali');
Query OK, 1 row affected (0.05 sec)
 
mysql> INSERT INTO Employees VALUES (101, 25, 'Mahnaz', 'Fatma');
Query OK, 1 row affected (0.00 sec)
 
mysql> INSERT INTO Employees VALUES (102, 30, 'Zaid', 'Khan');
Query OK, 1 row affected (0.00 sec)
 
mysql> INSERT INTO Employees VALUES (103, 28, 'Sumit', 'Mittal');
Query OK, 1 row affected (0.00 sec)
 
mysql>

Bir Veritabanına Erişim

İşte Servlet kullanarak TEST veritabanına nasıl erişileceğini gösteren bir örnek.

// Loading required libraries
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;
 
public class DatabaseAccess extends HttpServlet{

   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
   
      // JDBC driver name and database URL
      static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";  
      static final String DB_URL="jdbc:mysql://localhost/TEST";

      //  Database credentials
      static final String USER = "root";
      static final String PASS = "password";

      // Set response content type
      response.setContentType("text/html");
      PrintWriter out = response.getWriter();
      String title = "Database Result";
      
      String docType =
         "<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
      
      out.println(docType +
         "<html>\n" +
         "<head><title>" + title + "</title></head>\n" +
         "<body bgcolor = \"#f0f0f0\">\n" +
         "<h1 align = \"center\">" + title + "</h1>\n");
      try {
         // Register JDBC driver
         Class.forName("com.mysql.jdbc.Driver");

         // Open a connection
         Connection conn = DriverManager.getConnection(DB_URL, USER, PASS);

         // Execute SQL query
         Statement stmt = conn.createStatement();
         String sql;
         sql = "SELECT id, first, last, age FROM Employees";
         ResultSet rs = stmt.executeQuery(sql);

         // Extract data from result set
         while(rs.next()){
            //Retrieve by column name
            int id  = rs.getInt("id");
            int age = rs.getInt("age");
            String first = rs.getString("first");
            String last = rs.getString("last");

            //Display values
            out.println("ID: " + id + "<br>");
            out.println(", Age: " + age + "<br>");
            out.println(", First: " + first + "<br>");
            out.println(", Last: " + last + "<br>");
         }
         out.println("</body></html>");

         // Clean-up environment
         rs.close();
         stmt.close();
         conn.close();
      } catch(SQLException se) {
         //Handle errors for JDBC
         se.printStackTrace();
      } catch(Exception e) {
         //Handle errors for Class.forName
         e.printStackTrace();
      } finally {
         //finally block used to close resources
         try {
            if(stmt!=null)
               stmt.close();
         } catch(SQLException se2) {
         } // nothing we can do
         try {
            if(conn!=null)
            conn.close();
         } catch(SQLException se) {
            se.printStackTrace();
         } //end finally try
      } //end try
   }
}

Şimdi yukarıdaki servlet'i derleyelim ve web.xml'de aşağıdaki girdileri oluşturalım.

....
<servlet>
   <servlet-name>DatabaseAccess</servlet-name>
   <servlet-class>DatabaseAccess</servlet-class>
</servlet>
 
<servlet-mapping>
   <servlet-name>DatabaseAccess</servlet-name>
   <url-pattern>/DatabaseAccess</url-pattern>
</servlet-mapping>
....

Şimdi bu sunucu uygulamasını http: // localhost: 8080 / DatabaseAccess URL'sini kullanarak çağırın ve aşağıdaki yanıtı gösterir -

Database Result

ID: 100, Age: 18, First: Zara, Last: Ali ID: 101, Age: 25, First: Mahnaz, Last: Fatma ID: 102, Age: 30, First: Zaid, Last: Khan ID: 103, Age: 28, First: Sumit, Last: Mittal

Bir Servlet, kullanıcıların sunucuya dosya yüklemesine izin vermek için bir HTML form etiketiyle birlikte kullanılabilir. Yüklenen bir dosya, bir metin dosyası veya görüntü dosyası veya herhangi bir belge olabilir.

Dosya Yükleme Formu Oluşturma

Aşağıdaki HTM kodu bir yükleyici formu oluşturur. Dikkat edilmesi gereken önemli noktalar aşağıdadır:

  • Form method özellik şu şekilde ayarlanmalıdır: POST yöntem ve GET yöntemi kullanılamaz

  • Form enctype özellik şu şekilde ayarlanmalıdır: multipart/form-data.

  • Form actionözniteliği, arka uç sunucusunda dosya yüklemeyi işleyecek bir sunucu uygulaması dosyasına ayarlanmalıdır. Aşağıdaki örnek kullanıyorUploadServlet dosya yüklemek için servlet.

  • Tek bir dosya yüklemek için, type = "file" niteliğine sahip tek bir <input ... /> etiketi kullanmalısınız. Birden çok dosyanın yüklenmesine izin vermek için, ad özelliği için farklı değerlere sahip birden fazla giriş etiketi ekleyin. Tarayıcı, her biriyle bir Göz At düğmesini ilişkilendirir.

<html>
   <head>
      <title>File Uploading Form</title>
   </head>
   
   <body>
      <h3>File Upload:</h3>
      Select a file to upload: <br />
      <form action = "UploadServlet" method = "post" enctype = "multipart/form-data">
         <input type = "file" name = "file" size = "50" />
         <br />
         <input type = "submit" value = "Upload File" />
      </form>
   </body>
</html>

Bu, yerel bilgisayardan bir dosya seçmeye izin veren aşağıdaki sonucu gösterecektir ve kullanıcı "Dosya Yükle" ye tıkladığında, form seçilen dosyayla birlikte gönderilecektir -

File Upload: 
Select a file to upload: 


NOTE: This is just dummy form and would not work.

Arka Uç Servlet Yazma

Servlet aşağıdadır UploadServletbu, yüklenen dosyanın kabul edilmesini ve <Tomcat-installation-directory> / webapps / data dizininde saklanmasını sağlar. Bu dizin adı, örneğin bir harici yapılandırma kullanılarak da eklenebilir.context-param web.xml'deki öğe aşağıdaki gibidir -

<web-app>
   ....
   <context-param> 
      <description>Location to store uploaded file</description> 
      <param-name>file-upload</param-name> 
      <param-value>
         c:\apache-tomcat-5.5.29\webapps\data\
     </param-value> 
   </context-param>
   ....
</web-app>

Aşağıda, bir seferde birden fazla dosya yüklemesini gerçekleştirebilen UploadServlet için kaynak kodu verilmiştir. Devam etmeden önce aşağıdakilerden emin olmalısınız -

  • Aşağıdaki örnek, FileUpload'a bağlıdır, bu nedenle en son sürümüne sahip olduğunuzdan emin olun. commons-fileupload.x.x.jarsınıf yolunuzdaki dosya. Buradan indirebilirsinizhttps://commons.apache.org/fileupload/.

  • FileUpload, Commons IO'ya bağlıdır; bu nedenle, commons-io-x.x.jarsınıf yolunuzdaki dosya. Buradan indirebilirsinizhttps://commons.apache.org/io/.

  • Aşağıdaki örneği test ederken, maxFileSize boyutundan daha küçük bir dosya yüklemelisiniz, aksi takdirde dosya yüklenmez.

  • Önceden c: \ temp ve c: \ apache-tomcat8.0.28 \ webapps \ data dizinlerini oluşturduğunuzdan emin olun.

// Import required java libraries
import java.io.*;
import java.util.*;
 
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.output.*;

public class UploadServlet extends HttpServlet {
   
   private boolean isMultipart;
   private String filePath;
   private int maxFileSize = 50 * 1024;
   private int maxMemSize = 4 * 1024;
   private File file ;

   public void init( ){
      // Get the file location where it would be stored.
      filePath = getServletContext().getInitParameter("file-upload"); 
   }
   
   public void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, java.io.IOException {
   
      // Check that we have a file upload request
      isMultipart = ServletFileUpload.isMultipartContent(request);
      response.setContentType("text/html");
      java.io.PrintWriter out = response.getWriter( );
   
      if( !isMultipart ) {
         out.println("<html>");
         out.println("<head>");
         out.println("<title>Servlet upload</title>");  
         out.println("</head>");
         out.println("<body>");
         out.println("<p>No file uploaded</p>"); 
         out.println("</body>");
         out.println("</html>");
         return;
      }
  
      DiskFileItemFactory factory = new DiskFileItemFactory();
   
      // maximum size that will be stored in memory
      factory.setSizeThreshold(maxMemSize);
   
      // Location to save data that is larger than maxMemSize.
      factory.setRepository(new File("c:\\temp"));

      // Create a new file upload handler
      ServletFileUpload upload = new ServletFileUpload(factory);
   
      // maximum file size to be uploaded.
      upload.setSizeMax( maxFileSize );

      try { 
         // Parse the request to get file items.
         List fileItems = upload.parseRequest(request);
	
         // Process the uploaded file items
         Iterator i = fileItems.iterator();

         out.println("<html>");
         out.println("<head>");
         out.println("<title>Servlet upload</title>");  
         out.println("</head>");
         out.println("<body>");
   
         while ( i.hasNext () ) {
            FileItem fi = (FileItem)i.next();
            if ( !fi.isFormField () ) {
               // Get the uploaded file parameters
               String fieldName = fi.getFieldName();
               String fileName = fi.getName();
               String contentType = fi.getContentType();
               boolean isInMemory = fi.isInMemory();
               long sizeInBytes = fi.getSize();
            
               // Write the file
               if( fileName.lastIndexOf("\\") >= 0 ) {
                  file = new File( filePath + fileName.substring( fileName.lastIndexOf("\\"))) ;
               } else {
                  file = new File( filePath + fileName.substring(fileName.lastIndexOf("\\")+1)) ;
               }
               fi.write( file ) ;
               out.println("Uploaded Filename: " + fileName + "<br>");
            }
         }
         out.println("</body>");
         out.println("</html>");
         } catch(Exception ex) {
            System.out.println(ex);
         }
      }
      
      public void doGet(HttpServletRequest request, HttpServletResponse response)
         throws ServletException, java.io.IOException {

         throw new ServletException("GET method used with " +
            getClass( ).getName( )+": POST method required.");
      }
   }
}

Derleme ve Çalıştırma Sunucusu

Yukarıdaki sunucu uygulaması UploadServlet'i derleyin ve aşağıdaki gibi web.xml dosyasında gerekli girişi oluşturun.

<servlet>
   <servlet-name>UploadServlet</servlet-name>
   <servlet-class>UploadServlet</servlet-class>
</servlet>

<servlet-mapping>
   <servlet-name>UploadServlet</servlet-name>
   <url-pattern>/UploadServlet</url-pattern>
</servlet-mapping>

Şimdi, yukarıda oluşturduğunuz HTML formunu kullanarak dosyaları yüklemeyi deneyin. Http: // localhost: 8080 / UploadFile.htm'yi denediğinizde, yerel makinenizden herhangi bir dosya yüklemenize yardımcı olacak aşağıdaki sonucu görüntüleyecektir.

File Upload: 

Select a file to upload:


Servlet komut dosyanız düzgün çalışıyorsa, dosyanız c: \ apache-tomcat8.0.28 \ webapps \ data \ dizinine yüklenmelidir.

Servlet kullanmanın en önemli avantajlarından biri, çekirdek Java'da bulunan yöntemlerin çoğunu kullanabilmenizdir. Bu eğitim, size sağlanan Java aracılığıylaDate mevcut sınıf java.util paket, bu sınıf geçerli tarih ve saati kapsar.

Date sınıfı iki yapıcıyı destekler. İlk kurucu, nesneyi geçerli tarih ve saatle başlatır.

Date( )

Aşağıdaki kurucu, 1 Ocak 1970 gece yarısından bu yana geçen milisaniye sayısına eşit olan bir bağımsız değişkeni kabul eder.

Date(long millisec)

Bir Date nesnesine sahip olduğunuzda, tarihlerle oynamak için aşağıdaki destek yöntemlerinden herhangi birini çağırabilirsiniz -

Sr.No. Yöntemler ve Açıklama
1

boolean after(Date date)

Çağrılan Date nesnesi tarihe göre belirtilenden daha sonraki bir tarih içeriyorsa true, aksi takdirde false döndürür.

2

boolean before(Date date)

Çağrılan Date nesnesi, tarihe göre belirtilenden daha eski bir tarih içeriyorsa true, aksi takdirde false döndürür.

3

Object clone( )

Çağrılan Date nesnesini çoğaltır.

4

int compareTo(Date date)

Çağrılan nesnenin değerini tarihin değeriyle karşılaştırır. Değerler eşitse 0 döndürür. Çağrılan nesne tarihten önceyse negatif bir değer döndürür. Çağrılan nesne tarihten sonraysa pozitif bir değer döndürür.

5

int compareTo(Object obj)

Obj, Date sınıfındaysa, ComparTo (Date) ile aynı şekilde çalışır. Aksi takdirde, bir ClassCastException oluşturur.

6

boolean equals(Object date)

Çağrılan Date nesnesi, tarihe göre belirtilenle aynı saat ve tarihi içeriyorsa true, aksi takdirde false döndürür.

7

long getTime( )

1 Ocak 1970'ten bu yana geçen milisaniye sayısını döndürür.

8

int hashCode( )

Çağrılan nesne için bir karma kod döndürür.

9

void setTime(long time)

Saati ve tarihi, 1 Ocak 1970 gece yarısından milisaniye cinsinden geçen zamanı temsil eden saate göre belirtilen şekilde ayarlar.

10

String toString( )

Çağrılan Date nesnesini bir dizeye dönüştürür ve sonucu döndürür.

Güncel Tarih ve Saati Alma

Java Servlet'te güncel tarih ve saati almak çok kolaydır. Geçerli tarih ve saati aşağıdaki gibi yazdırmak için toString () yöntemiyle basit bir Date nesnesi kullanabilirsiniz -

// Import required java libraries
import java.io.*;
import java.util.Date;
import javax.servlet.*;
import javax.servlet.http.*;
 
// Extend HttpServlet class
public class CurrentDate extends HttpServlet {
 
   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      
      // Set response content type
      response.setContentType("text/html");
 
      PrintWriter out = response.getWriter();
      String title = "Display Current Date & Time";
      Date date = new Date();
      String docType = "<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
      
      out.println(docType +
         "<html>\n" +
            "<head><title>" + title + "</title></head>\n" +
            "<body bgcolor = \"#f0f0f0\">\n" +
               "<h1 align = \"center\">" + title + "</h1>\n" +
               "<h2 align = \"center\">" + date.toString() + "</h2>\n" +
            "</body>
         </html>"
      );
   }
}

Şimdi yukarıdaki servlet'i derleyelim ve web.xml'de uygun girdiler oluşturalım ve sonra bu sunuculeti http: // localhost: 8080 / CurrentDate URL'sini kullanarak çağıralım. Bu, aşağıdaki sonucu verecektir -

Display Current Date & Time

Mon Jun 21 21:46:49 GMT+04:00 2010

Http: // localhost: 8080 / CurrentDate URL'sini yenilemeyi deneyin ve her yenilediğinizde saniyeler içinde fark göreceksiniz.

Tarih Karşılaştırması

Yukarıda bahsettiğim gibi, Servlet'inizde mevcut tüm Java yöntemlerini kullanabilirsiniz. İki tarihi karşılaştırmanız gerekirse, yöntemler aşağıdadır -

  • Her iki nesne için 1 Ocak 1970 gece yarısından bu yana geçen milisaniye sayısını elde etmek ve ardından bu iki değeri karşılaştırmak için getTime () işlevini kullanabilirsiniz.

  • Yöntemleri önce (), sonra () ve eşittir () kullanabilirsiniz. Ayın 12'si 18'inden önce geldiğinden, örneğin, yeni Tarih (99, 2, 12) .before (yeni Tarih (99, 2, 18)) true değerini döndürür.

  • Comparable arabirim tarafından tanımlanan ve Date ile uygulanan CompareTo () yöntemini kullanabilirsiniz.

SimpleDateFormat kullanarak Tarih Biçimlendirme

SimpleDateFormat, tarihleri ​​yerel duyarlı bir şekilde biçimlendirmek ve ayrıştırmak için somut bir sınıftır. SimpleDateFormat, tarih-saat biçimlendirmesi için herhangi bir kullanıcı tanımlı kalıp seçerek başlamanıza olanak tanır.

Yukarıdaki örneği aşağıdaki gibi değiştirelim -

// Import required java libraries
import java.io.*;
import java.text.*;
import java.util.Date;
import javax.servlet.*;
import javax.servlet.http.*;
 
// Extend HttpServlet class
public class CurrentDate extends HttpServlet {
 
   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      
      // Set response content type
      response.setContentType("text/html");
 
      PrintWriter out = response.getWriter();
      String title = "Display Current Date & Time";
      Date dNow = new Date( );
      SimpleDateFormat ft = new SimpleDateFormat ("E yyyy.MM.dd 'at' hh:mm:ss a zzz");
      String docType = "<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
      
      out.println(docType +
         "<html>\n" +
            "<head><title>" + title + "</title></head>\n" +
            "<body bgcolor = \"#f0f0f0\">\n" +
               "<h1 align = \"center\">" + title + "</h1>\n" +
               "<h2 align = \"center\">" + ft.format(dNow) + "</h2>\n" +
            "</body>
         </html>"
      );
   }
}

Yukarıdaki sunucu uygulamasını bir kez daha derleyin ve sonra bu sunucu uygulamasını http: // localhost: 8080 / CurrentDate URL'sini kullanarak çağırın. Bu, aşağıdaki sonucu verecektir -

Display Current Date & Time

Mon 2010.06.21 at 10:06:44 PM GMT+04:00

Basit Tarih Biçimi Biçim Kodları

Saat biçimini belirtmek için bir zaman örüntü dizesi kullanın. Bu modelde, tüm ASCII harfleri aşağıdaki gibi tanımlanan model harfleri olarak ayrılmıştır -

Karakter Açıklama Misal
G Çağ belirleyici AD
y Dört basamaklı yıl 2001
M Yıldaki ay Temmuz veya 07
d Aydaki gün 10
h ÖÖ / ÖS olarak saat (1 ~ 12) 12
H Gün içindeki saat (0 ~ 23) 22
m Saat cinsinden dakika 30
s Dakikada ikinci 55
S Milisaniye 234
E Hafta içi gün Salı
D Yıldaki gün 360
F Ay içinde haftanın günü 2 (Temmuz'da ikinci Çarşamba)
w Yıldaki hafta 40
W Aydaki hafta 1
a AM / PM işaretçisi ÖS
k Gün içindeki saat (1 ~ 24) 24
K ÖÖ / ÖS olarak saat (0 ~ 11) 10
z Saat dilimi Doğu standart zamanı
' Metin için kaçış Sınırlayıcı
" Tek alıntı '

Tarihi değiştirmek için sürekli kullanılabilir yöntemlerin tam listesi için standart Java belgelerine bakabilirsiniz.

Sayfa yeniden yönlendirme, istemcinin talep edilenden farklı yeni bir konuma gönderildiği bir tekniktir. Sayfa yeniden yönlendirme genellikle bir belge yeni bir konuma taşındığında veya yük dengeleme nedeniyle olabilir.

Bir isteği başka bir sayfaya yönlendirmenin en basit yolu, yöntemi kullanmaktır sendRedirect()yanıt nesnesinin. Bu yöntemin imzası aşağıdadır -

public void HttpServletResponse.sendRedirect(String location) 
throws IOException

Bu yöntem, yanıtı durum kodu ve yeni sayfa konumu ile birlikte tarayıcıya geri gönderir. Aynısını elde etmek için setStatus () ve setHeader () yöntemlerini birlikte de kullanabilirsiniz -

.... 
String site = "http://www.newpage.com" ; 
response.setStatus(response.SC_MOVED_TEMPORARILY); 
response.setHeader("Location", site);  
....

Misal

Bu örnek, bir sunucu uygulamasının başka bir konuma sayfa yeniden yönlendirmesini nasıl gerçekleştirdiğini gösterir -

import java.io.*;
import java.sql.Date;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class PageRedirect extends HttpServlet {
    
   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {

      // Set response content type
      response.setContentType("text/html");

      // New location to be redirected
      String site = new String("http://www.photofuntoos.com");

      response.setStatus(response.SC_MOVED_TEMPORARILY);
      response.setHeader("Location", site);    
   }
}

Şimdi yukarıdaki servlet'i derleyelim ve web.xml'de aşağıdaki girdileri oluşturalım.

....
<servlet>
   <servlet-name>PageRedirect</servlet-name>
   <servlet-class>PageRedirect</servlet-class>
</servlet>

<servlet-mapping>
   <servlet-name>PageRedirect</servlet-name>
   <url-pattern>/PageRedirect</url-pattern>
</servlet-mapping>
....

Şimdi bu sunucu uygulamasını http: // localhost: 8080 / PageRedirect URL'sini kullanarak çağırın. Bu sizi http://www.photofuntoos.com URL'sine yönlendirecektir.

Web Sayfası için Hit Counter

Çoğu zaman, web sitenizin belirli bir sayfasındaki toplam tıklama sayısını bilmek ilginizi çeker. Bu isabetleri bir sunucu uygulaması kullanarak saymak çok kolaydır çünkü bir sunucu uygulamasının yaşam döngüsü içinde çalıştığı konteyner tarafından kontrol edilir.

Aşağıda, Servlet Yaşam Döngüsüne dayanan basit bir sayfa isabet sayacı uygulamak için atılması gereken adımlar verilmiştir -

  • İnit () yönteminde global bir değişkeni başlatın.

  • DoGet () veya doPost () yöntemi her çağrıldığında global değişkeni artırın.

  • Gerekirse, destroy () yönteminde global değişkenin değerini saklamak için bir veritabanı tablosu kullanabilirsiniz. Bu değer, sunucu uygulaması bir dahaki sefere başlatılacağı zaman init () yöntemi içinde okunabilir. Bu adım isteğe bağlıdır.

  • Bir oturumda yalnızca benzersiz sayfa ziyaretlerini saymak istiyorsanız, o oturumda aynı sayfanın zaten vurulmuş olup olmadığını kontrol etmek için isNew () yöntemini kullanabilirsiniz. Bu adım isteğe bağlıdır.

  • Web sitenizdeki toplam tıklama sayısını göstermek için global sayacın değerini görüntüleyebilirsiniz. Bu adım da isteğe bağlıdır.

Burada web kapsayıcısının yeniden başlatılmayacağını varsayıyorum. Yeniden başlatılırsa veya sunucu uygulaması yok edilirse, isabet sayacı sıfırlanacaktır.

Misal

Bu örnek, basit bir sayfa isabet sayacının nasıl uygulanacağını gösterir -

import java.io.*;
import java.sql.Date;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class PageHitCounter extends HttpServlet {

   private int hitCount; 

   public void init() { 
      // Reset hit counter.
      hitCount = 0;
   } 

   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {

      // Set response content type
      response.setContentType("text/html");

      // This method executes whenever the servlet is hit 
      // increment hitCount 
      hitCount++; 
      PrintWriter out = response.getWriter();
      String title = "Total Number of Hits";
      String docType = "<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
      
      out.println(docType +
         "<html>\n" +
            "<head><title>" + title + "</title></head>\n" +
            "<body bgcolor = \"#f0f0f0\">\n" +
               "<h1 align = \"center\">" + title + "</h1>\n" +
               "<h2 align = \"center\">" + hitCount + "</h2>\n" +
            "</body>
         </html>"
      );
   }
   
   public void destroy() { 
      // This is optional step but if you like you
      // can write hitCount value in your database.
   } 
}

Şimdi yukarıdaki servlet'i derleyelim ve web.xml'de aşağıdaki girdileri oluşturalım.

<servlet>
   <servlet-name>PageHitCounter</servlet-name>
   <servlet-class>PageHitCounter</servlet-class>
</servlet>

<servlet-mapping>
   <servlet-name>PageHitCounter</servlet-name>
   <url-pattern>/PageHitCounter</url-pattern>
</servlet-mapping>
....

Şimdi bu sunucu uygulamasını http: // localhost: 8080 / PageHitCounter URL'sini kullanarak çağırın. Bu, bu sayfa her yenilendiğinde sayacı bir artıracak ve şu sonucu gösterecektir -

Total Number of Hits

6

Hit Counter for a Website:

Çoğu zaman web sitenizin tamamındaki toplam ziyaret sayısını bilmek ilginizi çeker. Bu Servlet'te de çok basit ve bunu filtreler kullanarak başarabiliriz.

Aşağıda, Filtre Ömrü Döngüsüne dayanan basit bir web sitesi isabet sayacı uygulamak için atılması gereken adımlar verilmiştir -

  • Bir filtrenin init () yönteminde genel bir değişkeni başlatın.

  • DoFilter yöntemi her çağrıldığında global değişkeni artırın.

  • Gerekirse, destroy () filtre yönteminde global değişkenin değerini saklamak için bir veritabanı tablosu kullanabilirsiniz. Bu değer, filtre bir dahaki sefere başlatıldığında init () yöntemi içinde okunabilir. Bu adım isteğe bağlıdır.

Burada web kapsayıcısının yeniden başlatılmayacağını varsayıyorum. Yeniden başlatılırsa veya sunucu uygulaması yok edilirse, isabet sayacı sıfırlanacaktır.

Misal

Bu örnek, basit bir web sitesi isabet sayacının nasıl uygulanacağını gösterir -

// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;

public class SiteHitCounter implements Filter {

   private int hitCount; 

   public void  init(FilterConfig config) throws ServletException {
      // Reset hit counter.
      hitCount = 0;
   }

   public void  doFilter(ServletRequest request, ServletResponse response, FilterChain chain) 
      throws java.io.IOException, ServletException {

      // increase counter by one
      hitCount++;

      // Print the counter.
      System.out.println("Site visits count :"+ hitCount );

      // Pass request back down the filter chain
      chain.doFilter(request,response);
   }
   
   public void destroy() { 
      // This is optional step but if you like you
      // can write hitCount value in your database.
   } 
}

Şimdi yukarıdaki sunucu uygulamasını derleyip web.xml'de aşağıdaki girdileri oluşturalım.

....
<filter>
   <filter-name>SiteHitCounter</filter-name>
   <filter-class>SiteHitCounter</filter-class>
</filter>

<filter-mapping>
   <filter-name>SiteHitCounter</filter-name>
   <url-pattern>/*</url-pattern>
</filter-mapping>
....

Şimdi URL http: // localhost: 8080 / gibi herhangi bir URL'yi çağırın. Bu, herhangi bir sayfa her isabet aldığında sayacı bir artırır ve günlükte aşağıdaki mesajı görüntüler:

Site visits count : 1
Site visits count : 2
Site visits count : 3
Site visits count : 4
Site visits count : 5
..................

Canlı oyun skorunu veya borsa durumunu veya döviz kuru oranını gösteren bir web sayfasını düşünün. Tüm bu tür sayfalar için, tarayıcınızda yenile veya yeniden yükle düğmesini kullanarak web sayfanızı düzenli olarak yenilemeniz gerekir.

Java Servlet, belirli bir aralıktan sonra otomatik olarak yenilenecek şekilde bir web sayfası oluşturabileceğiniz bir mekanizma sağlayarak bu işi kolaylaştırır.

Bir web sayfasını yenilemenin en basit yolu yöntem kullanmaktır setIntHeader()yanıt nesnesinin. Bu yöntemin imzası aşağıdadır -

public void setIntHeader(String header, int headerValue)

Bu yöntem, saniye cinsinden zaman aralığını gösteren bir tamsayı değeriyle birlikte tarayıcıya "Refresh" başlığını geri gönderir.

Otomatik Sayfa Yenileme Örneği

Bu örnek, bir sunucu uygulamasının otomatik sayfa yenilemesini kullanarak nasıl gerçekleştirdiğini gösterir. setIntHeader() ayarlama yöntemi Refresh başlık.

// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
 
// Extend HttpServlet class
public class Refresh extends HttpServlet {
 
   // Method to handle GET method request.
   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      
      // Set refresh, autoload time as 5 seconds
      response.setIntHeader("Refresh", 5);
 
      // Set response content type
      response.setContentType("text/html");
 
      // Get current time
      Calendar calendar = new GregorianCalendar();
      String am_pm;
      int hour = calendar.get(Calendar.HOUR);
      int minute = calendar.get(Calendar.MINUTE);
      int second = calendar.get(Calendar.SECOND);
      
      if(calendar.get(Calendar.AM_PM) == 0)
        am_pm = "AM";
      else
        am_pm = "PM";
 
      String CT = hour+":"+ minute +":"+ second +" "+ am_pm;
    
      PrintWriter out = response.getWriter();
      String title = "Auto Page Refresh using Servlet";
      String docType =
         "<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
      
      out.println(docType +
         "<html>\n" +
         "<head><title>" + title + "</title></head>\n"+
         "<body bgcolor = \"#f0f0f0\">\n" +
         "<h1 align = \"center\">" + title + "</h1>\n" +
         "<p>Current Time is: " + CT + "</p>\n"
      );
   }
   
   // Method to handle POST method request.
   public void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      
      doGet(request, response);
   }
}

Şimdi yukarıdaki sunucu uygulamasını derleyip web.xml'de aşağıdaki girdileri oluşturalım.

....
 <servlet>
     <servlet-name>Refresh</servlet-name>
     <servlet-class>Refresh</servlet-class>
 </servlet>
 
 <servlet-mapping>
     <servlet-name>Refresh</servlet-name>
     <url-pattern>/Refresh</url-pattern>
 </servlet-mapping>
....

Şimdi bu sunucu uygulamasını http: // localhost: 8080 / Yenileme URL'sini kullanarak çağırın ve her 5 saniyede bir aşağıdaki gibi geçerli sistem zamanını gösterir. Yalnızca sunucu uygulamasını çalıştırın ve sonucu görmek için bekleyin -

Auto Page Refresh using Servlet

Current Time is: 9:44:50 PM

Servlet'inizi kullanarak bir e-posta göndermek yeterince basittir, ancak başlamak için sahip olmanız gerekir JavaMail API ve Java Activation Framework (JAF) makinenize kurulur.

  • JavaMail'in en son sürümünü (Sürüm 1.2) Java'nın standart web sitesinden indirebilirsiniz .

  • JAF'ın en son sürümünü (Sürüm 1.1.1) Java'nın standart web sitesinden indirebilirsiniz .

Bu dosyaları indirin ve açın, yeni oluşturulan üst düzey dizinlerde her iki uygulama için bir dizi jar dosyası bulacaksınız. Eklemeniz gerekiyormail.jar ve activation.jar CLASSPATH dosyanızdaki dosyalar.

Basit Bir E-posta Gönderin

İşte makinenizden basit bir e-posta göndermenin bir örneği. Burada sizinlocalhostinternete bağlı ve bir e-posta gönderebilecek kadar yetenekli. Aynı zamanda Java E-posta API paketi ve JAF paketindeki tüm jar dosyalarının CLASSPATH'da mevcut olduğundan emin olun.

// File Name SendEmail.java
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
 
public class SendEmail extends HttpServlet {

   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      
      // Recipient's email ID needs to be mentioned.
      String to = "[email protected]";
 
      // Sender's email ID needs to be mentioned
      String from = "[email protected]";
 
      // Assuming you are sending email from localhost
      String host = "localhost";
 
      // Get system properties
      Properties properties = System.getProperties();
 
      // Setup mail server
      properties.setProperty("mail.smtp.host", host);
 
      // Get the default Session object.
      Session session = Session.getDefaultInstance(properties);
      
      // Set response content type
      response.setContentType("text/html");
      PrintWriter out = response.getWriter();

      try {
         // Create a default MimeMessage object.
         MimeMessage message = new MimeMessage(session);
         
         // Set From: header field of the header.
         message.setFrom(new InternetAddress(from));
         
         // Set To: header field of the header.
         message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
         
         // Set Subject: header field
         message.setSubject("This is the Subject Line!");
         
         // Now set the actual message
         message.setText("This is actual message");
         
         // Send message
         Transport.send(message);
         String title = "Send Email";
         String res = "Sent message successfully....";
         String docType =
            "<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
         
         out.println(docType +
            "<html>\n" +
               "<head><title>" + title + "</title></head>\n" +
               "<body bgcolor = \"#f0f0f0\">\n" +
                  "<h1 align = \"center\">" + title + "</h1>\n" +
                  "<p align = \"center\">" + res + "</p>\n" +
               "</body>
            </html>"
         );
      } catch (MessagingException mex) {
         mex.printStackTrace();
      }
   }
}

Şimdi yukarıdaki sunucu uygulamasını derleyip web.xml'de aşağıdaki girdileri oluşturalım.

....
 <servlet>
   <servlet-name>SendEmail</servlet-name>
   <servlet-class>SendEmail</servlet-class>
</servlet>
 
<servlet-mapping>
   <servlet-name>SendEmail</servlet-name>
   <url-pattern>/SendEmail</url-pattern>
</servlet-mapping>
....

Şimdi bu sunucu uygulamasını http: // localhost: 8080 / SendEmail URL'sini kullanarak arayın; bu, verilen e-posta kimliği [email protected]'a bir e-posta gönderecek ve aşağıdaki yanıtı görüntüleyecektir -

Send Email

Sent message successfully....

Birden fazla alıcıya bir e-posta göndermek istiyorsanız, birden çok e-posta kimliğini belirtmek için aşağıdaki yöntemler kullanılacaktır -

void addRecipients(Message.RecipientType type, Address[] addresses)
throws MessagingException

İşte parametrelerin açıklaması -

  • type- Bu TO, CC veya BCC olarak ayarlanacaktır. Burada CC, Carbon Copy'yi ve BCC, Black Carbon Copy'yi temsil eder. Örnek Message.RecipientType.TO

  • addresses- Bu, e-posta kimliği dizisidir. E-posta kimliklerini belirlerken InternetAddress () yöntemini kullanmanız gerekir.

HTML E-posta Gönderin

İşte makinenizden bir HTML e-postası göndermenin bir örneği. Burada sizinlocalhostinternete bağlı ve bir e-posta gönderebilecek kadar yetenekli. Aynı zamanda, Java E-posta API paketi ve JAF paketindeki tüm jar dosyalarının CLASSPATH'da mevcut olduğundan emin olun.

Bu örnek öncekine çok benzer, ancak burada, mesaja HTML içeriğinin dahil edildiğini belirtmek için ikinci argümanı "text / html" olan içeriği ayarlamak için setContent () yöntemini kullanıyoruz.

Bu örneği kullanarak, istediğiniz kadar büyük HTML içeriği gönderebilirsiniz.

// File Name SendEmail.java
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
 
public class SendEmail extends HttpServlet {
    
   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      
      // Recipient's email ID needs to be mentioned.
      String to = "[email protected]";
 
      // Sender's email ID needs to be mentioned
      String from = "[email protected]";
 
      // Assuming you are sending email from localhost
      String host = "localhost";
 
      // Get system properties
      Properties properties = System.getProperties();
 
      // Setup mail server
      properties.setProperty("mail.smtp.host", host);
 
      // Get the default Session object.
      Session session = Session.getDefaultInstance(properties);
      
      // Set response content type
      response.setContentType("text/html");
      PrintWriter out = response.getWriter();

      try {
         
         // Create a default MimeMessage object.
         MimeMessage message = new MimeMessage(session);
         
         // Set From: header field of the header.
         message.setFrom(new InternetAddress(from));
         
         // Set To: header field of the header.
         message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
         // Set Subject: header field
         message.setSubject("This is the Subject Line!");

         // Send the actual HTML message, as big as you like
         message.setContent("<h1>This is actual message</h1>", "text/html" );
         
         // Send message
         Transport.send(message);
         String title = "Send Email";
         String res = "Sent message successfully....";
         String docType =
         "<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
         
         out.println(docType +
            "<html>\n" +
               "<head><title>" + title + "</title></head>\n" +
               "<body bgcolor = \"#f0f0f0\">\n" +
                  "<h1 align = \"center\">" + title + "</h1>\n" +
                  "<p align = \"center\">" + res + "</p>\n" +
               "</body>
            </html>"
         );
      } catch (MessagingException mex) {
         mex.printStackTrace();
      }
   }
}

Verilen bir e-posta kimliğine HTML mesajı göndermek için yukarıdaki sunucu uygulamasını derleyin ve çalıştırın.

Eki E-postayla Gönder

İşte makinenizden ekli bir e-posta göndermeye bir örnek. Burada sizinlocalhost internete bağlı ve bir e-posta gönderebilecek kadar yetenekli.

// File Name SendEmail.java
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
 
public class SendEmail extends HttpServlet {

   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      
      // Recipient's email ID needs to be mentioned.
      String to = "[email protected]";
 
      // Sender's email ID needs to be mentioned
      String from = "[email protected]";
 
      // Assuming you are sending email from localhost
      String host = "localhost";

      // Get system properties
      Properties properties = System.getProperties();
 
      // Setup mail server
      properties.setProperty("mail.smtp.host", host);
 
      // Get the default Session object.
      Session session = Session.getDefaultInstance(properties);
      
	  // Set response content type
      response.setContentType("text/html");
      PrintWriter out = response.getWriter();

      try {
         // Create a default MimeMessage object.
         MimeMessage message = new MimeMessage(session);
 
         // Set From: header field of the header.
         message.setFrom(new InternetAddress(from));
 
         // Set To: header field of the header.
         message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
 
         // Set Subject: header field
         message.setSubject("This is the Subject Line!");
 
         // Create the message part 
         BodyPart messageBodyPart = new MimeBodyPart();
 
         // Fill the message
         messageBodyPart.setText("This is message body");
         
         // Create a multipar message
         Multipart multipart = new MimeMultipart();
 
         // Set text message part
         multipart.addBodyPart(messageBodyPart);
 
         // Part two is attachment
         messageBodyPart = new MimeBodyPart();
         String filename = "file.txt";
         DataSource source = new FileDataSource(filename);
         messageBodyPart.setDataHandler(new DataHandler(source));
         messageBodyPart.setFileName(filename);
         multipart.addBodyPart(messageBodyPart);
 
         // Send the complete message parts
         message.setContent(multipart );
 
         // Send message
         Transport.send(message);
         String title = "Send Email";
         String res = "Sent message successfully....";
         String docType =
         "<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
         
         out.println(docType +
            "<html>\n" +
               "<head><title>" + title + "</title></head>\n" +
               "<body bgcolor = \"#f0f0f0\">\n" +
                  "<h1 align = \"center\">" + title + "</h1>\n" +
                  "<p align = \"center\">" + res + "</p>\n" +
               "</body>
            </html>"
         );
      } catch (MessagingException mex) {
         mex.printStackTrace();
      }
   }
}

Verilen bir e-posta kimliğindeki bir mesajla birlikte bir dosyayı ek olarak göndermek için yukarıdaki sunucu uygulamasını derleyin ve çalıştırın.

Kullanıcı Kimlik Doğrulama Bölümü

Kimlik doğrulama amacıyla e-posta sunucusuna kullanıcı kimliği ve Parola sağlamanız gerekiyorsa, bu özellikleri aşağıdaki gibi ayarlayabilirsiniz -

props.setProperty("mail.user", "myuser");
 props.setProperty("mail.password", "mypwd");

E-posta gönderme mekanizmasının geri kalanı yukarıda açıklandığı gibi kalacaktır.

WEB-INF alt dizinini içeren web uygulaması yapısı, tüm Java web uygulamaları için standarttır ve servlet API spesifikasyonu ile belirtilir. Uygulamamın üst düzey bir dizin adı verildi. İşte bu dizin yapısının nasıl göründüğü -

/myapp
   /images
   /WEB-INF
      /classes
      /lib

WEB-INF alt dizini, uygulamanın web.xml adlı dağıtım tanımlayıcısını içerir. Tüm HTML dosyaları myapp olan en üst düzey dizinde tutulmalıdır . Yönetici kullanıcı için, KÖK dizinini ana dizin olarak bulacaksınız.

Paketlerde Servlet Oluşturma

WEB-INF / sınıflar dizini, paket adlarıyla eşleşen bir yapıda tüm sunucu uygulaması sınıflarını ve diğer sınıf dosyalarını içerir. Örneğin, tam nitelikli bir sınıf adınız varsacom.myorg.MyServlet, bu durumda bu sunucu uygulaması sınıfı aşağıdaki dizinde bulunmalıdır -

/myapp/WEB-INF/classes/com/myorg/MyServlet.class

Aşağıda com.myorg paket adıyla MyServlet sınıfı oluşturma örneği verilmiştir.

// Name your package
package com.myorg;  

// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
 
public class MyServlet extends HttpServlet {
 
   private String message;
 
   public void init() throws ServletException {
      // Do required initialization
      message = "Hello World";
   }
 
   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      
      // Set response content type
      response.setContentType("text/html");
 
      // Actual logic goes here.
      PrintWriter out = response.getWriter();
      out.println("<h1>" + message + "</h1>");
   }

   public void destroy() {
      // do nothing.
   }
}

Servletleri Paketler halinde Derleme

Pakette bulunan bir sınıfı derlemek için çok farklı bir şey yoktur. En basit yol, java dosyanızı tam nitelikli yolda tutmaktır, yukarıda belirtildiği gibi, sınıf com.myorg'da tutulacaktır. Bu dizini CLASSPATH'a da eklemeniz gerekir.

Ortamınızın doğru kurulduğunu varsayarak, içeri girin <Tomcat-installationdirectory>/ webapps / ROOT / WEB-INF / classes dizini ve MyServlet.java dosyasını aşağıdaki gibi derleyin

$ javac MyServlet.java

Sunucu uygulaması başka herhangi bir kitaplığa bağlıysa, bu JAR dosyalarını CLASSPATH'inize de dahil etmeniz gerekir. Hello World programında başka bir kitaplık kullanmadığım için yalnızca servlet-api.jar JAR dosyasını ekledim.

Bu komut satırı, Sun Microsystems Java Yazılım Geliştirme Kiti (JDK) ile birlikte gelen yerleşik javac derleyicisini kullanır. Bu komutun düzgün çalışması için, PATH ortam değişkenine kullandığınız Java SDK'nın konumunu eklemeniz gerekir.

Her şey yolunda giderse, yukarıdaki derleme MyServlet.classaynı dizindeki dosya. Sonraki bölüm, derlenmiş bir sunucu uygulamasının üretimde nasıl dağıtılacağını açıklayacaktır.

Paketli Servlet Dağıtımı

Varsayılan olarak, bir servlet uygulaması <Tomcat-installationdirectory> / webapps / ROOT yolunda bulunur ve sınıf dosyası <Tomcat-installationdirectory> / webapps / ROOT / WEB-INF / classes içinde bulunur.

Tam nitelikli bir sınıf adınız varsa com.myorg.MyServlet, bu sunuculet sınıfı WEB-INF / classes / com / myorg / MyServlet.class içinde bulunmalıdır ve aşağıdaki girişleri oluşturmanız gerekir: web.xml <Tomcat-installationdirectory> / webapps / ROOT / WEB-INF / konumunda bulunan dosya

<servlet>
   <servlet-name>MyServlet</servlet-name>
   <servlet-class>com.myorg.MyServlet</servlet-class>
</servlet>
 
<servlet-mapping>
   <servlet-name>MyServlet</servlet-name>
   <url-pattern>/MyServlet</url-pattern>
</servlet-mapping>

<web-app> ... </web-app> etiketlerinde oluşturulacak girişlerin üstünde web.xml dosyasında mevcuttur. Bu tabloda zaten mevcut olan çeşitli girişler olabilir, ancak boşverin.

Neredeyse tamamladınız, şimdi <Tomcat-installationdirectory> \ bin \ startup.bat (Windows'ta) veya <Tomcat-installationdirectory> /bin/startup.sh (Linux / Solaris vb. Üzerinde) kullanarak tomcat sunucusunu başlatalım ve son olarak şunu yazın: http://localhost:8080/MyServlettarayıcının adres kutusunda. Her şey yolunda giderse, aşağıdaki sonucu alırsınız -

Hello World

Sunucu uygulamalarını test etmek / hata ayıklamak her zaman zordur. Servletler, büyük miktarda istemci / sunucu etkileşimi içerme eğilimindedir, bu da hataları olası ancak yeniden üretilmesi zor hale getirir.

İşte hata ayıklamanıza yardımcı olabilecek birkaç ipucu ve öneri.

System.out.println ()

System.out.println (), belirli bir kod parçasının yürütülüp yürütülmediğini test etmek için bir işaretçi olarak kullanımı kolaydır. Değişken değerleri de yazdırabiliriz. Ek olarak -

  • Sistem nesnesi çekirdek Java nesnelerinin bir parçası olduğu için, herhangi bir ekstra sınıf yüklemeye gerek kalmadan her yerde kullanılabilir. Buna Servlet'ler, JSP, RMI, EJB'ler, sıradan Beans ve sınıflar ve bağımsız uygulamalar dahildir.

  • Kesme noktalarında durma tekniği normal yürütmeyi durdurur, bu nedenle daha fazla zaman alır. System.out'a yazmak, uygulamanın normal yürütme akışına çok fazla müdahale etmez, bu da zamanlama önemli olduğunda onu çok değerli kılar.

System.out.println () kullanmak için sözdizimi aşağıdadır -

System.out.println("Debugging message");

Yukarıdaki sözdizimi tarafından üretilen tüm mesajlar, web sunucusu günlük dosyasına kaydedilir.

Mesaj Günlüğü

Tüm hata ayıklama, uyarı ve hata mesajlarını standart bir günlüğe kaydetme yöntemi kullanarak günlüğe kaydetmek için uygun günlüğe kaydetme yöntemini kullanmak her zaman harika bir fikirdir. Tüm mesajları kaydetmek için log4J kullanıyorum .

Servlet API ayrıca aşağıdaki gibi log () yöntemini kullanarak bilgi çıktısının basit bir yolunu sağlar -

// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class ContextLog extends HttpServlet {
   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, java.io.IOException {
    
      String par = request.getParameter("par1");
      
      //Call the two ServletContext.log methods
      ServletContext context = getServletContext( );

      if (par == null || par.equals(""))
         //log version with Throwable parameter
         context.log("No message received:", new IllegalStateException("Missing parameter"));
      else
         context.log("Here is the visitor's message: " + par);
      
      response.setContentType("text/html");
      java.io.PrintWriter out = response.getWriter( );
      String title = "Context Log";
      String docType =
         "<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
      
      out.println(docType +
         "<html>\n" +
            "<head><title>" + title + "</title></head>\n" +
            "<body bgcolor = \"#f0f0f0\">\n" +
               "<h1 align = \"center\">" + title + "</h1>\n" +
               "<h2 align = \"center\">Messages sent</h2>\n" +
            "</body>
         </html>"
      );
   } //doGet
}

ServletContext, metin mesajlarını sunucu uygulaması kapsayıcısının günlük dosyasına kaydeder. Tomcat ile bu günlükler <Tomcat-installation-directory> / logs içinde bulunur.

Günlük dosyaları, ortaya çıkan yeni hataların veya sorunların sıklığının bir göstergesidir. Bu nedenle, normalde oluşmaması gereken istisnaların catch yan tümcesinde log () işlevini kullanmak iyidir.

JDB Hata Ayıklayıcısını Kullanma

Bir uygulamada veya uygulamada hata ayıklamak için kullandığınız jdb komutlarıyla sunucu uygulamalarının hatalarını ayıklayabilirsiniz.

Bir sunucu uygulamasında hata ayıklamak için sun.servlet.http.HttpServer'ın hatalarını ayıklıyoruz ve tarayıcıdan yapılan HTTP isteklerine yanıt olarak HttpServer'ın sunucu uygulamalarını çalıştırmasını dikkatle izliyoruz. Bu, uygulamaların nasıl hata ayıklandığına çok benzer. Aradaki fark, uygulamalarda hata ayıklanan asıl programın sun.applet.AppletViewer olmasıdır.

Çoğu hata ayıklayıcı, uygulamalarda nasıl hata ayıklanacağını otomatik olarak bilerek bu ayrıntıyı gizler. Servletler için aynısını yapana kadar, aşağıdakileri yaparak hata ayıklayıcınıza yardım etmeniz gerekir -

  • Hata ayıklayıcınızın sınıf yolunu sun.servlet.http.Http-Server ve ilişkili sınıfları bulabilecek şekilde ayarlayın.

  • Hata ayıklayıcınızın sınıf yolunu, sunucu uygulamalarınızı ve destek sınıflarınızı, tipik olarak server_root / servletler ve server_root / sınıfları bulabilecek şekilde ayarlayın.

Normalde sınıf yolunuzda server_root / servlet'leri istemezsiniz çünkü servlet yeniden yüklemeyi devre dışı bırakır. Ancak bu dahil etme, hata ayıklama için kullanışlıdır. HttpServer'daki özel sunucu uygulaması yükleyici sunucu uygulamasını yüklemeden önce hata ayıklayıcınızın bir sunucu uygulamasında kesme noktaları ayarlamasına olanak tanır.

Uygun sınıf yolunu ayarladıktan sonra, sun.servlet.http.HttpServer'da hata ayıklamaya başlayın. Hata ayıklamayla ilgilendiğiniz sunucu uygulamasında kesme noktaları ayarlayabilir, ardından verilen sunucu uygulaması için HttpServer'a bir istekte bulunmak üzere bir web tarayıcısı kullanabilirsiniz (http: // localhost: 8080 / servlet / ServletToDebug). Kesme noktalarınızda yürütmenin durdurulduğunu görmelisiniz.

Yorumları Kullanma

Kodunuzdaki yorumlar, hata ayıklama sürecine çeşitli şekillerde yardımcı olabilir. Yorumlar, hata ayıklama sürecinde birçok başka şekilde kullanılabilir.

Servlet Java yorumlarını kullanır ve tek satırlı (// ...) ve çok satırlı (/ * ... * /) yorumlar Java kodunuzun bazı kısımlarını geçici olarak kaldırmak için kullanılabilir. Hata ortadan kalkarsa, az önce yorumladığınız koda daha yakından bakın ve sorunu bulun.

İstemci ve Sunucu Başlıkları

Bazen bir sunucu uygulaması beklendiği gibi davranmadığında, ham HTTP isteğine ve yanıtına bakmak yararlıdır. HTTP'nin yapısına aşina iseniz, isteği ve yanıtı okuyabilir ve bu başlıklarla tam olarak ne olduğunu görebilirsiniz.

Önemli Hata Ayıklama İpuçları

İşte sunucu uygulaması hata ayıklamayla ilgili daha fazla hata ayıklama ipucunun bir listesi -

  • Server_root / classes'in yeniden yüklenmediğini ve server_root / servlet'lerin büyük olasılıkla yüklendiğini unutmayın.

  • Bir tarayıcıdan, görüntülediği sayfanın ham içeriğini göstermesini isteyin. Bu, biçimlendirme sorunlarının belirlenmesine yardımcı olabilir. Genellikle Görünüm menüsünün altındaki bir seçenektir.

  • Sayfayı tam olarak yeniden yüklemeye zorlayarak tarayıcının önceki bir isteğin çıktısını önbelleğe almadığından emin olun. Netscape Navigator ile Shift-Yeniden Yükle'yi kullanın; Internet Explorer ile Shift-Refresh kullanın.

  • Sunucu uygulamanızın init () yönteminin bir ServletConfig parametresi aldığını ve hemen super.init (config) öğesini çağırdığını doğrulayın.

Devam etmeden önce, üç önemli terimi açıklamama izin verin -

  • Internationalization (i18n) - Bu, bir web sitesinin ziyaretçinin diline veya uyruğuna çevrilmiş farklı içerik sürümleri sunmasını sağlamak anlamına gelir.

  • Localization (l10n) - Bu, belirli bir coğrafi veya kültürel bölgeye uyum sağlamak için bir web sitesine kaynak eklemek anlamına gelir.

  • locale- Bu belirli bir kültürel veya coğrafi bölgedir. Genellikle bir dil sembolü ve ardından bir alt çizgi ile ayrılmış bir ülke sembolü olarak anılır. Örneğin "en_US", ABD için İngilizce yerel ayarını temsil eder.

Küresel bir web sitesi oluştururken dikkat edilmesi gereken çok sayıda öğe vardır. Bu eğitim size bu konuda tam bir ayrıntı vermeyecektir, ancak farklı dillerdeki web sayfanızı konumlarını, yani yerel ayarları farklılaştırarak internet topluluğuna nasıl sunabileceğiniz konusunda size iyi bir örnek verecektir.

Bir sunucu uygulaması, istekte bulunan kişinin yerel ayarına göre sitenin uygun sürümünü alabilir ve yerel dil, kültür ve gereksinimlere göre uygun site sürümünü sağlayabilir. Aşağıda, Locale nesnesini döndüren istek nesnesinin yöntemi verilmiştir.

java.util.Locale request.getLocale()

Yerel Algılama

Aşağıda, talepte bulunan kişinin konumunu, dilini ve tabii ki yerel ayarını tespit etmek için kullanabileceğiniz önemli yerel ayar yöntemleri verilmiştir. Aşağıdaki yöntemlerin tümü, talepte bulunan kişinin tarayıcısında belirlenen ülke adını ve dil adını görüntüler.

Sr.No. Yöntem ve Açıklama
1

String getCountry()

Bu yöntem, ISO 3166 2 harfli formatta bu yerel ayar için ülke / bölge kodunu büyük harflerle döndürür.

2

String getDisplayCountry()

Bu yöntem, yerel ayarın ülkesi için kullanıcıya görüntülenmeye uygun bir ad döndürür.

3

String getLanguage()

Bu yöntem, ISO 639 biçiminde bu yerel ayar için dil kodunu küçük harflerle döndürür.

4

String getDisplayLanguage()

Bu yöntem, yerelin dili için kullanıcıya görüntülenmeye uygun bir ad döndürür.

5

String getISO3Country()

Bu yöntem, bu yerel ayarın ülkesi için üç harfli bir kısaltma döndürür.

6

String getISO3Language()

Bu yöntem, bu yerelin dili için üç harfli bir kısaltma döndürür.

Misal

Bu örnek, bir istek için bir dili ve ilişkili ülkeyi nasıl görüntülediğinizi gösterir -

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.Locale;

public class GetLocale extends HttpServlet {

   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
   
      //Get the client's Locale
      Locale locale = request.getLocale();
      String language = locale.getLanguage();
      String country = locale.getCountry();

      // Set response content type
      response.setContentType("text/html");
      PrintWriter out = response.getWriter();

      String title = "Detecting Locale";
      String docType =
         "<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
      
      out.println(docType +
         "<html>\n" +
            "<head><title>" + title + "</title></head>\n" +
            "<body bgcolor = \"#f0f0f0\">\n" +
               "<h1 align = \"center\">" + language + "</h1>\n" +
               "<h2 align = \"center\">" + country + "</h2>\n" +
         "</body>
         </html>"
      );
   }
}

Diller Ayarı

Bir sunucu uygulaması, İngilizce, İspanyolca, Almanca, Fransızca, İtalyanca, Hollandaca vb. Gibi Batı Avrupa dilinde yazılmış bir sayfanın çıktısını alabilir. Burada ContentLanguage başlığının tüm karakterleri düzgün şekilde görüntülemesi için ayarlanması önemlidir.

İkinci nokta, tüm özel karakterleri HTML varlıklarını kullanarak görüntülemektir, Örneğin, "& # 241;" "ñ" ve "& # 161;" temsil eder aşağıdaki gibi "¡" yi temsil eder:

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.Locale;

public class DisplaySpanish extends HttpServlet {

   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {

      // Set response content type
      response.setContentType("text/html");
      PrintWriter out = response.getWriter();

      // Set spanish language code.
      response.setHeader("Content-Language", "es");

      String title = "En Espa&ntilde;ol";
      String docType =
      "<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
      
      out.println(docType +
         "<html>\n" +
            "<head><title>" + title + "</title></head>\n" +
            "<body bgcolor = \"#f0f0f0\">\n" +
               "<h1>" + "En Espa&ntilde;ol:" + "</h1>\n" +
               "<h1>" + "&iexcl;Hola Mundo!" + "</h1>\n" +
            "</body>
         </html>"
      );
   }
}

Yerel Ayara Özel Tarihler

Yerel ayara özel tarih ve saati biçimlendirmek için java.text.DateFormat sınıfını ve statik getDateTimeInstance () yöntemini kullanabilirsiniz. Aşağıda, belirli bir yerel ayara özgü tarihlerin nasıl biçimlendirileceğini gösteren örnek verilmiştir -

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.Locale;
import java.text.DateFormat;
import java.util.Date;

public class DateLocale extends HttpServlet {

   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      
      // Set response content type
      response.setContentType("text/html");
      PrintWriter out = response.getWriter();
      
      //Get the client's Locale
      Locale locale = request.getLocale( );
      String date = DateFormat.getDateTimeInstance(DateFormat.FULL, 
         DateFormat.SHORT, locale).format(new Date( ));

      String title = "Locale Specific Dates";
      String docType =
         "<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
     
      out.println(docType +
         "<html>\n" +
            "<head><title>" + title + "</title></head>\n" +
            "<body bgcolor = \"#f0f0f0\">\n" +
               "<h1 align = \"center\">" + date + "</h1>\n" +
            "</body>
         </html>"
      );
   }
}

Yerel Ayara Özgü Para Birimi

Yerel ayara özel bir para biriminde uzun veya çift tür gibi bir sayıyı biçimlendirmek için java.txt.NumberFormat sınıfını ve statik getCurrencyInstance () yöntemini kullanabilirsiniz. Aşağıda, belirli bir yerel ayara özel para biriminin nasıl biçimlendirileceğini gösteren örnek verilmiştir -

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.Locale;
import java.text.NumberFormat;
import java.util.Date;

public class CurrencyLocale extends HttpServlet {
    
   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {

      // Set response content type
      response.setContentType("text/html");
      PrintWriter out = response.getWriter();

      //Get the client's Locale
      Locale locale = request.getLocale( );
      NumberFormat nft = NumberFormat.getCurrencyInstance(locale);
      String formattedCurr = nft.format(1000000);

      String title = "Locale Specific Currency";
      String docType =
         "<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
      
      out.println(docType +
         "<html>\n" +
            "<head><title>" + title + "</title></head>\n" +
            "<body bgcolor = \"#f0f0f0\">\n" +
               "<h1 align = \"center\">" + formattedCurr + "</h1>\n" +
            "</body>
         </html>"
      );
   }
}

Yerel Ayara Özgü Yüzde

Yerel ayara özgü yüzdeyi almak için java.txt.NumberFormat sınıfını ve statik getPercentInstance () yöntemini kullanabilirsiniz. Aşağıda, belirli bir yerel ayara özgü yüzdelerin nasıl biçimlendirileceğini gösteren örnek verilmiştir -

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.Locale;
import java.text.NumberFormat;
import java.util.Date;

public class PercentageLocale extends HttpServlet {

   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      
      // Set response content type
      response.setContentType("text/html");
      PrintWriter out = response.getWriter();
      
      //Get the client's Locale
      Locale locale = request.getLocale( );
      NumberFormat nft = NumberFormat.getPercentInstance(locale);
      String formattedPerc = nft.format(0.51);

      String title = "Locale Specific Percentage";
      String docType =
      "<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
      
      out.println(docType +
         "<html>\n" +
            "<head><title>" + title + "</title></head>\n" +
            "<body bgcolor = \"#f0f0f0\">\n" +
               "<h1 align = \"center\">" + formattedPerc + "</h1>\n" +
            "</body>
         </html>"
      );
   }
}

Şimdiye kadar, Servlet'in uygulamanızı bir web sunucusuna dağıtmak için dağıtım tanımlayıcısını (web.xml dosyası) nasıl kullandığını öğrendiniz. Servlet API 3.0, javax.servlet.annotation adlı yeni bir paket sunmuştur. Bir servlet sınıfına açıklama eklemek için kullanılabilecek açıklama türleri sağlar. Ek açıklama kullanırsanız, dağıtım tanımlayıcı (web.xml) gerekli değildir. Ancak tomcat7 veya tomcat'in sonraki herhangi bir sürümünü kullanmalısınız.

Açıklamalar, sunucu uygulaması bildirimi ve sunucu uygulaması eşlemesi gibi web dağıtım tanımlayıcı dosyasındaki (web.xml) eşdeğer XML yapılandırmasının yerini alabilir. Servlet kapsayıcıları, açıklamalı sınıfları dağıtım zamanında işler.

Servlet 3.0'da tanıtılan açıklama türleri şunlardır:

Sr.No. Ek Açıklama ve Açıklama
1

@WebServlet

Bir sunucu uygulaması bildirmek için.

2

@WebInitParam

Bir başlatma parametresi belirlemek için.

3

@WebFilter

Bir sunucu uygulaması filtresi bildirmek için.

4

@WebListener

Bir WebListener bildirmek için

5

@HandlesTypes

ServletContainerInitializer'ın işleyebileceği sınıf türlerini bildirmek için.

6

@HttpConstraint

Bu açıklama, ServletSecurity açıklamasında karşılık gelen bir HttpMethodConstraint öğesinin OLMADIĞI tüm HTTP protokol yöntemlerine uygulanacak güvenlik kısıtlamalarını temsil etmek için ServletSecurity açıklamasında kullanılır.

7

@HttpMethodConstraint

Bu açıklama, belirli HTTP protokol mesajları üzerindeki güvenlik kısıtlamalarını temsil etmek için ServletSecurity açıklamasında kullanılır.

8

@MultipartConfig

Servlet sınıfında belirtilebilen, Servlet örneklerinin multipart / form-data MIME tipine uyan talepleri beklediğini belirten açıklama.

9

@ServletSecurity

Bu açıklama, HTTP protokol mesajlarında bir Servlet konteyneri tarafından uygulanacak güvenlik kısıtlamalarını belirtmek için bir Servlet uygulama sınıfında kullanılır.

Burada bazı Ek Açıklamaları ayrıntılı olarak tartıştık.

@Hayalhanemersin

@WebServlet, bir kapsayıcı ile bir Servlet yapılandırmasını bildirmek için kullanılır. Aşağıdaki tablo, WebServlet ek açıklaması için kullanılan özniteliklerin listesini içerir.

Sr.No. Öznitelik ve Açıklama
1

String name

Servlet Adı

2

String[] value

URL kalıpları dizisi

3

String[] urlPatterns

Bu Filtrenin uygulandığı URL modelleri dizisi

4

Int loadOnStartup

Tamsayı değeri size başlangıç ​​sıralaması ipucu verir

5

WebInitParam[] initParams

Bu Servlet için başlatma parametreleri dizisi

6

Boolean asyncSupported

Bu Servlet tarafından desteklenen zaman uyumsuz işlem

7

String smallIcon

Varsa, bu Servlet için küçük simge

8

String largeIcon

Varsa, bu Servlet için büyük simge

9

String description

Varsa, bu Servlet'in açıklaması

10

String displayName

Varsa, bu Servlet'in görünen adı

En az bir URL kalıbı, her ikisinde de bildirilmelidir ZORUNLU value veya urlPattern ek açıklamanın özelliği, ancak ikisi birden değil.

value özniteliğin, ayarlanan tek öznitelik URL kalıbı olduğunda kullanılması önerilir, aksi takdirde urlPattern özniteliği kullanılmalıdır.

Misal

Aşağıdaki örnek @WebServlet ek açıklamasının nasıl kullanılacağını açıklar. Metni görüntüleyen basit bir servlettir.Hello Servlet.

import java.io.IOException; 
import java.io.PrintWriter; 
import javax.servlet.ServletException; 
import javax.servlet.annotation.WebInitParam; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
@WebServlet(value = "/Simple") 
public class Simple extends HttpServlet {

   private static final long serialVersionUID = 1L; 

   protected void doGet(HttpServletRequest request, HttpServletResponse response)  
      throws ServletException, IOException { 
   
      response.setContentType("text/html");   
      PrintWriter out = response.getWriter();   
      out.print("<html><body>");   
      out.print("<h3>Hello Servlet</h3>");   
      out.print("</body></html>");         
   }   
}

Derleme Simple.java her zamanki gibi ve sınıf dosyanızı <Tomcat-installationdirectory> / webapps / ROOT / WEB-INF / classes içine koyun.

Şimdi sadece http: // localhost: 8080 / Simple'ı çalıştırarak herhangi bir sunucu uygulamasını çağırmayı deneyin . Web sayfasında aşağıdaki çıktıyı göreceksiniz.

Hello servlet

@Evleneceksen

@WebInitParam ek açıklaması, bir Servlet veya bir Filtre için bir başlatma parametresi belirtmek için kullanılır. Bir WebFilter veya WebSevlet ek açıklamalarında kullanılır. Aşağıdaki tablo, WebInitParam ek açıklaması için kullanılan özniteliklerin listesini içerir.

Sr.No. Öznitelik ve Açıklama
1

String name

Başlatma parametresinin adı

2

String value

Başlatma parametresinin değeri

3

String description

Başlatma parametresinin açıklaması

Misal

Aşağıdaki örnek, @WebServlet ek açıklaması ile birlikte @WeInitParam ek açıklamasının nasıl kullanılacağını açıklar. Metni görüntüleyen basit bir servlettir.Hello Servlet ve dize değeri Hello World! hangisinden alınır init parametreleri.

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

@WebServlet(value = "/Simple", initParams = { 
   @WebInitParam(name = "foo", value = "Hello "), 
   @WebInitParam(name = "bar", value = " World!") 
}) 
public class Simple extends HttpServlet {

   private static final long serialVersionUID = 1L; 

   protected void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {   
      
      response.setContentType("text/html");   
      PrintWriter out = response.getWriter();   
      out.print("<html><body>");   
      out.print("<h3>Hello Servlet</h3>");   
      out.println(getInitParameter("foo")); 
      out.println(getInitParameter("bar")); 
      out.print("</body></html>");         
   }   
}

Derleme Simple.java her zamanki gibi ve sınıf dosyanızı <Tomcat-installationdirectory>; / webapps / ROOT / WEB-INF / classes.

Şimdi sadece http: // localhost: 8080 / Simple'ı çalıştırarak herhangi bir sunucu uygulamasını çağırmayı deneyin . Web sayfasında aşağıdaki çıktıyı göreceksiniz.

Hello Servlet

Hello World!

@Webfilter

Bu, bir sunucu uygulaması filtresini bildirmek için kullanılan açıklamadır. Dağıtım zamanında konteyner tarafından işlenir ve ilgili filtre belirtilen URL modellerine, sunucu uygulamalarına ve dağıtım programı türlerine uygulanır.

@WebFilteraçıklama, bir web uygulamasındaki bir filtreyi tanımlar. Bu ek açıklama bir sınıf üzerinde belirtilir ve bildirilen filtre hakkındaki meta verileri içerir. Ek açıklamalı filtre en az bir URL modeli belirtmelidir. Aşağıdaki tablo, WebFilter ek açıklaması için kullanılan öznitelikleri listeler.

Sr.No. Öznitelik ve Açıklama
1

String filterName

Filtrenin adı

2

String[] urlPatterns

Filtrenin uygulandığı değerler dizisi veya urlPatterns sağlar

3

DispatcherType[] dispatcherTypes

Filtrenin uygulandığı dağıtıcı türlerini (İstek / Yanıt) belirtir

4

String[] servletNames

Bir dizi sunucu uygulaması adı sağlar

5

String displayName

Filtrenin adı

6

String description

Filtrenin açıklaması

7

WebInitParam[] initParams

Bu filtre için başlatma parametreleri dizisi

8

Boolean asyncSupported

Bu filtre tarafından desteklenen zaman uyumsuz işlem

9

String smallIcon

Varsa, bu filtre için küçük simge

10

String largeIcon

Varsa, bu filtre için büyük simge

Misal

Aşağıdaki örnek, @WebFilter ek açıklamasının nasıl kullanılacağını açıklar. Init-param'ın değerini gösteren basit bir LogFiltertest-paramve konsoldaki geçerli zaman damgası. Bu, filtrenin istek ve yanıt arasında bir arayüz katmanı gibi çalıştığı anlamına gelir. Burada urlPattern için "/ *" kullanıyoruz. Bu, bu filtrenin tüm sunucu uygulamaları için geçerli olduğu anlamına gelir.

import java.io.IOException; 
import javax.servlet.annotation.WebFilter; 
import javax.servlet.annotation.WebInitParam; 
import javax.servlet.*; 
import java.util.*;  

// Implements Filter class

@WebFilter(urlPatterns = {"/*"}, initParams = { 
   @WebInitParam(name = "test-param", value = "Initialization Paramter")}) 
public class LogFilter implements Filter {
   
   public void init(FilterConfig config) throws ServletException { 
      // Get init parameter  
      String testParam = config.getInitParameter("test-param");
            
      //Print the init parameter  
      System.out.println("Test Param: " + testParam);  
   } 

   public void doFilter(ServletRequest request, ServletResponse response,
      FilterChain chain) throws IOException, ServletException { 
	  
      // Log the current timestamp. 
      System.out.println("Time " + new Date().toString());  
         
      // Pass request back down the filter chain 
      chain.doFilter(request,response); 
   }

   public void destroy( ) {
      /* Called before the Filter instance is removed  
      from service by the web container*/ 
   } 
}

Derleme Simple.java her zamanki gibi ve sınıf dosyanızı <Tomcat-installationdirectory> / webapps / ROOT / WEB-INF / classes içine koyun.

Şimdi sadece http: // localhost: 8080 / Simple'ı çalıştırarak herhangi bir sunucu uygulamasını çağırmayı deneyin . Web sayfasında aşağıdaki çıktıyı göreceksiniz.

Hello Servlet
  
Hello World!

Şimdi, sunucu uygulaması konsolunu açın. Orada, değerini bulacaksınızinit parametre testparam ve current timestamp servlet bildirim mesajlarıyla birlikte.