Merhaba arkadaşlar , bugün Servlet&Jsp yazı dizimizin üçüncüsü ile beraberiz.
Bugün ilk Servlet’imizi yazmış ve klasik olarak Hello Servlet demiş olucağız . Birazda web.xml yapısına bakınmış olucaz.
Ve ek olarak örnek açısından Servlet’imizde Remote Host ve Port numarasını da olarak göstemiş olucaz.
* Hatırlayacagınız üzere javax.servlet ve javax.servlet.htpp paketlerinde servletleri yazmamızı sağlayan sınıflar bulunurdu.
* Unutmayacagımız diğer bir madde ise her Servlet’in javax.servlet.Servlet interface‘ni implement ettiğidir.Bu interface Servlet için lifecycle methodlarını tanımlar.
* Eğer genel service methodunu kullanmak istiyorsak sınıfımızı Servlet Api’de bulunan GenericsServlet sınıfından extends etmemiz gerekicektir.
* Genelde biz HttpServlet sınıfını kullanarak servlet’lerimizi olusturucaz.
* HttpServlet sınıfı özel Http methodlarını karşılamak için doGet() , doPost ve doXXX() gibi methodları tanımlar.
Öncelikle ilk Servlet’imizi daha dogrusu ilk projemizi nasıl oluşturucağımızı görsellerle pekiştirelim. İde olarak İntellij kullanıyoruz
* New Project -> Web Application -> Create web.xml seçili olsun -> Son olarak projeye bir ad verip Finish deyiniz.
* Projemiz olustuktan sonra bizi şöyle bir resim karşılıyor ;
* Bazı yerlere şimdilik takılmayalım . Sol tarafta HelloServlet adındaki projemiz gözukmekte ve src klasörü altında _03_MyServlet paketi görünmekte ve pakette bir adete MyServlet adında bir sınıf bulunmakta.
* Web klasöründe ise WEB-INF klasörü ve web.xml dosyası bulunmakta.(Şimdilik index.jsp sayfasını göz ardı edelim )
* Önce MyServlet Sınıfımıza bir bakalım ;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
package _03_MyServlet; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; /** * Created by wora on 8/21/14. */ public class MyServlet extends HttpServlet { protected void doGet(final HttpServletRequest request, final HttpServletResponse response) throws ServletException, IOException { String hello = "Hello MyFirstServlet :) "; String name = "Alican"; String surname = "Akkus"; String nick = "CaySever :) "; final PrintWriter pw = response.getWriter();//Get printwriter from response pw.println(hello); pw.println(name); pw.println(surname); pw.println(nick); pw.println("----------"); pw.println("Remote Host : "+request.getRemoteHost());//Get Remote pw.println("Port number : "+request.getRemotePort());//Get Port } } |
Yukarıdaki işlemelere bakalım biraz ;
* Öncelikle sınıf tanımlamamızdan görebileceğiniz gibi sınıfımız bir Servlet sınıfıdır ;
1 |
public class MyServlet extends HttpServlet |
Hatırlayacagınız gibi Servlet’ler aslında bir Java sınıfından farksız degildir.
* doGet methodu ile Http methodlarında Get methodunu karşılıyor sınıfımız. Ek olarak ; Eğer bir form’da method tipi belirtilmez ise default olarak get methodu seçilir.
1 2 |
protected void doGet(final HttpServletRequest request,final HttpServletResponse response) throws ServletException, IOException { |
doGet() methodunun HttpServletRequest ve HttpServletResponse tipinde parametreler aldığına dikkat edelim. Bu iki obje ile işlemlerimizi gerçekleştiricez. Request ve response nesneleri sayesinde istek ve cevap’ları rahatlıkla elde edebiliyoruz .Daha sonradan detaylıca deginicez.
* Bir kaç String tanımlıyoruz
* Burdaki kod satırı ile de response’den akışa veri yazmak için bir PrintWriter nesnesi alıyoruz.
1 |
final PrintWriter pw = response.getWriter();//Get printwriter from response |
PrintWriter akışa yani cevap olarak response’ye text yazmamızı sağlıyor.
* Daha sonra remote host ve remote port’u alıp printwriter ile yazıyoruz ;
1 2 |
pw.println("Remote Host : "+request.getRemoteHost());//Get Remote pw.println("Port number : "+request.getRemotePort());//Get Port |
* Önemli bir noktaya geldik şuan arkadaslar ; Servlet sınıfıızı yazdıktan sonra yapacagımız ilk işlem bu servlet’mizi web.xml‘e kaydetmek olacaktır. Servlet Contaıner web.xml’e bakarak servlet’leri ve diper configure yada param özelliklerini okur.Eğer servlet’imizi web.xml’e kaydetmezsek 404 hatası alırız : ) . Biz kaydedelim
* Web.xml ;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <servlet> <servlet-name>MyServlet</servlet-name> <servlet-class>_03_MyServlet.MyServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>MyServlet</servlet-name> <url-pattern>/MyFirstServlet</url-pattern> </servlet-mapping> </web-app> |
* web-app etiketi içerisinde olacak yazacaklarımız . Bir servlet web.xml’de nasıl tanımlanır adım adım bakalım ;
- <servlet> tag’ı ile Servlet’e bir ad verilir. Ve bu Servlet’e karşılık gelen Servlet sınıfı verilir. Tam paket adı verilmeli.
- Daha sonra bu Servlet için mapping(eşlemek) yapılır.
- <servlet> ve <servlet-mapping> etiketleri arasında bulunan <servlet-name> değerlerinin aynı olması zorunludur.
- Contaıner bu iki isim üzerinden servleti eşler.
- Daha sonra Servletimiz için <url-pattern> ile url’de görünecek olan ismi belirtiyoruz.İsim size kalmış. Yanlız / ile başlanılması zorunludur.
* Tomcat’i run ettigimizde bizi şöyle birşey karşılıyor ,
* Url’den göreceginiz üzere <url-pattern> da verdigimiz isim görünmekte.
* Daha sonra HttpServlet ve web.xml‘e detaylıca bakınıcaz. Neden GenericsServlet extends edilmemeli ve neden service() methodu bizim tarafımızdan tanımlanmamalı gibi detaylara deginicez insaAllah .
* Şimdilik bu kadar arkadaşlar
* Kaynak kodlar : HelloServlet
* Bir sonraki yazıda görüşmek dileğiyle . ~ Alican Akkus
* Mutlu kalın , kod’la kalın ve bol bol Çay için …