CodeGym/Java Kursu/Modül 3/Servlet Yanıtlarını Şekillendirme

Servlet Yanıtlarını Şekillendirme

Mevcut

3.1 HttpServletResponse sınıfı

Servlet yönteminizi çağırdıktan sonra service(), web kapsayıcısı istemciye HttpServletResponse. Bu nedenle, istemciye verilen yanıtı bir şekilde etkilemek istiyorsanız, bu nesneyi değiştirmelisiniz.

Sunucu yanıtı üç bölümden oluşur:

  • Durum satırı (örneğin: 200 OK)
  • Başlıklar
  • Yanıt gövdesi

Ve sınıf yöntemleri HttpServletResponsede 3 gruba mı ayrılıyor? Neredeyse:

Yöntemler Tanım
1 void setStatus(int sc) Yanıt durum kodunu ayarlar.
2 void sendError(int sc) İstemciye belirtilen kodla bir hata gönderir.
3 void sendError(int sc, String msg) Belirtilen kodla bir hata ve istemciye bir mesaj gönderir.
4 void addHeader(String name, String value) Yanıt başlıkları listesine bir başlık ekler.
5 void setHeader(String name, String value) Yanıt başlıkları listesindeki başlığı değiştirir.
6 boolean containsHeader(String name) Başlığın zaten var olup olmadığını kontrol eder.
7 void addCookie(Cookie cookie) Yanıta bir Çerez ekler.
8 void sendRedirect(String location) İstemciyi farklı bir URL'ye yönlendirir.
9 String encodeRedirectURL(String url) Belirtilen URL'yi sendRedirect yönteminde kullanılmak üzere kodlar.
10 String encodeURL(String url) Oturum kimliği dahil, belirtilen URL'yi kodlar.
on bir void setContentType(String type) Sonucun MimeType'ını ayarlar.
12 void setContentLength(int len) Yanıt gövdesinin uzunluğunu ayarlar.
13 void setCharacterEncoding(String charset) Yanıt kodlama kümesini ayarlar.
14 void setBufferSize(int size) Yanıt gövdesi için arabellek boyutunu ayarlar.
15 boolean isCommitted() Tamponun yanıta zaten yazılıp yazılmadığını kontrol eder.
16 void flushBuffer() Yanıta arabelleğin içeriğini yazar.
17 void reset() Tamponda, başlıklarda ve yanıt kodlarında saklanan tüm verileri sıfırlar.
18 void resetBuffer() Yanıt arabelleğini temizler.

Buradaki yöntemler oldukça önemsiz. Ama aşağıda size birkaç önemli nokta vereceğim.

arabellek . Sunucu uygulamanızın yanıtı bir ara belleğe yazılır, kullanıcıya hemen gönderilmez. Bu nedenle, bir aşamada (örneğin bir hata oluşursa), ara belleğe yazılan her şeyi sıfırlayabilirsiniz (silebilir). Hatta reset() yöntemini çağırabilir ve yalnızca arabelleğin içeriğini değil, aynı zamanda yanıt kodunu içeren başlıkları da silebilirsiniz.

3.2 yönlendirme()

İkinci önemli nokta yönlendirmedir. Sunucu uygulamanız istemciyi başka bir URL'ye yönlendirmeye karar verirse, bu URL'yi bir şekilde istemciye göndermeniz gerekir. Bu, kullanılarak yapılabilir sendRedirect.

Ancak önemli bir nüans var. URI, yanıt gövdesinde izin verilenden daha geniş bir karakter aralığı içerebilir. Bu nedenle, yöntem çağrılmadan önce URL'nin geçerli bir karakter kümesine kodlanması gerekir sendRedirect(). Bunun için özel bir yöntem var encodeRedirectURL(String url). Kullanın.

Yönlendirme örneği:

public class RedirectServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws Exception {
        String newUrl = "http://google.com?q=Learn to google!";
        String redirectUrl = response.encodeRedirectURL(newUrl);
        response.sendRedirect(redirectUrl);
    }
}

3.3 getWriter() yöntemi

Ve şimdi metnimizi bir yanıt gövdesi olarak nasıl yazacağımızı öğreneceğiz. Bunu yapmak için, sınıfın bir nesne döndüren HttpServletResponseözel bir yöntemi vardır . Unutanlar varsa, bu adı taşıyan alan türüdür .getWriter()PrintStreamSystem.out

Bir servlet yanıtı olarak bazı metinler yazmak için şunlara ihtiyacınız vardır:

  • . response.getWriter()_
  • PrintStream nesnesine gerekli olduğunu düşündüğünüz her şeyi yazın (tüm veriler ara belleğe yazılacaktır).
  • close()PrintStream'deki yöntemi çağırarak arabelleği kullanıcıya gönderin .

aİki sayı toplayan ve bsonucu kullanıcıya döndüren bir sunucu uygulaması yazalım :

public class CalculatorServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws Exception {
         // Getting the parameter “a” and “b” from request
        String a = request.getParameter("a");
        String b = request.getParameter("b");

        try {
            // Convert strings to numbers and calculate sum
            int sum = Integer.parseInt(a) + Integer.parseInt(b);

            // Print HTML as a response for browser
            response.setContentType("text/html;charset=UTF-8");
            PrintWriter out = response.getWriter();

            out.println("<html>");
            out.println("<head> <title> CalculatorServlet </title> </head>");
            out.println("<body>");
            out.println("<h1> Sum == " + sum + "</h1>");
            out.println("</body>");
            out.println("</html>");
        } finally {
            out.close();
        }
    }
}
Yorumlar
  • Popüler
  • Yeni
  • Eskimiş
Yorum bırakmak için giriş yapmalısınız
Bu sayfada henüz yorum yok