CodeGym/Kurso sa Java/Modyul 3/Paghubog ng Mga Tugon sa Servlet

Paghubog ng Mga Tugon sa Servlet

Available

3.1 klase ng HttpServletResponse

Pagkatapos tawagan service()ang iyong servlet method, bubuo ang web container ng tugon sa client batay sa HttpServletResponse. Kaya kung gusto mong kahit papaano ay maimpluwensyahan ang tugon sa kliyente, dapat mong baguhin ang bagay na ito.

Ang tugon ng server ay binubuo ng tatlong bahagi:

  • Linya ng katayuan (halimbawa: 200 OK)
  • Mga header
  • Katawan ng pagtugon

At ang mga pamamaraan ng klase HttpServletResponseay nahahati din sa 3 pangkat? halos:

Paraan Paglalarawan
1 void setStatus(int sc) Itinatakda ang code ng katayuan ng tugon.
2 void sendError(int sc) Nagpapadala ng error sa kliyente na may tinukoy na code.
3 void sendError(int sc, String msg) Nagpapadala ng error kasama ang tinukoy na code at isang mensahe sa kliyente.
4 void addHeader(String name, String value) Nagdaragdag ng header sa listahan ng mga header ng tugon.
5 void setHeader(String name, String value) Binabago ang header sa listahan ng mga header ng tugon.
6 boolean containsHeader(String name) Sinusuri kung mayroon na ang header.
7 void addCookie(Cookie cookie) Nagdaragdag ng Cookie sa tugon.
8 void sendRedirect(String location) Nire-redirect ang kliyente sa ibang URL.
9 String encodeRedirectURL(String url) Ine-encode ang tinukoy na URL para gamitin sa paraan ng sendRedirect.
10 String encodeURL(String url) Ine-encode ang tinukoy na URL, kasama ang session ID.
labing-isa void setContentType(String type) Itinatakda ang MimeType ng resulta.
12 void setContentLength(int len) Itinatakda ang haba ng katawan ng tugon.
13 void setCharacterEncoding(String charset) Itinatakda ang hanay ng pag-encode ng tugon.
14 void setBufferSize(int size) Itinatakda ang laki ng buffer para sa body ng tugon.
15 boolean isCommitted() Sinusuri kung ang buffer ay naisulat na sa tugon.
16 void flushBuffer() Isinulat ang mga nilalaman ng buffer sa tugon.
17 void reset() Nire-reset ang lahat ng data na nakaimbak sa buffer, mga header at mga response code.
18 void resetBuffer() Tinatanggal ang buffer ng tugon.

Ang mga pamamaraan dito ay medyo maliit. Ngunit bibigyan kita ng ilang mga highlight sa ibaba.

Buffer . Ang tugon ng iyong servlet ay isinulat sa isang buffer, hindi kaagad ipinadala sa gumagamit. Samakatuwid, sa ilang yugto (kung, halimbawa, may naganap na error), maaari mong i-reset (burahin) ang lahat ng nakasulat sa buffer. Maaari mo ring tawagan ang reset() na pamamaraan at burahin hindi lamang ang mga nilalaman ng buffer, kundi pati na rin ang mga header na may response code.

3.2 redirect()

Ang pangalawang mahalagang punto ay ang pag-redirect. Kung nagpasya ang iyong servlet na i-redirect ang kliyente sa isa pang URL, kailangan mong ipadala ang URL na ito sa kliyente. Magagawa ito gamit ang sendRedirect.

Ngunit mayroong isang mahalagang nuance. Ang URI ay maaaring maglaman ng mas malawak na hanay ng mga character kaysa sa pinapayagan sa katawan ng tugon. Samakatuwid, dapat munang i-encode ang URL sa isang wastong set ng character bago tawagan ang paraan sendRedirect(). Mayroong isang espesyal na paraan para dito encodeRedirectURL(String url). Gamitin ito.

Halimbawa ng pag-redirect:

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() na pamamaraan

At ngayon ay matututunan natin kung paano isulat ang ating teksto bilang isang katawan ng tugon. Upang gawin ito, ang klase HttpServletResponseay may isang espesyal na pamamaraan getWriter()na nagbabalik ng isang bagay PrintStream. Kung may nakalimutan, ito ang uri ng field na may pangalang System.out.

Upang magsulat ng ilang teksto bilang tugon ng servlet, kailangan mo:

  • Kunin ang bagay na PrintStream sa pamamagitan ng pagtawag sa response.getWriter().
  • Isulat ang anumang sa tingin mo ay kinakailangan sa PrintStream object (lahat ng data ay isusulat sa buffer).
  • Ipadala ang buffer sa user sa pamamagitan ng pagtawag sa pamamaraan close()sa PrintStream.

Sumulat tayo ng isang servlet na nagdaragdag ng dalawang numero aat bibabalik ang resulta sa user:

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();
        }
    }
}
Mga komento
  • Sikat
  • Bago
  • Luma
Dapat kang naka-sign in upang mag-iwan ng komento
Wala pang komento ang page na ito