Servelturile sunt module de cod java care ruleaza intr-un server de aplicatii,
pentru a raspunde la cererile clientilor. Servletii nu sunt dependenti de un
un anumit protocol client-server, dar de cele mai multe ori sunt folositi cu HTTP.
Pentru a scrie servleti sunt necesare clasele javax.servlet (framework-ul de baza) si
javax.servlet.http (frameworkul care raspunde cererilor http).
Servletii HTTP se folosesc in mod curent pentru:
-procesare si/sau inmagazinarea datelor trimise printr-un form HTML
-creare de continut dinamic (de ex se returneaza catre client ce s-a obtinut la un query pe o baza de date)
Servlets vs CGI
Modul traditional de a extinde functionalitatea unui server este CGI (Common Gateway Interface) – interfata independenta de limbaj, ce permite serverului sa porneasca un proces nou care primeste informatiile unui request (ex parametrii) prin variabile de mediu sau intrarea standard si scrie raspunsul la iesirea standard. Fiecare request e procesat separat (o alta instanta de CGI/ script CGI).
Servletii au cateva avantaje fata de CGI:
-un servlet nu ruleaza intr-un process separate -> se elimina overheadul crearii unui nou process pentru fiecare request
-un servlet ramane in memorie, daca un request s-a terminat si urmeaza altul aceeasi instanta de servlet il va procesa
-in server exista o singura instanta de servlet care raspunde concurent la toate requesturile
-mult mai sigur
Arhitectura de baza a unui servlet
Un servlet e o instanta a unei clase ce extinde interfata javax.servlet.Servlet. Cei mai multi servleti extind insa o implementare standard a interfetei, cum ar fi javax.servlet.GenericServlet sau javax.servlet.http.HttpServlet.
Pentru a initializa un servlet, serverul de aplicatii incarca clasa Servlet si creeaza o instanta apeland cosntructorul fara argumente. Acesta apeleaza mai departe metoda init (se creeaza un obiect de tip ServerConfig).
Sevletul efectueaza o singura data aceasta procedura de setup, iar obiectul ServletConfig e obtinut prin metoda getServletConfig().
Cand servletul este initializat, metoda service(ServletRequest req, ServletResponse res)
e apelata la fiecare request pe servlet (poate fi apelata concurent ).
La descarcarea servletului din server, se apeleaza metoda destroy() (toate resursele alocate in init sunt eliberate).
Diagrama cu lifecycle-ul unui servlet:

In continuare dau un exemplu simplu de HTTP Servlet, care trimite clientului inapoi paramatrii dintr-un form.
Codul html pentru form este:
<HTML>
<HEAD>
<TITLE>HTML form tutorial example</TITLE>
</HEAD>
<BODY>
<H1>HTML form tutorial example</H1>
<FORM ACTION="http://localhost:8080/myservlet/MyServlet" METHOD="POST">
Name: <INPUT TYPE="TEXT" NAME="Name" VALUE="" SIZE="25" MAXLENGTH="50"> <BR>
Email: <INPUT TYPE="TEXT" NAME="Email" VALUE="" SIZE="25" MAXLENGTH="50"><BR>
<INPUT TYPE="SUBMIT" NAME="submit" VALUE="Sign Me Up!">
</FORM>
</BODY>
</HTML>
Clasa care extinde HttpServlet:
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class MyServlet extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
doPost(req, res);
}
public void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
res.setContentType("text/html");
PrintWriter out = res.getWriter();
out.println("(parametru,valoare):");
Enumeration en = req.getParameterNames();
while (en.hasMoreElements()) {
String param = (String) en.nextElement();
String value = req.getParameter(param);
out.println(param + "=" + value);
}
}
}
Iar fisierul de configurare web.xml este:
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>
myservlet</display-name>
<servlet>
<description>
</description>
<display-name>
MyServlet</display-name>
<servlet-name>MyServlet</servlet-name>
<servlet-class>
MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/MyServlet</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>
No comments:
Post a Comment