Java

Servlety

Servlety są modułami, które są uruchamiane wewnątrz serwerów przetwarzających zapytania i generujących odpowiedzi, takich jak np. rozszerzone o obsługę Javy serwery WWW. Rozszerzają one funkcjonalność tych serwerów. Można w uproszczeniu powiedzieć, że servlety dla serwerów są tym, czym aplety dla przeglądarek.
Servlety stanowią alternatywę dla skryptów CGI, umożliwiając łatwą metodę dynamicznego tworzenia dokumentów HTML. Są one łatwiejsze do pisania dzięki wykorzystaniu środowiska Javy. Są również szybciej wykonywane, gdyż wywołanie servletu odbywa się nie poprzez uruchomienie nowego procesu, co jest kosztowne ze względu na czas procesora i zasoby pamięciowe, lecz jako wątek. Co więcej, kod wykonywalny dla servletu jest ładowany do serwera tylko raz, gdy po raz pierwszy żądana jest usługa oferowana przez dany servlet lub automatycznie, gdy zostanie zmieniony kod servleta. Potem servlet pozostaje w pamięci serwera i może równolegle obsługiwać wiele zapytań z możliwością komunikacji pomiędzy nimi.
Klasy implementujące funkcje servletów znajdują się w pakiecie javax.servlet dostępnego z firmy Sun jako Java Servlet Development Kit. Zawierają one abstrakcyjną klasę GenericServlet oraz interfejs Servlet, które definiują podstawowe własności ogólnych servletów, czyli modułów przetwarzających zapytania i generujących odpowiedzi. Jednak najczęściej korzysta się z podklas znajdujących się w pakiecie javax.servlet.http definiujących servlety HTTP. Klasa HttpServlet posiada m.in. takie metody jak doGet i doPost obsługujące typowe zapytania CGI, czy uniwersalną metodę service obsługującą wszystkie rodzaje zapytań. Najprostszy servlet może wyglądać następująco:
HelloWorldServlet.java
import java.io.*; 
import javax.servlet.*; 
import javax.servlet.http.*; 
 
public class HelloWorldServlet extends HttpServlet { 
   public void doGet (HttpServletRequest req, 
      HttpServletResponse res) 
      throws ServletException, IOException { 
 
      res.setContentType("text/html"); 
      ServletOutputStream out = res.getOutputStream(); 
      out.println("<html>"); 
      out.println("<head><title>Hello World</title></head>"); 
      out.println("<body>"); 
      out.println("<h1>Hello World</h1>"); 
      out.println("</body></html>"); 
   } 
} 

Większość użytecznych servletów czyta parametry wejściowe przekazane im z przeglądarki poprzez metody GET lub POST i na ich podstawie tworzy odpowiedni dokument HTML. Prosty przykład takiego servletu przedstawiono poniżej.

Hello.java
import java.io.*; 
import javax.servlet.*; 
import javax.servlet.http.*; 
 
public class Hello extends HttpServlet { 
   public void service(HttpServletRequest req, 
      HttpServletResponse res) 
      throws ServletException, IOException { 
 
      res.setContentType("text/html"); 
      PrintWriter toClient = res.getWriter(); 
      toClient.println("<html><head>"); 
      toClient.println("<title>Hello</title>"); 
      toClient.println("</head>"); 
      toClient.println("<h1>Hello " + 
         req.getParameterValues("name")[0] + "!</h1>"); 
      toClient.println("</body></html>"); 
      toClient.close(); 
   } 
} 

Powyższy servlet można wywołać na kilka sposobów. Można podać w przeglądarce URL
    http://www.task.gda.pl/servlet/Hello?name=Darek
i wywołać servlet przekazując parametry metodą GET. Można na stronie HTML umieścić formularz:
<form action=http://www.task.gda.pl/servlet/Hello method=POST> 
Podaj swoje imię: <input type=text name=name> 
<input type=submit value=Wyślij> 
</form> 

i wywołać servlet przekazując parametry metodą POST. Można również wykorzystać tag <servlet> na stronie HTML zapisanej w pliku z rozszerzeniem shtml.

Hello.shtml
... 
<servlet code=Hello> 
<param name=name value=Darek> 
</servlet> 
... 

Wtedy serwer WWW rozszerzony o funkcjonalność servletów zastąpi na stronie HTML powyższy tag wynikiem generowanym przez servlet Hello i tak przetworzoną stronę prześle do przeglądarki.
Dostępnych jest już wiele serwerów WWW obsługujących servlety Javy. Przykładami mogą być Java Web Server firmy Sun lub darmowy dla celów niekomercyjnych JRun firmy Live Software. Ten ostatni może pracować jako samodzielny serwer WWW, bądź jako moduł rozszerzający funkcjonalność innych znanych serwerów WWW np. Apache, Microsoft IIS, Netscape.

5 komentarzy

jmail 2005-09-08 13:35

artykuł kiepściutki.

po pierwsze w ogóle nie wspomina o najpopularniejszym serwerze javy jakim jest Tomcat.

po drugie to co tutaj napisano to można znaleźć jak już ktoś wspomniał na podanej stronie.

po trzecie dlaczego nic nie wspomniano o wywoływaniu servletów? nie mówię o parametrach tylko o wywoływaniu z adresu innych aplpletów? możnaby trochę powiedzieć o czasie życia appletu (servletu). również możnabyło dodać coś o rejestrowaniu servletów w serwerze.

ŁF 2005-02-20 13:33

zerżnięte! http://www.escom.net.pl/support/index632c.html?escom:JAVA
pokaż pozwolenie od autora, albo zarobisz bana

Marooned 2004-01-18 23:49

Ikonka [img]http://4programmers.net/templates/subMain/gfx/olowek.gif[/img] - to edycja artykułu. Ponieważ masz włączony caly HTML, to aby wyświetlić kod musisz znak początku tagu '&lt;' zamienić na '&amp;lt;'.

Ziomal 2004-01-16 22:53

Niestety mi coś nie wyszło. Jak to poprawić?