Давайте посмотрим на блок -схему:
Процесс запросов на обработку сервера:
(1) Каждый раз, когда сервер получает запрос, он откроет новый поток для запроса.
(2) Сервер будет инкапсулировать данные запроса клиента в объект запроса, а запрос является носителем данных запроса!
(3) Сервер также создаст объект ответа, который подключен к клиенту и может использоваться для отправки ответа на клиент.
Как видно из блок -схемы, в запросе и ответе Javaweb двумя наиболее важными параметрами являются запрос и ответ, которые являются в методе Service () Сервлета.
1. Концепция ответа:
Ответ представляет собой параметр метода сервлета. Сервис и имеет тип javax.servlet.http.httpservletresponse. Когда клиент делает каждый запрос, сервер создает объект ответа и передает его методу servlet.service (). Объект ответа используется для реагирования на клиента, что означает, что использование объекта ответа в методе Service () может завершить работу ответа для клиента.
Функции объекта ответа делятся на следующие четыре типа:
(1) Установить информацию заголовка ответа
(2) Отправить код состояния
(3) Установите текст ответа
(4) перенаправление
2. Текст ответа
Ответ является объектом ответа. Поток отклика тела ответа (тело ответа) может использоваться для вывода тела отклика на клиент. Repsonse предоставляет в общей сложности два объекта потока ответов:
(1) printwriter out = response.getWriter (): Получить поток символов;
(2) ServletOutputStream OUT = response.getOutputStream (): Получить байтовый поток;
Конечно, если содержание тела ответа является символом, то используйте response.getWriter (), и если содержимое ответа составляет байты, например, при загрузке, то вы можете использовать response.getOutputStream ().
Обратите внимание , что в одном запросе оба потока не могут быть использованы одновременно! То есть вы используете ответ.getWriter () или response.getOutputStream (), но вы не можете использовать оба потока одновременно. В противном случае будет брошено нелегальная статость.
3. Установите информацию заголовка ответа
Вы можете использовать метод Setheader () объекта ответа, чтобы установить заголовок ответа! Заголовок ответа с использованием этого метода в конечном итоге будет отправлен в браузер клиента!
(1) response.setheader ("Контент-тип", "Text/html; charset = utf-8"): установите заголовок ответа типа контента. Функция этого заголовка состоит в том, чтобы сказать браузеру, что содержимое ответа является типом HTML и кодируется как UTF-8. И в то же время, поток символов, кодирующий ответ, будет установлен на UTF-8, то есть response.setcharaceterencoding («UTF-8»);
(2) response.setheader («Обновление», «5; url = http: //www.baidu.com»): он автоматически перейдет на домашнюю страницу Baidu через 5 секунд.
4. Установите код состояния и другие методы
(1) response.setContentType ("text/html; charset = utf-8"): эквивалентно вызовому response.setheader ("content-type", "text/html; charset = utf-8");
(2) response.setcharacterencoding ("UTF-8"): установите кодирование символа символа потока ответа в UTF-8;
(3) response.setStatus (200): установите код состояния;
(4) response.senderror (404, «Ресурс, который вы ищете, не существует»): При отправке кода состояния ошибки Tomcat перейдет на фиксированную страницу ошибки, но может быть отображено сообщение об ошибке.
5. перенаправить (****** Ключ *******)
5.1 Что такое перенаправление (два запроса)
Когда вы посещаете http://www.sun.com, вы обнаружите, что URL в адресной строке браузера станет http://www.oracle.com/us/sun/index.htm, что является перенаправлением. Пере перенаправление - это когда сервер уведомляет браузер для доступа к другому адресу, то есть выдать другой запрос.
5.2 Как завершить перенаправление?
Ответ: Код состояния для перенаправления составляет 302. Сначала мы используем объект ответа, чтобы отправить код состояния 302 в браузер, а затем устанавливаем местоположение, то есть предоставить доступный URL, и браузер обращается к новому URL, чтобы реализовать перенаправление.
Например:
Общедоступный класс Aservlet расширяет httpservlet {public void Doget (httpservletrequest запрос, httpservletresponse response) Throws ServletException, ioException {response.setStatus (302); response.setheader ("location", "http://www.baidu.com"); }}Целью вышеуказанного кода является: после доступа к Aservlet, браузер будет уведомлен о перенаправлении на домашнюю страницу Baidu. После того, как клиент -браузер анализирует код ответа 302, он знает, что сервер позволяет ему перенаправить, поэтому он немедленно получит местоположение заголовка ответа, а затем выпустит второй запрос.
Существует также метод быстрого перенаправления, то есть используйте метод response.sendredirect (). Например, два предложения в приведенном выше примере могут быть заменены на response.sendredirect ("http://www.baidu.com").
request-encaplality все данные запроса от клиента
1. Обзор запроса
Запрос - это параметр метода servlet.service () и имеет тип javax.servlet.http.httpservletrequest. Когда клиент делает каждый запрос, сервер создаст объект запроса и инкапсуляет данные запроса в запрос, а затем передаст его методу Service (), когда вызовут метод servlet.service (), который показывает, что данные запроса могут быть получены через объект запроса в методе Service ().
Как показано на рисунке:
Функция запроса может быть разделена на следующие типы:
(1) инкапсулировать данные заголовка запроса;
(2) Инкапсулировать текстовые данные запроса. Если это запрос GET, то текст нет;
(3) запрос - это объект домена, который может быть добавлен и извлечен в качестве карты;
(4) Запрос содержит функции переадресации запроса и включения запроса.
2. Метод запроса домена
Запрос - это доменное объект! В Javaweb есть четыре объекта домена, среди которых ServletContext является объектом домена, который создает только один объект ServletContext во всем приложении. Запрос один из запросов, который может обмениваться данными в запросе.
Запрос создает объект запроса. Если в запросе было получено несколько сервлетов, несколько сервлетов могут использовать запросы для обмена данными. Теперь мы не знаем, как пройти через несколько сервлетов в запросе.
Вот домен метод запроса:
(1) void setattribute (имя строки, значение объекта): используется для хранения объекта, его также можно назвать хранением атрибута домена, например: ServletContext.setAttribute ("xxx", "xxx"), атрибут домена сохраняется в запросе, имя атрибута домена - это xxx, а значение атрибута домена - xxx. Обратите внимание, что если метод называется несколько раз и используется одно и то же имя, последнее значение будет перезаписано, что такое же, как и карта;
(2) Object getAttribute (String name): используется для получения данных в запросе. Его нужно хранить, прежде чем его получить. Например: string value = (string) request.getattribute ("xxx"); Чтобы получить атрибут домена с именем xxx;
(3) void removeAttribute (имя строки): используется для удаления атрибута домена в запросе. Если атрибут домена, указанный по имени параметра, не существует, то этот метод ничего не делает;
(4) перечисление getattributeNames (): получить имена всех атрибутов домена;
3. Передайте параметры по запросу
Есть два наиболее распространенных способа передачи параметров на клиенте:
(1) Прямой ввод из адресной строки браузера: он должен быть запросом GET;
(2) гиперссылка: это должен быть запрос на получение;
(3) Форма: может быть получена или пост, что зависит от значения атрибута метода <form>;
Разница между запросом GET и запросом после:
(1) Получить запрос:
Параметры запроса будут отображаться в адресной строке браузера, поэтому он небезопасен;
Предел длины параметра запроса находится в пределах 1K;
Запрос GET не имеет корпуса запроса, поэтому кодирование параметра не может быть установлено через request.setcharacterencoding ();
(2) Запрос сообщения:
Параметры запроса не будут отображать адресную строку браузера, которая является относительно безопасной;
Нет ограничения на длину запрошенного параметра;
4. Запрос на пересылку и включение запроса (****** Ключ *******)
Будь то переадресация запроса или включение запроса, это означает, что несколько сервлетов совместно обрабатывают запрос. Например, Servlet1 обрабатывает запрос, а затем Servlet1 перенаправляет его в Servlet2, чтобы продолжить обработку запроса.
Запрос пересылки и запрос, включая
RequestDispatcher rd = request.getRequestDispatcher ("/myservlet"); Используйте запрос, чтобы получить объект RequestDispatcher. Параметр метода является путь сервлета направленного или содержащегося сервлета.
Переадресация запроса: rd.forward (запрос, ответ);
Запрос включает в себя: rd.include (запрос, ответ);
Иногда запрос требует нескольких сервлетов для сотрудничества, поэтому вам нужно прыгнуть в один сервлет на другой!
> Запрос охватывает несколько сервлетов и требует пересылки и включения.
> Переадресация запроса: тело ответа завершено следующим сервлетом! Текущий сервлет может установить заголовок ответа! (Оставьте голову, но не корпус), то есть соответствующая голова, установленная текущей сервкой, действительна, а соответствующее тело недействительно.
> Запрос содержит: тело ответа не завершено двумя сервлетами! (Оставайся все) все действительны.
> Будь то переадресация запроса или запрос, содержащий, он находится в рамках запроса! Используйте тот же запрос и ответ!
Переадресация и запрос запроса включают сравнение:
(1) Если запрос направляется в Bservlet в Aservlet, то корпус отклика не разрешается выходить в Aservlet, то есть response.getWriter () и response.getOutputStream () больше не может быть выведен в клиент. Эта работа должна выполняться Bservlet; Если он используется для включения запроса, такого ограничения нет;
(2) Хотя пересылка запроса не может вывести тело ответа, заголовок ответа все еще может быть установлен, например: response.setContentType ("Text/html; charset = utf-8");
(3) Большинство запросов применяются на страницах JSP для завершения слияния нескольких страниц;
(4) Переадресация запроса в основном применяется в сервлетах, а цель пересылки в основном представляет собой страницы JSP;
Как показано на рисунке:
Сравнение пересылки и перенаправления запросов
(1) Переадресация запроса - это один запрос, в то время как перенаправление - два запроса;
(2) После пересылки запроса адресная строка браузера не изменится, но перенаправление изменится, поскольку перенаправление составляет два запроса;
(3) целью запроса пересылки может быть только ресурсы в этом приложении, и целью перенаправления может быть другие приложения;
(4) Метод пересылки запроса для Aservlet и Bservlet одинаков, то есть оба являются или оба являются сообщениями, поскольку переадресация запроса является запросом;
(5) второй запрос на перенаправление должно быть получено;
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.