PTI-IT

Интернет програмиране с JAVA

View the Project on GitHub theVelislavKolesnichenko/PTI-IT

назад

Жизнен цикъл на сървлета

Жизнения цикъл на сървлета може да се дефинира като времето от неговото създаване до премахването му от паметта. Етапите през които преминава сървлета са следните:

Методът init()

Методът е проектиран да бъде викан само веднъж. Извиква се при създаването на сървлета и повече не се вика. Използва се за първоначална инициализация. Сървлетът обикновено се създава, когато клиентът за първи път достъпи URL адреса, на който той съответства, но може да бъде създаден и при стартирането на сървъра. Когато клиент направи достъп до сървлета, се създава единична негова инстанция, а обслужването на всяка клиентска заявка се обработва в отделна нишка. Методът init() също така създава или зарежда различни помощни данни, необходими за работата на сървлета. Дефиницията на метода е следната:

public void init() throws ServletException{
    // инициализиращ код...
}

Методът service()

Това е основният метод на сървлета, който извършва същинската работа. Сървлет контейнерът извиква този метод, за да бъдат обслужени клиентските заявки и да бъде генериран форматиран отговор за клиента. Всеки път, когато сървърът получи заявка за сървлет, той създава нова нишка и извиква service(). Методът проверява типа на заявката (GET, POST, PUT, DELETE, etc.) и извиква съответния метод реализиран в сървлета.

public void service(ServletRequest request, ServletResponse response)
throws ServletException, IOException {
    
}

Методите doGet() и doPost() са най-често използваните методи във всяка клиентска заявка.

Методът doGet()

Метода обработва постъпила GET заявка от клиента която е резултат от нормално извикване URL адреса на сървлета или от HTML форма в която не е указан metod. Зачвката от тип GET предава данни към сървъра посредством параметри на URL адреса Query string.

Query string параметрите се изписват след URL адреса като започват с ?. Те се състоят от ключ и стойност, като при изброяване на множество параметри се разделят със символа &.

http://example.com?key1=value1&key2=value2

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
    // код на сървлета
}

Методът doPost()

Метода обработва постъпила POST заявка от клиента която е резултат от HTML форма, в която конкретно е зададен metod="POST". Зачвката от тип POST предава данни към сървъра посредством тялото на HTTP пакета което не изменя URL адреаса и позволява предаване на данни с по голям обем.

Параметрите на POST заявката се състоят от ключ и стойност, които се групират в тялото на HTTP пакета.

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // код на сървлета
}

Методът destroy()

Методът се извиква само веднъж по време на жизнения цикъл на сървлета. Този метод дава възможност на сървлета да извърши някои финализиращи операции като затваряне на връзка към база от данни, записване на бисквитка или някаква почистваща операция. След еговото повикване сървлета е маркиран за почистване.

public void destroy(){
    // финализиращ код...
}

Сравнение между GET и POST

  GET POST
бутон за връщане назад/ презареждане безвредно Данните ще бъдат изпратени отново (браузърът предупреждава потребителя, че данните ще бъдат изпратени повторно)
Запазване на отметка Може да се запази Не може да се запази
Кеширане Може да се кешира Не може да се кешира
Кодиране application/x-www-form-urlencoded application/x-www-form-urlencoded or multipart/form-data. multipart кодирането се използва за двоични данни.
История Параметрите остават в историята на браузъра Параметрите не се записват в историята на браузъра
Ограничения за дължина на данните Да, при изпращане на данни методът GET добавя параметри към URL адреса, а дължината на URL адреса е ограничена (максималната дължина на URL адреса е 2048 знака) Без ограничения
Ограничения за типа данни Разрешени са само ASCII символи Без ограничения. Бинарните данни също са позволени
Сигурност GET е по-малко сигурен в сравнение с POST, защото изпратените данни са част от URL адреса  
Никога не използвайте GET, когато изпращате пароли или друга чувствителна информация! POST е малко по-безопасен от GET, защото параметрите не се съхраняват в историята на браузъра или в лога на уеб сървъра  
Видимост Данните са видими за всички в URL адреса Данните не се показват в URL адреса

назад