Servlet-urile sunt clase Java care sunt executate pe serverele web ca urmare a cererii unui client. Servlet-urile permit dezvoltarea aplicatiilor web server-side si extinderea capacittilor de prelucrare a serverelor prin oIerirea de noi servicii clientilor cum ar Ii: modiIicri dinamice ale continutului si a Iormei de prezentare a paginilor web acces la alte protocoale standard dect HTTP (ex. FTP) noi protocoale client Cu ajutorul servlet-urilor dispunem de o tehnologie Java uniIicat att pentru partea de client ct si pentru cea de server. client server scripturi surs incluse n HTML JavaScript
PHP, JSP (Java Server Page) ASP (MicrosoIt) SSI (Server Side Includes) clase autonome Applet servlet programe n Iormat executabil - programe CGI executabile
Principiu de funcJionare
Este descris n Iigura urmtoare (preluat din ,Servlet.pdIde Lionel Seinturier, Universite Pierre & Marie Curie)
CiIrele de pe Iigur indic etapele executrii unui servlet cererea de executie din partea clientului care speciIic URLul servlet-ului
Condi|ii de func|ionare Servlet-urile pot Ii executate pe majoritatea serverelor web (Apache, IIS etc) pe care s-a instalat un ,motor pentru servlet-uri. n cazul serverelor Apache solutia cea mai simpla o reprezint motorul Tomcat
Pentru dezvoltarea servlet-urilor este nevoie ca pe server s Iie instalat o platIorm Java adecvat cum ar Ii JDK1.3 . Pentru JDK 1.1 sau Java 2 trebuie instalat si Java Servlet Development Kit (JSDK). Puteti descrca gratuit ava 2 Standard Edition de la adresa http://java.sun.com/j2se/1.3/download.html Pentru a se putea Iolosi utilitarul servletrunner, trebuie ca - variabila de mediu PATH s indice corect diectorul n care se gseste acest utilitar (ex. c:\jsdk2.0\bin pe un sistem Windows ) - variabila de mediu CLASSPATH indic Iisierul JAR (ex. pentru Windows c:\jsdk2.0\lib\jsdk.jar )
Crearea i instaIarea unui servIet 1. Se editeaz codul surs ntr-un Iisier cu extensia java (ex. PrimulServlet.java) import java.io.*; import javax.servlet.*; import javax.servlet.http.*;
} 2. Se compileaz servlet-ul (ex. PrimulServlet.java) cu compilatorul java dorit Exemplu: javac PrimulServlet.java 3. Se execut servletrunner pentru a gzdui servlet-ul pe server. 4. Se lanseaz servlet-ul introducnd URL-ul n bara de adrese a navigatorului. Exemplu http://soft.eed.usv.ro/servlet/PrimulServlet Dac totul a Iost corect, n Iereastra navigatorului se va aIisa textul Catre client: Succes Elemente de programare Java Servlet
Un servlet este un program Java care St.Gh.Pentiuc - F.I.E. Suceava - Servlet, Java Server Pages - 3/9
implementeaza interIata javax.servlet.Servlet prin extinderea claselor: javax.servlet.GenericServlet javax.servlet.http.HttpServlet Clasa HttpServlet deriv din GenericServlet si este special construit pentru protocolul HTTP.
public interface Servlet {
public void init(ServletConfig config) throws ServletException;
public ServletConfig getServletConfig();
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException;
public String getServletInfo(); public void destroy(); }
Clasele se gsesc n Java Servlet API care este o extensie standard a JDK sub javax si contine pachetele javax.servlet si javax.servlet.http
Programul rezultat va Ii compilat cu javac. Fi;ierul .class reyultat va Ii plasat ntr-un director care depinde de instalarea masinii Tomcat. Acest director poate Ii $TOMCAT_HOME/webapps/test/WEB-INF/classes/ unde variabila de mediu $TOMCAT_HOME a Iost setata la instalare si reprezint directorul unde este instalat Tomcat. Suport HTTP Servlet-urile care utilizeaz protocolul HTTP Iiind Ioarte des utilizate, n pachetul javx.servlet.http este implementat suportul pentru acest protocol Metodele HTTP Metoda GET GET URL <http version> Host: <target host>
Exemplu Este solicitat servlet-ul joc.class aIlat pe server-ul soft.eed.usv.ro cruia i se transmit si 2 parametri (n2003 si numeIonescu Ion): GET /servlet/joc?n=2003&nume=Ionescu%20Ion HTTP/1.1 Connection: Keep-Alive User-Agent: Mozilla/4.0 ( compatible; MSIE 4.01; Windows NT) St.Gh.Pentiuc - F.I.E. Suceava - Servlet, Java Server Pages - 4/9
Host: soft.eed.usv.ro Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg Metoda GET trebuie s Iie implementat pe server ca o metod sigur si idempotent. Un exemplu de rspuns la metoda GET HTTP/1.1 200 Document follows Date: Mon, 20 Jan 2003 12:32:46 GMT Server: JWS/1.1 Last-modified: Mon, 20 Jan 2003 12:32:46 GMT Content-type: text/html Content-length: 109
<html><body><h1>Sa vedem cum s-a jucat</h1>Jucatorul Ionescu Ion a ales 2003<br>Eu aleg 2004<br><h2>Am castigat eu</h2></body></html> Metoda HEAD este similar cu GET, dar r|spunsul server-ului este un header (data modiIicrii unui document, lungimea sa etc). Metoda POST oIer posibilitatea de a trimite mai multe date. POST /servlet/InregistrareDate HTTP/1.1 User-Agent: Mozilla/4.0 ( compatible; MSIE 4.01; Windows NT) Host: soft.eed.usv.ro Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */ Content-type: application/x-www-form-urlencoded Content-length: 93
nume=Ionescu&prenume=Ion&adresa=Suceava,%20str.Universitatii%20nr.1&telefon=216147 &fax=520277 Observatie. Metodei POST nu i se cere s Iie sigur si idempotent, deci repetarea ei nu va produce acelasi rezultat. H11P Support Classes Now that you have been introduced to the HTTP protocol, consider how the javax.servlet.http package helps you write HTTP servlets. The abstract class javax.servlet.http.HttpServlet provides an implementation oI the javax.servlet.Servlet interIace and includes a lot oI helpIul deIault Iunctionality. The easiest way to write an HTTP servlet is to extend HttpServlet and add your own custom processing. Clasa HttpServlet
public abstract class HttpServlet extends GenericServlet
Fiind o clas abstract, deci utilizatorul va trebui s deIineasc cel putin o metod n clasa care o extinde. Metodele care pot Ii supradeIinite corespund metodelor protocolului HTTP care sunt suportate de server-ul pe care se execut servlet-ul. : doGet (HttpServletRequest cerere, HttpServletResponse raspuns) doPost (HttpServletRequest cerere, HttpServletResponse raspuns), doOptions (HttpServletRequest cerere, HttpServletResponse raspuns) doPut (HttpServletRequest cerere, HttpServletResponse raspuns) doDelete (HttpServletRequest cerere, HttpServletResponse raspuns) doTrace (HttpServletRequest cerere, HttpServletResponse raspuns) Toate aceste metode au dou argumente: un obiect al clasei HttpServletRequest reprezentnd cererea sosit la server un obiect al clasei HttpServletResponse cu ajutorul cruia n metoda respectiv se poate construi rspunsul ce va Ii trimis clientului Metodele vor lansa exceptiile: ServletException, IOException Alte metode ale clasei HttpServlet : init, destroy si getServletInfo. Metoda servce() nu trebuie neaprat deIinit. Ea are rolul unui dispecer care interpreteaz cererea si apeleaz metoda potrivit.
Clasa HttpServlet asigur suplimentar si rspunsul la cererile clientului tinnd seama de care metode au Iost redeIinite n servlet. n redeIinirea metodei doGet() vor trebui eIectuate urmtoarele: - se citesc datele din cerere - se seteaz header-ul rspunsului - se scriu datele care vor constitui rspunsul
out.println( "<html>" ); out.println( "<head><title>Prima pagina</title></head>" ); out.println( "<body>" ); out.println( "<h1>Pagina HTML</h1>" ); out.println( "Aceasta pagina a fost produsa de un servlet<hr>); out.println( "</body></html>" ); out.close(); } } Acest program va Ii compilat: javac PrimaPagina.java apoi Iisierul PrimaPagina.class va Ii depus n directorul $TOMCAT_HOME/webapps/test/WEB-INF/classes/ Pentru a-l testa se va orienta navigatorul ctre adresa http://soft.eed.usv.ro:8080/servlet/test/PrimaPagina Exemplul 3. Setare COOKIES import java.io.*; import javax.servlet.*; import javax.servlet.http.*;
public class SetareCookieS extends HttpServlet {
private static final String SUMA_KEY = "suma"; St.Gh.Pentiuc - F.I.E. Suceava - Servlet, Java Server Pages - 7/9