Sunteți pe pagina 1din 12

Miniservere

Servleturile sunt tehnologie Java care raspund programarii CGI. Servlet-urile sunt
programe care ruleaza pe server WEB, fiind pozitionate intre cererile care vin de la
browser sau de la un client HTTP si bazele de date sau aplicatii de pe serverul de HTTP.
Un servlet reprezint o component web , gestionat de un container ,care genereaz
coninut dinamic. Servlet-urile sunt clase java, ce ofer independen de platform i sunt
incrcate i executate dinamic de ctre server. Servlet-urile comunic cu clienii pe baza
paradigmei cerere raspuns. Acest model cerere raspuns se bazeaz de obicei pe
protocolul Hypertext Transport Protocol (HTTP).

Containerul de servleturi este o component ce ofer servicii de reea prin


intermediul crora servleturile primesc i transmit cereri i rspunsuri de la i ctre
clieni. Containerul de servleturi inmagazineaz servleturile i este responsabil pentru
gestionarea acestora. Un container poate exista n cadrul unui server web sau poate fi
adugat ulterior utiliznd mecanismul de extensie al serverului.

Exemplu: Un program client (web browser) acceseaz un server web i transmite


o cerere HTTP (poate fi de exemplu un form completat cu datele unei persoane).
Acceast cerere este preluat de ctre serverul de web i n cazul n care este destinat
unui servlet, este transmis mai departe ctre containerul de servleturi. Containerul
determin crui servlet i este adresat cererea i va invoca respecivul servlet,
transmind-ui ca parametri dou obiecte cerere (request) i raspuns (response).

Servletul va utiliza obiectul request pentru a determina cererea fcut de clientul


web. Dup realizarea operaiilor necesare (de exemplu scrierea sau citirea unor date dintr-
o baz de date ), servletul va tansmite ctre client un raspuns prin intermediul obiectului
response

Servlet-urile relueaza in Java Virtual Machine pe server:


Cateva din capabilitatile servlet-urilor:

1. Pot citi datele trimise de useri: aceste date sunt, de obicei, introduse intr-un formular
WEB sau pot proveni dintr-un applet Java sau de la un program client de HTTP.

2. Pot formata rezultatele intr-un document: in cele mai multe cazuri, aceasta implica
inserarea informatiei intr-o pagina HTML.

3. Pot seta parametrii HTTP de raspuns: se informeaza browser-ul ce tip de document


este returnat (HTML, de exemplu), se seteaza cookies etc.

4.Trimit documentul inapoi la client: documentul poate fi trimis in format


text(HTML), in format binar(imagini GIF), sau chiar in format compresat.

Servlet-urile nu sunt restrictionate numai la WEB sau aplicatii server care manipuleaza
cereri HTTP; de asemenea pot fi folosite si pentru alte tipuri de servere. De exemplu,
servlet-urile pot fi inserate in servere de email sau FTP.

Avantajele servlet-urilor

1.Eficienta

In programarea CGI, pentru fiecare cerere HTTP se incepe un nou proces. In cazul
servlet-urilor, masina virtuala de java ramane in executie si fiecare cerere este rezolvata
printr-un thread, nu printr-un proces al sistemul de operare ca in cazul CGI. In CGI,
rezolvarea a N cereri simultane pentru acelasi program se realizeaza prin incarcarea
codului programului CGI de N ori. In cazul servlet-urilor for exista N thread-uri, dar o
singura copie a clasei servlet.

Cand un program CGI a terminat manipularea unei cereri, programul se termina. Servlet-
urile raman in memorie chiar si dupa ce raspunsul a fost complet.

2. Putere

Servlet-urile pot comunica direct cu serverul WEB. Mai multe servlet-uri pot imparti
date, facand mult mai usoara conectarea cu baza de date.

3. Portabilitate

Servlet-urile sunt scrise in Java si pot rula pe servere ca Apache, Microsoft Internet
Information Server (IIS), IBM WebSphere, or StarNine WebStar, fara vreo schimabare a codului.

Servlet-urile sunt acum parte din Java 2 Platform, Enterprise Edition (J2EE;
http://java.sun.com/j2ee/)
Instalare si Setup

1. Instalare JDK

Primul pas este download-area si instalarea Java.

JDK 1.4 (Windows, Linux, Solaris): http://java.sun.com/j2se/1.4/download.html

JDK 1.3 (Windows, Linux, Solaris): http://java.sun.com/j2se/1.3/.

In continuare sunt prezentate cateva optiuni de servere:

Apache Tomcat : este serverul oficial care implementeaza servlet 2.2 si JSP 1.1. Poate
fi folosit ca un server de sine statator pentru a testa servlet-uri si pagini JSP sau poate fi
integrat in serverul WEB Apache. Tomcat ul ca si Apache-ul este gratuit. Mai multe
informatii puteti gasi la adresa:

http://jakarta.apache.org/.

JavaServer Web Development Kit (JSWDK): JSWDK este serverul oficial pentru
implementarea servlet-urilor 2.1 si JSP 1.0. Este folosit ca un server de sine statator
pentru a testa servlet-uri sau pagini JSP. Acest server este gratuit si mai multe informatii
se pot gasi la adresa: http://java.sun.com/products/servlet/download.html .

Alte servere sunt: Allaire JRun, New Atlantas ServletExec, LiteWebServer (LWS)
from Gefion Software, Suns Java Web Server

2. Configurare Tomcat 4 sau 5

A. Downloadarea Software-ului Apache Tomcat

S e r v e r u l p o a t e f i o b t i n u t d e l a a d r e s a http://jakarta.apache.org/builds/jakarta-
tomcat-4.0/release/.

B. Schimbarea portului pe care asculta serverul

Daca nu exista nici un server care deja foloseste portul 80, se poate configura ca
Tomcat-ul sa asculte pe portul HTTP 80 si nu pe portul 8080. Facand aceasta schimbare,
in loc de a folosi URL de forma http://localhos:8080/ se poate folosi http://localhost/

Pentru a seta portul, se editeaza fisierul install_dir/conf/server.xml si se schimba atributul


portului:

<Connector className="org.apache.catalina.connector.http.HttpConnector"
port="80 . . . />

C. Setarea variabilei JAVA_HOME

Prin setarea variabilei JAVA_HOME se insttinteaza serverul unde gaseste Java. De


exemplu in fisierul install_dir/bin/catalina.bat .

set JAVA_HOME=C:\j2sdk1.4.0

Dupa realizarea operatiilor de mai sus, trebuie creat un director pentru aplicatia
dezvoltata, de exemplu webapps\test. Apoi se creeza subdirectorul numit WEB-INF si
aici se plaseaza fisierul descriptor al aplicatiei, numit web.xml care contine informatii
despre aplicatie. In subdirectorul WEB-INF se creeaza directorul numit classes. aici se
pot plasa servleturile sau alte clasele care sunt utilizate in aplicatie.

Dupa obtinerea software-ului necesar, Compilatorul Java (javac) trebuie sa stie unde se
afla fisierele servlet-urilor si JSP cand le compileaza. Fisierele clasa necesare sunt de
obicei in subdirectorul lib al directorului unde unde s-a instalat serverul, cu clasele servlet
in servlet.jar si clasele JSP in jsp.jar, jspengine.jar, sau jasper.jar. Exista mai multe
modalitati de a informa compilatorul unde se gasesc aceste clase.

Se presupunne ca dir este directorul in care se gasesc clasele servlet si JSP.

Unix (C Shell)

setenv CLASSPATH .:dir/servlet.jar:dir/jspengine.jar

Se adauga $CLASSPATH la sfarsitul liniei setenv daca CLASSPATH a fost deja setat si
se doreste sa adaugam altceva, fara sa inlocuim. Acesta se aduga in fisierul .cshrc .

Windows

set CLASSPATH=.;dir\servlet.jar;dir\jspengine.jar

Se adauga ;%CLASSPATH% la sfarsitul liniei de deasupra daca CLASSPATH a fost


deja setat si se doreste sa adaugam altceva, fara sa inlocuim.

Setarea de mai sus se adauga in fisierul autoexec.bat.

In Windows NT or 2000, in System se selecteaza Environment si se adauga variabila si


valoarea.
Compilarea si instalarea servlet-urilor

Dupa crearea servlet-ului se foloseste comanda javac FirstServlet.java pentru a compila


servlet-ul. Clasa rezultata trebuie pusa intr-o anumita locatie pe care serverul o stie de a
lungul executiei. In continuare se prezinta locatia pentru servlet-uri folosita in cazul
serverului WEB - Tomcat.

install_dir/webapps/ROOT/WEB-INF/classes aceasta reprezinta locatia standard


pentru servlet-uri

install_dir/classes reprezinta locatia alternativa pentru servleturi

install_dir/lib locatia pentru fisierele JAR care contin clasele

Structura de baza a unui servlet

Exemplu1:

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;

public class FirstServlet extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

//se foloseste "request" pentru a citi headerele HTTP (cookie-urile) si datele dintr-un
//formular HTML (de exemplu datele userului).

//se foloseste "response" pentru a specifica raspunsul HTTP etc

PrintWriter out = response.getWriter();

// se foloseste "out" pentru a trimite continutul browser-ului.

}
Exemplul de mai sus pune in evidenta folosirea cererilor tip GET. Cererile tip GET sunt
cereri tipice ale browserului pentru pagini WEB. Browserul genereaza acest request
cand userul tipareste un URL in bara de adrese sau cand face submit la un formular
HTML care nu specifica nici o metoda. De asemenea servleturile pot manipula cereri
POST, care sunt generate cand cineva face submit la un formular in care este specificata
metoda method = post

Pentru a fi un servlet, clasa trebuie sa extinda clasa java HttpServlet si sa rescrie


metodele doGet si doPost, depinzand daca datele au fost trimise prin GET sau POST.

Ambele metode au 2 argumente: HttpServletRequest si HttpServletResponse.

Clasa HttpServletRequest are metode care manipuleaza informatia sosita la server cum ar
fi cea dintr-un formular HTML. Clasa HttpServletResponse specifica informatia care
pleaca de la server (tipul continutului etc.) si mai mult produce un PrintWriter folosit
pentru a trimite informatia a client.

Pachetele importate au fost necesare pentru a obtine clasa PrintWriter (java.io), HttpServlet
(javax.servlet), HttpServletRequest si HttpServletResponse (javax.servlet.http).

Clasa HttpServlet nu este singurul punct de star pentru servlet-uri, deoarece servlet-urile
ar putea extinde servere de mail, FTP etc. Aceste servlet-uri extind o clasa derivata din
GenericServlet, clasa parinte a clasei HttpServlet. In practica, servlet-urile sunt utilizate
pentru servere care comunica prin HTTP (adica servere WEB).

1. Servlet care genereaza text

Exemplu2:

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;

public class HelloWorld extends HttpServlet {

public void doGet(HttpServletRequest request,

HttpServletResponse response)

throws ServletException, IOException {

PrintWriter out = response.getWriter();


out.println("Hello World");

a. Compilarea si instalarea servletului: clasele servlet pot fi puse in mai multe


locatii, acest lucru depinzand de Serverul WEB folosit. Pentru Tomcat4.0 sau 5.0
exista urmatoarea optiune:

install_dir/webapps/directorul_tau/WEB-INF/classes.

De asemenea se pot folosi fisiere HTML care trebuiesc puse corespunzator in locatii
pentru a le face accesibile serverului. Aceste locatii sunt diferite de la un server la altul,
dar pentru Tomcat 4.0 sau5.0 pot fi plasate in directorul:
install_dir/webapps/directorul_tau/fisier.html

b. Invocarea servletului: pentru invocarea unui servlet se foloseste conventia: se


utilizeaza URL de forma: http://host/servlet/NumeServlet

2. Servlet care genereaza HTML

Cele mai multe servleturi genereaza HTML, nu textca in exemplu precedent. pentru a
construi HTML sunt necesari urmatorii pasi:

-informarea browserului ca i se trimite inapoi HTML :

response.setContentType("text/html");

-modificarea println urilor pentru a construi o pagina WEB

Exemplu3:

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;

public class Hello extends HttpServlet {

public void doGet(HttpServletRequest request,

HttpServletResponse response)

throws ServletException, IOException {


response.setContentType("text/html");

PrintWriter out = response.getWriter();

out.println("<HTML>\n" +

"<HEAD><TITLE>Hello WWW</TITLE></HEAD>\n" +

"<BODY>\n" +

"<H1>Hello WWW</H1>\n" +

"</BODY></HTML>");

Exemplu4: ServletUtilities.java

package firstservlets;

import javax.servlet.*;

import javax.servlet.http.*;

public class ServletUtilities {

public static final String DOCTYPE =

"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 " +

"Transitional//EN\">";

public static String headWithTitle(String title) {

return(DOCTYPE + "\n" +

"<HTML>\n" +

"<HEAD><TITLE>" + title + "</TITLE></HEAD>\n");

package firstservlets;

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;

public class Hello4 extends HttpServlet {

public void doGet(HttpServletRequest request,

HttpServletResponse response)

throws ServletException, IOException {

response.setContentType("text/html");

PrintWriter out = response.getWriter();

out.println(ServletUtilities.headWithTitle("Hello WWW") +

"<BODY>\n" +

"<H1>Hello WWW</H1>\n" +

"</BODY></HTML>");

Linia DOCTYPE informeaza validatorii de HTML care versiune de HTML este folosita
pentru a sti ce specificatie sa verifice pentru documentul HTML.

Acesti validatori sunt servicii cate ajuta la evidentierea erorilor de sintaxa din documentul
HTML. Exista 2 validatoare on-line, unul la World Wide Web Consortium
(http://validator.w3.org/) si altul la Web Design Group

(http://www.htmlhelp.com/tools/validator/).
Manipularea cererilor facute de useri

Una dintre motivatiile pentru crearea paginilor WEB dinamice este ca rezultatul sa se bazeze pe
datele introduse de user. De exemplu intr-un URL de forma
http://localhost/path?user=Mihai&student=yes&bursier=no, partea dupa semnul
intrebarii este cunoscuta ca date formular sau date interogare si este folosita pentru
aduce informatia dintr-o pagina WEB la un program de pe server. Datele formular pot fi
atasate la sfarsitul URL dupa semnul intrebarii pentru cereri GET, sau pot fi trmise la
server intr-o linie separata, pentru cererile POST.

Citirea datelor formular din servlet-uri: se poate face simplu prin apelarea metodei
getParameter din clasa HttpServletRequest, furnizand numele parametrului ca
argument metodei. Metoda getParameter se foloseste in acelasi mod atat pentru date
trimise prin get, cat si pentru cele trimise prin post. Servletul stie ce metoda pentru cerere
a fost folosita. Valoarea returnata este de tipul String corespunzatoare valorii din URL a
primei aparitii a numelui parametrului. Stringul este gol daca parametrul nu are nici o
valoare si null daca nu exista un astfel de parametru. Daca parametrul are mai multe
valori se apeleaza metoda getParameterValues care returneaza un vector de stringuri.

Numele parametrilor sunt case sensitive, deci request.get-Parameter("Param1") si


request.getParameter("param1") nu pot fi interschimbate.

Exemplu4:

user.html

<HTML>

<HEAD>

<TITLE>Introduceti</TITLE>

</HEAD>

<BODY>

<FORM METHOD=GET ACTION="/servlet/Hello">

Care este numele tau?

<INPUT TYPE=TEXT NAME="nume"><P>

<INPUT TYPE=SUBMIT>
</FORM>

</BODY>

</HTML>

Hello.java

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;

public class Hello extends HttpServlet {

public void doGetHttpServletRequest req, HttpServletResponse res)

throws ServletException, IOException {

res.setContentType("text/html");

PrintWriter out = res.getWriter();

String nume = req.getParameter("nume");

out.println("<HTML>");

out.println("<HEAD><TITLE>Hello, " + name + "</TITLE></HEAD>");

out.println("<BODY>");

out.println("Hello, " + nume);

out.println("</BODY></HTML>");

S-ar putea să vă placă și