3.1 Класс HttpServletResponse
Баъди даъвати метода service()
сервлети ту, web-контейнер ҷавоби муштариро дар асоси объекти HttpServletResponse
ташкил мекунад. Пас, агар хоҳӣ, ки ба ҷавоби муштарӣ ягон таъсир расонӣ, бояд ин объектро тағйир диҳӣ.
Ҷавоби сервер аз се қисм иборат аст:
- Сатре статус (масалан: 200 OK)
- Заголовкаҳо (headers)
- Бадани ҷавоб (response body)
Ва методҳои класса HttpServletResponse
низ ба 3 гурӯҳ тақсим мешаванд? Хайрияк қариб:
Методҳо | Тавсиф | |
---|---|---|
1 | void setStatus(int sc) |
Коде статуса ҷавобро насб мекунад. |
2 | void sendError(int sc) |
Ба муштарӣ хато бо коде нишон медиҳад. |
3 | void sendError(int sc, String msg) |
Ба муштарӣ хато бо коде ва паём мерасонад. |
4 | void addHeader(String name, String value) |
Заголовка ба рӯйхати заголовкахои ҷавоб илова мекунад. |
5 | void setHeader(String name, String value) |
Заголовка дар рӯйхати заголовкахои ҷавоб иваз мекунад. |
6 | boolean containsHeader(String name) |
Мебинад, ки чунин заголовка ҳаст ё не. |
7 | void addCookie(Cookie cookie) |
Cookie ба ҷавоб илова мекунад. |
8 | void sendRedirect(String location) |
Муштариро ба URL-и дигар равона мекунад. |
9 | String encodeRedirectURL(String url) |
URL-и додашударо барои истифода дар методи sendRedirect код мекунад. |
10 | String encodeURL(String url) |
URL-и додашударо, ки дар он идентификатори сессия низ дохил аст, код мекунад. |
11 | void setContentType(String type) |
MimeType of натиҷаи насб мекунад. |
12 | void setContentLength(int len) |
Дарозии ҷавобро муайян мекунад. |
13 | void setCharacterEncoding(String charset) |
Набори кодировкахои ҷавобро таъин мекунад. |
14 | void setBufferSize(int size) |
Андозаи буфери барои бадани ҷавобро таъин мекунад. |
15 | boolean isCommitted() |
Мебинад, ки буфер аллакай дар ҷавоб навишта шудааст. |
16 | void flushBuffer() |
Мӯҳтавои буферро дар ҷавоб менависад. |
17 | void reset() |
Тамоми маълумоти нигоҳдошта дар буфер, заголовкахои ва кодҳои ҷавобро тоза мекунад. |
18 | void resetBuffer() |
Буфери ҷавобро пок мекунад. |
Методҳо инҷо хеле соддаанд. Лекин ман дар поён чанд нуктаҳоро баён мекунам.
Буфер. Ҷавоби сервлети ту дар буфер навишта мешавад, на фавран ба корбар фиристода мешавад. Пас дар кадом як марҳила (агар, масалан, хатое рӯх диҳад), ту метавонӣ чизеро, ки дар буфер сабт шудааст, тоза кунӣ. Ҳатто метавон метода reset-ро фаро хонда, на танҳо мӯҳтавои буфер, балки заголовкахо ва коди ҷавобро низ тоза кунӣ.
3.2 redirect()
Моменте муҳим аз ин — ин redirect. Агар сервлети ту қарор диҳад, ки муштариро ба URL-и дигар равона кунад, ба ту лозим аст, ки ба кифоя равона кардани URL-ро ба муштарӣ нишон диҳӣ. Инро бо ёрии метода sendRedirect
кардан мумкин аст.
Аммо як нуктаи муҳиме ҳаст. URI метавонад доираи васеи аломатҳоро дарбар гирад, ки дар response body иҷозат дода нашудааст. Пас, пеш аз даъвати метода sendRedirect()
, URL бояд ба маҷмӯи аломатҳои иҷозатдодашудаи кодӣ ҷудо карда шавад. Барои ҳамин метода махсуси encodeRedirectURL(String url)
ҳаст. Истифода бар мазори он кун.
Мисоли redirect:
public class RedirectServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws Exception {
String newUrl = "http://google.com?q=Учись гуглить!";
String redirectUrl = response.encodeRedirectURL(newUrl);
response.sendRedirect(redirectUrl);
}
}
3.3 Метод getWriter()
Акнун мо меомӯзем, ки чӣ тавр матни худро ҳамчун response body нависем. Барои ин у класса HttpServletResponse
метода махсуси getWriter()
ҳаст, ки объекти PrintStream
-ро медиҳад. Агар касе фаромӯш карда бошад, маҳз ҳамин навъи майдон бо номи System.out
мебошад.
Барои навиштани ягон матн ҳамчун ҷавоби сервлети, бояд:
- Объекти PrintStream-ро, бо фарохондани метода
response.getWriter()
гиред. - Ба объекти PrintStream ҳама чизи лозимро нависед (ҳама маълумот дар буфер навишта мешавад).
- Буферро ба корбар ирсол кунед, бо фарохондани метода
close()
дар PrintStream.
Биёед, сервлете нависем, ки ду адад a
ва b
-ро ҷамъ мекунад ва натиҷаро ба корбар медиҳад:
public class CalculatorServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws Exception {
// Получаем параметр “a” и “b” из запроса
String a = request.getParameter("a");
String b = request.getParameter("b");
try {
// Преобразовываем строки в числа и считаем сумму
int sum = Integer.parseInt(a) + Integer.parseInt(b);
// Печатаем HTML в качестве ответа для браузера
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();
}
}
}
GO TO FULL VERSION