Differenza tra Servlet e JSP

Breve spiegazione circa le differenze tra JSP e Servlet
G.Morreale

Introduzione:

Spesso nei forum una domanda molto ricorrente da parte di chi inizia ad approdare al mondo Java EE, è proprio questa:

"Chè differenza c'è tra Servlet e JSP? Quando usare l'una e quando l'altra tecnologia?"

Cercherò di di dare indicazioni utili a trovare questa risposta.
Ovviamente il modo migliore per capire l'essenza delle differenze è studiare singolarmente le singole tecnologie:



Breve panoramica sulle due tecnologie:

Le Servlet

All'interno delle api java ee, esiste un classe astratta chiamata HttpServlet
Questa classe è alla base di ogni servlet che il programmatore intende realizzare.

Questa classe di per se fornisce delle funzionalità per la gestione delle diverse tipologie di richieste http: (HEAD, GET, POST, PUT, DELETE).
Ad esempio, l'HttpServlet, inizializza gli oggetti HttpServletRequest e HttpServletResponse, al fine di consentire al programmatore di ritrovare la rappresentazione della richiesta e della risposta http (headers, body, etc.) già strutturata all'interno di alcuni oggetti.

Tale funzionalità ovviamente devono essere completate al fine di generare un output che risponda alle nostre esigenze. (ad esempio realizzare una servlet che stampi la scritta "hello world").

Al fine di raggiungere questo obiettivo di crea una classe che estende HttpServlet.
L'estensione di tale classe migliorerà ad esempio il metodo doGet al fine stampare a video la scritta "hello world"(operazione che di base HttpServlet non esegue)!!

Esempio di servlet

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

//Estensione dell'oggetto HttpServlet: EREDITARIETA'
public class helloWorldServlet extends HttpServlet {

//...eventuali variabili di classe

    //Override del metodo doGet per generare l'output desiderato
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException {

// Definisco il tipo MIME della risposta http.
response.setContentType("text/html; charset=ISO-8859-1");

        //ottengo da response l'oggetto che mi consente di scrivere sull'output
PrintWriter out = response.getWriter();

//Scrivo l'html di output
        out.println("<html>");
out.println("<body>");
        out.println("<h1>hello world " + new Date().toString() + "</h1>");
out.println("</body>");
out.println("</html>");
}
}


Le JSP

JSP è l'acronimo per Java Server Pages.
Le JSP sono una tecnologia che consente allo sviluppatore di combinare codice html (o comunque codice che riguarda la presentazione della pagina) e codice java in modo più agevole, basandosi sui dei tag.

Le JSP vengono compilate e trasformate in Servlet.
Quindi la JSP non è altro che una diversa rappresentazione di una servlet.
Rappresentazione che rende più semplice l'integrazione fra presentazione e codice java.

Esempio di servlet

Il codice precedemente scritto al fine di generare un semplice hello world nel caso di una JSP diventerebbe:

<%@ page contentType="text/html;charset=ISO-8859-1"%>
<html>
<body>
<h1>hello world<%=new Date().toString()%></h1>
</body>
</html>


Conclusione: La differenza!?
Ovviamente vi invito ad approfondire riguardo le singole tecnologie in quanto questo articolo ha il solo scopo di introdurre in modo molto conciso l'essenza di Servlet e JSP.
Tieniamo conto anche che la JSP nasce la presentazione dei dati, all'interno della JSP infatti bisogna ridurre al massimo la presenza di codice java, soprattutto codice che non riguarda la presentazione dei dati.
Se devo ad esempio interrogare un db, la jsp è uno dei posti in cui non è idoneo fare la connessione e richiesta verso il database.
Tale operazione infatti viene delegata alle servlet o meglio ancora in caso di progetti più strutturati ad altre tecnologie (es. ejb).

Alla JSP bisogna passare l'informazione già estratta ed elaborata, pronta il più possibile per essere stampata a video.

La Servlet invece è il luogo adatto per gestire il collegamento tra la JSP e la logica di business.

Vi invito a leggere anche questi due miei articoli, dove spiego come realizzare un applicazione che coinvolge JSP, Servlet ed EJB secondo il design pattern MVC.

http://programmaremobile.blogspot.com/2008/07/mvc-java-ee-mvc-un-design-pattern-una.html
http://programmaremobile.blogspot.com/2008/10/java-ee-un-esempio-su-come-usare-ejb-e.html#links





3 comments:

sayhem said...

Complimenti per il blog, se ti interessa ne ho uno che gestisco da un po' che tratta argomenti simili. Possiamo linkarci a vicenda se ti va. In caso conferma con un commento... ciao e grazie

Giuseppe Morreale said...

Per me va bene, però piuttosto che linkarci a prescindere credo sia meglio inserire il link ad un determinato articolo.

Es. se tu hai scritto qualcosa che è inerente all'articolo "Differenza tra Servlet e JSP"
Lascia un commento invitando gli utenti a leggere il tuo articolo (qualora ovviamente sia strettamente inerente)

iceman89 said...

Complimenti per l'articolo, chiaro ed efficace molto più di voluminosi manuali.
Io devo realizzare un'applicazione web con jsp e servlet con integrazione di un DB quale SQLServer. Qualche mese fa ho terminato un'applicazione desktop usando codice java, ho acquisito diverse concetti inerenti al linguaggio ora però ho l'esigenza di buttarmi sulle web-apps da dove inziare?