содержание
Установите время ответа сервлета:
Сервлет на сервере: одноэлементный, небезопасный поток
3. отношения наследования сервлетов
1. Три абстрактных метода в интерфейсе Servlet
Решение проблемы безгражданства http: отслеживание сеансов
6. Внутренняя переадресация и перенаправление сервера
1. Внутренняя переадресация сервера:
1. Установите кодировку
В конфигурации файла xml сервлет может соответствовать нескольким сопоставлениям. Это означает, что вы можете видеть, какой путь использует пользователь для доступа
к сопоставлению. Он может соответствовать только одному сервлету
до tomcat8:
(1. Если это пост-доставка метод:
request.setCharacterEncoding("UTF-8");
(2. Если это метод передачи get
1. Сначала преобразовать данные в массив байтов
String name = request.getParameter("name");
byte[] by = name.getBytes("ISO-8859 -1");
2. Преобразовать массив байтов в строку в соответствии с установленным форматом кодировки
name = new String(by,"UTF-8");
После tomcat8:
только для метода post : request.setCharacterEncoding("UTF-8-8");
2. жизненный цикл сервлета
Сервер включен и сервер выключен
По умолчанию:
когда запрос принят в первый раз, сервлет будет инициализирован (init()), создан (servce()),
а затем каждый раз, когда он обновляется и закрывает веб-страницу, вызывает servce() Метод службы действует
до тех пор, пока сервер не будет выключен, жизненный цикл сервлета не завершится, и когда метод уничтожения (destroy())
будет запрошен в первый раз, tomcat будет создается, инициализируется, а затем обслуживается, а затем каждая служба выполняется этим экземпляром объекта.
Преимущества :
Создавайте объекты только один раз, повышайте эффективность и снижайте нагрузку на сервер
Недостатки :
Первая служба занимает много времени
- если вам нужно улучшить скорость запуска системы, текущее состояние по умолчанию в порядке
- Если вы хотите улучшить скорость ответа сервлета, вы должны установить время ответа сервлета.
Установите время ответа сервлета:
Установите <load-on-startup>1</load-on-startup> в сервлете в xml, чтобы установить время инициализации и создания экземпляра. Чем короче
время инициализации и создания экземпляра, тем раньше время инициализации и создания экземпляра
. создание экземпляра выполняется при запуске tomcat.Когда
первый пользователь получает доступ, прямая служба не будет инициализирована и создана, скорость запуска будет медленнее, но скорость ответа службы станет быстрее, что улучшит взаимодействие с пользователем.
Сервлет на сервере: одноэлементный, небезопасный поток
Синглтон: существует только один экземпляр сервлета
Небезопасный поток: при доступе нескольких потоков, если один поток изменяет переменную в сервлете, это может привести к изменению логического пути других потоков
Поэтому не определяйте логику, связанную с сервлетом class.variable, и не изменяйте переменную
3. отношения наследования сервлетов
Абстрактный класс HttpServlet Последующее имя ——> Реализация абстрактного класса javax.servlet.GenericServlet ——> Интерфейс сервлета
1. Три абстрактных метода в интерфейсе Servlet
init(ServletConfig var1); Метод инициализации
void service(ServletRequest var1, ServletResponse var2); Service method
void destroy(); Метод уничтожения
2. Методы в абстрактном классе javax.servlet.GenericServlet реализуют три абстрактных метода в сервлете, но это все еще абстрактный метод 3. Метод
в интерфейсе реализован в абстрактном классе HttpServlet
404: Ошибка и соответствующая страница не найдена
405: Метод метода по умолчанию doget Ошибка 405, ошибка метода
500: внутренняя ошибка сервера
200: нормальный ответ
302: перенаправление
4. HTTP-протокол
протокол http: протокол передачи гипертекста
http не имеет состояния
http включая запрос и ответ
1. запрос: включая 1) строку запроса 2) заголовок запроса 3) тело запроса
1) строку запроса:
1. метод
запроса 2. URL-адрес запроса
3. Запрашиваемый протокол: (обычно http1.1)
2) Заголовок запроса:
включая версию браузера, номер порта, содержимое запроса и т. д., которые клиент хочет отправить с сервера
3) Тело запроса:
1) Метод получения: Нет тело запроса с queryString
2).Метод публикации: с данными формы тела запроса
3).Метод JSON: полезная нагрузка запроса
2. Ответ:
1).Строка ответа
включает: протокол, код ответа (200), статус ответа
2).Ответ заголовок
включает: информацию о сервере (информацию о версии, ), размер содержимого ответа, формат и т . д
. 3).
Содержимое конкретного ответа и конкретная информация о странице.
5. Сессия
http без гражданства:
Это означает, что сервер не может различить, пришел ли запрос от того же клиента
или нет, он не имеет состояния: может возникнуть путаница, и сервер отвечает на запрос, отправленный клиентом А клиенту Б.
Решение проблемы безгражданства http: отслеживание сеансов
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
HttpSession id = req.getSession();
System.out.println("创建的session id为:"+id);
}
- Когда сервер запрашивает клиента, он назначит идентификатор сеанса, sessionId клиенту, каждый клиент имеет уникальный идентификатор и вернет созданный идентификатор клиенту
- В следующий раз, когда клиент получит доступ к серверу, он ответит sessionId Результат возвращается отвечающему клиенту, что устраняет путаницу.
Область сохранения сеанса:
Разные сеансы не могут получить доступ к содержимому, сохраненному другими сеансами
Область действия сеанса: от создания сеанса до закрытия браузера.
6. Внутренняя переадресация и перенаправление сервера
1. Внутренняя переадресация сервера:
//测试内部请求转发
public class DemoServlet02 extends HttpServlet {
@Override
protected void service(HttpServletRequest requuest, HttpServletResponse response) throws ServletException, IOException {
System.out.println("demo02....");
}
}
public class DemoServlet01 extends HttpServlet {
@Override
protected void service(HttpServletRequest requuest, HttpServletResponse response) throws ServletException, IOException {
System.out.println("demo01....");
//demo01跳转到demo02
requuest.getRequestDispatcher("demo02").forward(requuest,response);
}
}
2. Перенаправление клиента:
public class DemoServlet01 extends HttpServlet {
@Override
protected void service(HttpServletRequest requuest, HttpServletResponse response) throws ServletException, IOException {
System.out.println("demo01....");
//测试内部请求转发
// requuest.getRequestDispatcher("demo02").forward(requuest,response);
//测试重定向
response.sendRedirect("demo02");
}
}
public class DemoServlet02 extends HttpServlet {
@Override
protected void service(HttpServletRequest requuest, HttpServletResponse response) throws ServletException, IOException {
System.out.println("demo02....");
}
}