Наследование сервлетов, жизненный цикл, протокол Http (2)

содержание

1. Установите кодировку

2. жизненный цикл сервлета

        преимущество:

        недостаток:

    Установите время ответа сервлета:

    Сервлет на сервере: одноэлементный, небезопасный поток

3. отношения наследования сервлетов

    1. Три абстрактных метода в интерфейсе Servlet

4. HTTP-протокол

5. Сессия

        http без гражданства:

        Решение проблемы безгражданства http: отслеживание сеансов

        Область сохранения сеанса:

6. Внутренняя переадресация и перенаправление сервера

1. Внутренняя переадресация сервера:

 2. Перенаправление клиента:


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);
    }

водяной знак, type_d3F5LXplbmhlaQ, shadow_50, text_Q1NETiBA5L2Z5omv, size_20, color_FFFFFF, t_70, g_se, x_16


            - Когда сервер запрашивает клиента, он назначит идентификатор сеанса, sessionId клиенту, каждый клиент имеет уникальный идентификатор и вернет созданный идентификатор клиенту
            - В следующий раз, когда клиент получит доступ к серверу, он ответит sessionId Результат возвращается отвечающему клиенту, что устраняет путаницу.


        Область сохранения сеанса:


         Разные сеансы не могут получить доступ к содержимому, сохраненному другими сеансами

        Область действия сеанса: от создания сеанса до закрытия браузера.
 


6. Внутренняя переадресация и перенаправление сервера

1. Внутренняя переадресация сервера:

водяной знак, type_d3F5LXplbmhlaQ, shadow_50, text_Q1NETiBA5L2Z5omv, size_20, color_FFFFFF, t_70, g_se, x_16
 

//测试内部请求转发
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);
    }
}

водяной знак, type_d3F5LXplbmhlaQ, shadow_50, text_Q1NETiBA5L2Z5omv, size_20, color_FFFFFF, t_70, g_se, x_16

водяной знак, type_d3F5LXplbmhlaQ, shadow_50, text_Q1NETiBA5L2Z5omv, size_20, color_FFFFFF, t_70, g_se, x_16

 2. Перенаправление клиента:

водяной знак, type_d3F5LXplbmhlaQ, shadow_50, text_Q1NETiBA5L2Z5omv, size_20, color_FFFFFF, t_70, g_se, x_16

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....");
    }
}

водяной знак, type_d3F5LXplbmhlaQ, shadow_50, text_Q1NETiBA5L2Z5omv, size_20, color_FFFFFF, t_70, g_se, x_16

водяной знак, type_d3F5LXplbmhlaQ, shadow_50, text_Q1NETiBA5L2Z5omv, size_20, color_FFFFFF, t_70, g_se, x_16

 водяной знак, type_d3F5LXplbmhlaQ, shadow_50, text_Q1NETiBA5L2Z5omv, size_20, color_FFFFFF, t_70, g_se, x_16

рекомендация

отblog.csdn.net/qq_52655865/article/details/124147924