CodeGym/Java курс/Модул 3/Въведение в сервлетите

Въведение в сервлетите

На разположение

1.1 интерфейс Servlet

Днес започваме нова и интересна тема - сървлетите . Добавянето на сървлети към Java доведе до това, че Java де факто стана стандарт за големи сървърни applications. 80% от целия корпоративен софтуер в света е написан на Java. А в Китай всичко е на 100%. И така, Howво представляват сервлетите?

Сървлетът е точно това, което превръща Java програма в уеб услуга и й позволява да обработва заявки от клиенти. И беше така...

През 90-те години, веднага след появата на World Wide Web, се появяват уеб клиенти (браузъри) и уеб сървъри. Уеб сървърите обикновено просто разпространяват file, който са съхранor в Интернет: html страници, скриптове, снимки и т.н.

В един момент всички стигнаха до извода, че ще е необходимо да направим и двете страни по-умни. Към HTML страниците беше добавен JavaScript, а към сървърите бяха добавени плъгини – специални скриптове, които се извикваха в отговор на определени заявки и правеха поведението на сървъра по-гъвкаво и по-умно.

Така че сървлетът е такъв Java плъгин , който е вграден Java web-serverи му позволява да изпълнява Java code, когато бъде поискан за определени страници. И вече този Java code, представен от клас, наследен от класа Servlet, направи това, което неговите разработчици възнамеряваха.

И Howто вече знаете, най-популярният Java уеб сървър е Tomcat . Наречен, между другото, в чест на котката Том от анимационния филм „Том и Джери“.

Как Tomcat взаимодейства със сървлетите? Всъщност този процес е стандартизиран и се нарича жизнен цикъл на сервлета . В него сървлетът е зареждаем обект, а уеб сървърът е контейнер на сървлет .

Ако сървлетът все още не е зареден , тогава:

  1. Класът сървлет се зарежда от контейнера.
  2. Контейнерът създава екземпляр на класа (обекта) на сървлета.
  3. Контейнерът извиква метод init()на обекта на сервлета. Методът се извиква само веднъж.

Стандартен цикъл на работа - обслужване на клиентска заявка :

  • Всяка заявка се обработва в отделна нишка.
  • Контейнерът извиква метод service()на сървлета и предава обектите ServletRequest и ServletResponse там.
  • За да прекрати сървлета, се извиква метод destroy()на обекта на сервлета. Извиква се само веднъж.

Може да има много причини, поради които сервлетът се прекратява:

  • Програмистът рестартира уеб сървъра, необходимо е грациозно да изключи всички сървлети.
  • Програмистът зарежда нова version на сървлета, старата трябва да бъде разтоварена правилно.
  • И така нататък.

Запомнете основното нещо: уеб сървърът и неговите сървлети трябва да работят без повреди и рестартирания в продължение на месеци, обслужвайки хиляди заявки в minutesа. Следователно, codeът Howто за зареждане, така и за работа и разтоварване на сървлет трябва винаги да бъде написан с много високо качество.

1.2 Клас HttpServlet

Класът Servlet съществува, за да стандартизира How работят сървлет и контейнер. Програмистите не работят директно с този клас. Е, те рядко работят. Най-често използваният клас HttpServletе наследен от Servlet.

Този клас има няколко метода, които ще ни бъдат полезни. Често ще ги използвате:

Метод Описание
1 init() Извиква се веднъж при зареждане на сървлета
2 destroy() Извиква се веднъж, когато сървлетът е разтоварен
3 service(HttpRequest, HttpResponse) Извиква се за всяка нова заявка към сервлета
4 doGet(HttpRequest, HttpResponse) Извиква се за всяка нова GET заявка към сървлета
5 doPost(HttpRequest, HttpResponse) Извиква се за всяка нова POST заявка към сървлета
6 doHead(HttpRequest, HttpResponse) Извиква се за всяка нова заявка HEAD към сървлета
7 doDelete(HttpRequest, HttpResponse) Извиква се за всяка нова заявка DELETE към сървлета
8 doPut(HttpRequest, HttpResponse) Извиква се за всяка нова PUT заявка към сървлета

Методите init()и destroy()са наследени от класа Servlet. Следователно, ако решите да ги замените във вашия сървлет, ще трябва също да извикате тяхната реализация от базовия клас. За това се използва командата super.method name().

Пример за сервлет:

public class FirstHttpServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        // Getting the parameter “secret” from request
        String secret = request.getParameter("secret");

        // Put parameter “secret” into Http-session
        HttpSession session = request.getSession(true);
        session.setAttribute("secret", secret);

        // Print HTML as response for browser
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Header</title>");
            out.println("</head>");
            out.println("<body>");
            out.println("<h1>Servlet example "+ secret +"</h1>");
            out.println("</body>");
            out.println("</html>");
        } finally {
            out.close();
        }
    }
}

1.3 услуга (HttpServletRequest, HttpServletResponse) метод

Ако погледнете обработката на клиентска заявка от гледна точка на сървлет, тогава нещата са нещо подобно.

За всяка клиентска заявка контейнерът (уеб сървър) създава HttpServletRequestи обекти HttpServletResponseи след това извиква метод service(HttpServletRequest request, HttpServletResponse response)на съответния сървлет. Тези обекти се предават на него, така че методът да може да вземе необходимите данни от requestи да постави резултата от работата в response.

Методът service()има изпълнение по подразбиране. Ако не бъде предефиниран, тогава ще бъде изпълнен. Това прави той.

Методът service()определя типа HTTP метод от заявка (GET, POST, ...) и извиква метода, съответстващ на заявката.

Метод Описание
1 service(HttpRequest, HttpResponse) Извиква се за всяка нова заявка към сервлета
2 doGet(HttpRequest, HttpResponse) Извиква се за всяка нова GET заявка към сървлета
3 doPost(HttpRequest, HttpResponse) Извиква се за всяка нова POST заявка към сървлета
4 doHead(HttpRequest, HttpResponse) Извиква се за всяка нова заявка HEAD към сървлета
5 doDelete(HttpRequest, HttpResponse) Извиква се за всяка нова заявка DELETE към сървлета
6 doPut(HttpRequest, HttpResponse) Извиква се за всяка нова PUT заявка към сървлета

Във вашия клас можете or да предефинирате един метод service(), or да го оставите сам, но след това предефинирайте методите doGet(), doPost(), ... според нуждите.

Коментари
  • Популярен
  • Нов
  • Стар
Трябва да сте влезли, за да оставите коментар
Тази страница все още няма коментари