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 : hello servlet
Bir sonraki yazıda görüşmek dileğiyle. Mutlu kalın , kod’la kalın ve bol bol Çay için…
comments powered by DisqusAlican Akkus