Bu Sayfayı Paylaş:

Kavram

Servlet

Tanım: Bir application server tarafından çalıştırılan program modülü. Servlet'ler java'da internet ve web programlama için kullanılan temel bileşendir.

Kavram

HttpServletRequest

Tanım: Java'da bir HTTP isteği (http request) ile ilgili gerekli bilgileri saklayan interface. ServletRequest interface'inden türetilmiştir. Her HTTP isteğinde, HttpServletRequest sınıfı doGet ve doPost methodlarına parametre olarak aktarılmaktadır

Örnek

Java'da Basit Bir Servlet Örneği

Aşağıda basit bir Servlet örneği görülmektedir :

public class HelloServlet extends HttpServlet{
        public void doGet(HttpServletRequest request,HttpServletResponse response){
        response.getWriter().println("")
        response.getWriter().println("")
        response.getWriter().println("Hello!")
        response.getWriter().println("")
        response.getWriter().println("")
}
}

Servlet çağrıldığı zaman ekranda bold olarak Hello! yazan bir output görülecektir. 


Örnek

Bir HTML Formundan Post İle Parametre Gönderme Örneği

Gelen parametreyi alan ve ekranda gösteren basit bir servlet örneği aşağıdaki gibidir : 

import java.io.IOException;
import javax.servlet.*;
import javax.servlet.annotation.*;
import javax.servlet.http.*;
@WebServlet("/TestServlet")
public class TestServlet extends HttpServlet {
        
        private static final long serialVersionUID = 1L;
       
    public TestServlet() {
        super();
    }

        protected void doGet(HttpServletRequest request, HttpServletResponse response)
 throws ServletException, IOException {
                process(request,response);
        }
        protected void doPost(HttpServletRequest request, HttpServletResponse response) 
                        throws ServletException, IOException {
                process(request,response);
        }
        protected void process(HttpServletRequest request, HttpServletResponse response) 
throws IOException{
                request.setCharacterEncoding("UTF-8");
                String test=request.getParameter("test");
                System.out.println("test:"+test);
                response.setContentType("text/html; charset=utf-8");
                response.getWriter().print(test);
                
        }

}

get veya port ile gelen request'ler process fonksiyonuna aktarılmaktadır. process fonksiyonu test adındaki parametrenin değerini almaktadır. Türkçe karakter problemi çıkmaması için request'in charhterEncoding özelliği UTF-8 olarak set edilmiştir .Response'da da charset özelliği UTF-8 olarak verilmiştir. 

Yukarıdaki Servlet'i çağıran HTML örneği aşağıdaki gibidir : 

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 
Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action="TestServlet" accept-charset="utf-8" method="post">
		<input type="text" name="test">
		<input type="submit" name="gonder">
	</form>
</body>
</html>

Form elementinin action özelliğine Servlet'in adı verilmiştir. Eğer Servlet farklı bir sitede ise Servlet'in tam URL'i verilmelidir.  Form verileri post method'u ile gönderilecek şekilde set edilmiştir. Türkçe karakter problemi çıkarmaması için meta etiketinde charset=UTF-8 şeklinde tanımlanmış , ayrıca formun accept-charset özelliği utf-8 yapılmıştır. Bu şekilde Türkçe karakter problemi çıkmayacaktır. 

 


Örnek

Post Edilen XML'i String'e Çeviren Servlet Örneği

Aşağıdaki gibi bir fonksiyon örneği post edilmiş XML'i String'e çevirmektedir :

private String getXML(HttpServletRequest request) throws IOException{
    String xml = null;
    byte[] xmlData = new byte[request.getContentLength()];
    InputStream sis = request.getInputStream();
    BufferedInputStream bis = new BufferedInputStream(sis);
    bis.read(xmlData, 0, xmlData.length);
    if (request.getCharacterEncoding() != null) {
      xml = new String(xmlData, request.getCharacterEncoding());
    } else {
      xml = new String(xmlData);
    }
    return xml;
}

 

 


İpucu

Servlet'lerde Türkçe Karakter Probleminin Çözülmesi İçin UTF-8 Karakter Setini Kullanın

Servlet'ler de verileri alırken ve gösterirken Türkçe karakter sıkıntısı yaşamamak için UTF-8 karakter setini kullanabilirsiniz.  Örneğin request ile gelen verilerin UTF-8'te almak için Servlet'te post methodunda aşağıdaki kod satırı eklenebilir : 

request.setCharacterEncoding("UTF-8");

Response'da da türkçe karakter sıkıntısı çıkmaması için aşağıdaki şekilkde ayarlama yapılabilir :

response.setContentType("text/html; charset=utf-8");

Örnek text/html şeklinde bir outpu içindir. Başka output tipleri içinde çalışır. 

Servlet'e verilerin UTF-8 şeklinde gönderilmesi hem de gelen verilerin UTF-8 olarak görüntülenmesi sağlanmalıdır. Bunun için HTML sayfasında head kısmına aşağıdaki satır eklenebilir : 

Verileri form'da gönderilecek ise form aşağıdaki gibi set edilebilir : 

Yukarıdaki değişiklikler yapıldığında UTF-8 verileri alma ve UTF-8'e göre cevap vermede herhangi bir sıkıntı yaşanmaması gerekir. 

Basit bir örnek incelemek için Tıklayınız 


Örnek

Resim Servleti Örneği

Bir servlet çağrıldığında resim döndürmesi sağlanabilir. Bu servlet örneğin bir HTML içinde aşağıdaki gibi kullanılabilir :


<img src="http://www.myadres.com/ImageServlet?id=123">


Yukarıda http://www.myadres.com/ImageServlet?id=123 çağrıldığında ImageServlet çalışacak ve cevap olarak resim döndürecektir.

Aşağıda basit bir örnek servlet görülmektedir :

import java.io.*;
import java.sql.*;
import javax.servlet.*;
import javax.servlet.annotation.*;
import javax.servlet.http.*;

@WebServlet("/ImageServlet") public class ImageServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String id=request.getParameter("id"); try { // id'den dosyanın pathi bulunur String path="path_bulunacak"; response.setContentType("image/jpeg"); BufferedInputStream bin=null; BufferedOutputStream bout=null; ServletOutputStream out=null; try { out=response.getOutputStream(); FileInputStream fis = new FileInputStream (path); bin = new BufferedInputStream(fis); bout = new BufferedOutputStream(out); int ch =0; while((ch=bin.read())!=-1) { bout.write(ch); } } catch (IOException e) { e.printStackTrace(); }finally{ if(bin!=null){ bin.close(); } if(bout!=null){ bout.close(); } if(out!=null){ out.close(); } } } catch (SQLException e) { e.printStackTrace(); } } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {} }
Parametre olarak gösterilmek istenilen resmin id'si gelir. Id yerine path veya resmi bulmayı sağlayan başka değerler gelebilir. Bu projenize bağlıdır. Resim path'i bulunduktan sonra tek yapılması gereken resmin datasını servletin outputstream'ine aktarmaktır. Biz örnek olarak jpg kullandık. Resmin tipini bulup ona göre contentType set edebilirsiniz

Kavram

Winstone Servlet Container

Tanım: Sadece Servlet ile ilgili özellikleri sağlayan bir Servlet container. JEE ile ilgili diğer standarları içermemesinden dolayı daha basit , daha küçük boyutlu ve daha hızlı bir Servlet engine'dir.



Bu Sayfayı Paylaş:

İletişim Bilgileri

Takip Et

Her Hakkı Saklıdır. Bu sitede yayınlanan tüm bilgi ve fikirlerin kullanımından fibiler.com sorumlu değildir. Bu sitede üretilmiş , derlenmiş içerikleri, fibiler.com'u kaynak göstermek koşuluyla kendi sitenizde kullanılabilirsiniz. Ancak telif hakkı olan içeriklerin hakları sahiplerine aittir