Основная функция сервлета - обработка запросов клиентов и ответа. По этой причине, для каждого запроса, веб -контейнер создаст два объекта перед вызовом Service (), а именно HttpservletRequest и httpservletresponse. В тех случаях, когда httpservletrequest инкапсулирует сообщения HTTP -запроса, httpservletresponse инкапсулирует сообщения ответных ответов HTTP. Следует отметить, что во время работы веб -сервера каждый сервис будет создавать только один объект экземпляра, но каждый запрос будет вызывать метод службы (ServletRequest REQ, ServletResponse Res) метода экземпляра Сервлета. Здесь httpservlectrequest является подклассом ServletRequest, а httpservletresponse является подклассом сервисного ответа.
Диаграмма взаимосвязи наследования на границе раздела httpservletrequest и httpservletresponse заключается в следующем:
1. httpservletresponse
Интерфейс httpservletresponse наследует от интерфейса Servletresponse. Поскольку сообщения ответов HTTP делятся на три части: строка состояния, тело ответа и тело сообщения, интерфейс httpservletresponse определяет метод для отправки кода состояния ответа, заголовка ответа и корпуса сообщения ответа клиенту. Хотя в интерфейсе httpservletresponse есть много методов, мы используем только несколько часто используемых. Если вы используете другие методы, вы можете прочитать исходный код или связанную информацию ответа.
Отправить функции, связанные с кодом состояния
Метод Описание Public void setStatus (int sc) Устанавливает код состояния для сообщения ответа. Веб -сервер по умолчанию генерирует строку состояния с кодом состояния 200. Public void senderror (int sc) отправляет код состояния, указывающий сообщение об ошибке. Второй метод также добавляет текстовое сообщение для подсказки описания public void senderror (int sc, string msg)
Отправить функции, связанные с заголовком ответа
Метод Описание Public void Addheader (имя строки, значение строки) Устанавливает поле заголовка ответа HTTP, имя Указывает имя поля, а значение указывает значение поля. Addheader может добавить поле заголовка ответа с тем же именем, Setheader переоценит поле заголовка с тем же именем public void setheader (string name, string value) public void setcontentlength (int len) Устанавливает размер содержания объекта в ответном сообщении, в байтах, то есть, установленные значения, которые являются выходными поэтапными, которые типа, типичный тип . IS, устанавливает значение полевого поля контента Public void SetCaracterCoding (String charset) Устанавливает кодирование символов выходного контента, то есть устанавливает значение поля типа контента. Обратите внимание, что приоритет этого метода выше, чем у SetContentType public void sendreedirect (строковое местоположение) запрос сервиса перенаправления
Отправить функции, связанные с корпусом ответа
| метод | иллюстрировать |
| public ServletOutputStream getOutputStream () | Получите байтовый выходной поток httpservletresponse servletoutputstram |
| public printwriter getWriter () | Получите тип Servletwriter Pliter Type Prith |
Китайская искаженная проблема
Данные в компьютерах хранятся в двоичной форме, поэтому, когда текст передается, будет происходить преобразование между байтами символов. Преобразование между символами и байтами завершено через таблицу поиска кода. Процесс преобразования символов в байты называется кодированием, а процесс преобразования байтов в символы называют декодированием. Если таблицы кода, используемые для кодирования и декодирования, разные, возникают проблемы с искаженным кодом.
ПРИМЕЧАНИЕ. При кодировании потока вывода символов объекта httpservletresponse по умолчанию кодирование ISO 8859-1. Этот метод кодирования несовместим с китайцем. Например, «Китай» будет кодироваться как «63 63» (символы, которые не могут быть найдены в таблице кода ISO 8959-1, будут отображаться 63). Когда браузер декодирует полученные данные, он по умолчанию будет использовать GB2312, декодировать «63» до «?», А браузер декодирует двух символов «Китай» на «??».
Пример программы httpservletresponse
пакет zzz; импорт java.io.ioexception; import java.io.printwriter; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservervess; Doget (httpservlectrequest-запрос, ответ httpservletresponse). Dopost (httpservletrequest -запрос, httpservletresponse response) бросает ioexception {this.doget (запрос, ответ);Иногда вы сталкиваетесь с проблемой регулярного прыжка страниц. Поле заголовка обновления в HTTP может уведомить браузер автоматически обновлять и прыгать на другие страницы в течение указанного времени, и веб -страница будет регулярно освещаться и прыгать на указанную страницу.
пакет zzz; импорт java.io.ioexception; import java.io.printwriter; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservervess; Doget (httpservlectrequest-запрос, httpservletresponse response) throws ioException {// установить ответ ответа ответа. response.setheader ("rebresh", "2; url = http: //www.baidu.com"); Printwriter Out = response.getWriter (); out.println («Привет, Китай, прыгай в Байду через 2 секунды ...»); } @Override public void dopost (httpservletrequest, httpservletresponse response) throws ioexception {this.doget (запрос, ответ); }}2. httpservletrequest
Интерфейс httpservletrequest наследует интерфейс ServletRequest и специально используется для инкапсулированных сообщений HTTP -запросов. Поскольку информация о запросе HTTP включает в себя три части: строка запроса, заголовок запроса и корпус запроса, интерфейс HTTPServLetRequest определяет связанные методы для получения строки запроса, заголовка запроса и корпуса запроса.
Связанные методы получения строк запроса
| метод | иллюстрировать |
| public String getMethod () | Получить методы запроса HTTP, публиковать, получить и т. Д. |
| public String getRequesturi () | Получить часть имени ресурса в строке запроса |
| public String getQueryString () | Получить часть параметра в строке запроса |
| public String getProtocol () | Получите имя и версию протокола в строке запроса, например, http 1.1 |
| public String getContextPath () | Получить путь, принадлежащий веб -приложению в URL -адресе запроса |
На самом деле, метод линии запроса можно увидеть из имени метода, поэтому я не буду размещать ее здесь один за другим.
Связанные методы получения заголовков сообщений запроса
| метод | иллюстрировать |
| Public String Getheader (название строки) | Получите значение указанного поля, если не возвращается NULL, если есть несколько возвратов, первое значение |
| публичное перечисление <string> getheaders (имя строки) | Возвращает объект сбора перечисления с указанным полем |
| Публичное перечисление <string> getheadernames () | Возвращает объект сбора перечисления, содержащий все поля |
| public String getContentType () | Получите значение поля контента |
Распечатайте все значения поля заголовка запроса
Пакет zzz; импорт java.io.ioexception; import java.io.printwriter; import java.util.enumeration; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.servled.httpservess; Httpservlet {@override public void doget (httpservletrequest, httpservlectresponse response) Throws ioexception {// Установить ответ ответа ответа. SetContentType ("Text/html; charset = utf-8"); Printwriter Out = response.getWriter (); Enumeration <string> names = request.getheadernames (); while (names.hasmoreelements ()) {string name = names.nextelement (); String value = request.getheader (name); out.println (name + ":" + value + "</br>"); }} @Override public void dopost (httpservletrequest, httpservletresponse response) throws ioexception {this.doget (запрос, ответ); }}Связанные методы получения обратного корпуса
Метод Описание Public ServletInptStream getInputStream () Получает запрошенный объект ServletInputStream. Если содержание объекта не текстовое, вы можете получить тело сообщения о образе запроса только через метод GetInputStream. Запрашиваемый BufferedReader getReader () получает запрошенный объект BufferedReader. Этот объект будет преобразовать данные бата содержимого объекта в текстовую строку, кодируемую указанным набором символов.
Получить параметры запроса
| метод | иллюстрировать |
| public String getParameter (имя строки) | Получить указанное значение параметра и вернуть NULL без этого параметра |
| публичное перечисление <string> getParameterNames () | Возвращает объект перечисления, содержащий все имена параметров |
| public String [] getParametervalues (String name) | В HTTP -запросе может быть несколько одинаковых параметров, чтобы получить все значения параметров, соответствующие одному имени параметра. |
3. requestDispatcher Interface
Когда клиент запрашивается веб -ресурс, если вы хотите, чтобы сервер уведомил другой ресурс, такой как обработка запроса, в дополнение к использованию функции sendirectect () для реализации перенаправления, он также может быть реализован через объект экземпляра интерфейса requestDispatcher. Метод получения объекта RequestDispatcher определяется в интерфейсе ServletRequest - GetRequestDispatcher (String Path), который возвращает объект requestDispatcher ресурса, указанный определенным путем. Путь параметра должен начинаться с «/», чтобы представлять корневой каталог текущего веб -приложения, то есть путь пути должен быть в этой веб -программе, в противном случае произойдет исключение.
Методы в интерфейсе requestDispatcher
| метод | Функция |
| Public Void Forw | Передайте сервлет в другой веб -ресурс и передайте запрос другому ресурсу для ответа |
| Public void включает (запрос ServletRequest, ответ Servletresponse) | Используется для включения других ресурсов в качестве текущего содержания ответа |
Выше приведено подробное объяснение веб -запроса Java и примеров ответа, представленных редактором. Я надеюсь, что это будет полезно для всех!