3.1 Клас HttpServletResponse
След като извика service()
вашия сервлет метод, уеб контейнерът ще генерира отговор на клиента въз основа на HttpServletResponse
. Така че, ако искате по няHowъв начин да повлияете на отговора на клиента, тогава трябва да промените този обект.
Отговорът на сървъра се състои от три части:
- Ред на състоянието (например: 200 OK)
- Заглавки
- Тяло за отговор
И методите на класа HttpServletResponse
също са разделени на 3 групи? почти:
Методи | Описание | |
---|---|---|
1 | void setStatus(int sc) |
Задава codeа на състоянието на отговора. |
2 | void sendError(int sc) |
Изпраща грешка на клиента с посочения code. |
3 | void sendError(int sc, String msg) |
Изпраща грешка с посочения code и съобщение до клиента. |
4 | void addHeader(String name, String value) |
Добавя заглавка към списъка със заглавки на отговор. |
5 | void setHeader(String name, String value) |
Променя заглавката в списъка със заглавки на отговор. |
6 | boolean containsHeader(String name) |
Проверява дали заглавката вече съществува. |
7 | void addCookie(Cookie cookie) |
Добавя бисквитка към отговора. |
8 | void sendRedirect(String location) |
Пренасочва клиента към различен URL address. |
9 | String encodeRedirectURL(String url) |
Кодира посочения URL за използване в метода sendRedirect. |
10 | String encodeURL(String url) |
Кодира посочения URL, включително ID на сесията. |
единадесет | void setContentType(String type) |
Задава MimeType на резултата. |
12 | void setContentLength(int len) |
Задава дължината на тялото на отговора. |
13 | void setCharacterEncoding(String charset) |
Задава набора за codeиране на отговора. |
14 | void setBufferSize(int size) |
Задава размера на буфера за тялото на отговора. |
15 | boolean isCommitted() |
Проверява дали буферът вече е записан в отговора. |
16 | void flushBuffer() |
Записва съдържанието на буфера в отговора. |
17 | void reset() |
Нулира всички данни, които се съхраняват в буфера, заглавки и codeове на отговор. |
18 | void resetBuffer() |
Изчиства буфера за отговор. |
Методите тук са доста тривиални. Но ще ви дам няколко акцента по-долу.
буфер . Отговорът на вашия сървлет се записва в буфер, а не се изпраща веднага на потребителя. Следователно на няHowъв етап (ако например възникне грешка) можете да нулирате (изтриете) всичко, което е записано в буфера. Можете дори да извикате метода reset() и да изтриете не само съдържанието на буфера, но и заглавките с codeа на отговора.
3.2 пренасочване()
Вторият важен момент е пренасочването. Ако вашият сървлет реши да пренасочи клиента към друг URL, тогава трябва по няHowъв начин да изпратите този URL на клиента. Това може да стане с помощта на sendRedirect
.
Но има важен нюанс. URI може да съдържа по-широк диапазон от знаци, отколкото е позволено в тялото на отговора. Следователно URL addressът трябва първо да бъде codeиран във валиден набор от знаци, преди да извика метода sendRedirect()
. За това има специален метод encodeRedirectURL(String url)
. Използваи го.
Пример за пренасочване:
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().
А сега ще научим How да напишем нашия текст като тяло на отговор. За да направи това, класът HttpServletResponse
има специален метод getWriter()
, който връща обект PrintStream
. Ако някой е забравил, това е типът поле с името System.out
.
За да напишете няHowъв текст като отговор на сървлет, трябва:
- Вземете обекта PrintStream, като извикате
response.getWriter()
. - Напишете Howвото смятате за необходимо в обекта PrintStream (всички данни ще бъдат записани в буфера).
- Изпратете буфера на потребителя, като извикате метода
close()
на PrintStream.
Нека напишем сървлет, който събира две числа a
и b
връща резултата на потребителя:
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();
}
}
}
GO TO FULL VERSION