Servletler - Sunucu HTTP Yanıtı
Ö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 sürümünden (ö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 kalıcı HTTP bağlantılarında kullanılıp kullanılmayacağını bildirir. Bir değerclose 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 güncellenmiş bir sayfayı ne kadar çabuk 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 söylemek 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 tanımlama bilgisini 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 ad ve tamsayı değerine sahip bir yanıt başlığı ekler. |
9 | void flushBuffer() Arabellekteki herhangi bir içeriği istemciye yazmaya 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