Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli


Basi per definire una Servlet, Appunti di Sistemi di reti

funzionamento delle servlet e modalità di definizione

Tipologia: Appunti

2020/2021

Caricato il 25/06/2021

tantegrazie
tantegrazie 🇮🇹

3.5

(2)

7 documenti

1 / 7

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
definire le basi per il funzionamento di una servlet
Javax.servlet.http.* serve a interfacciarci al modulo http e ai suoi metodi.
Si estende la classe HttpServlet --->> il primo metodo effettuato è il Service() che serve a interpretare la richiesta e capire se è un
get o post. Service è un metodo che si trova nella classe HttpServlet.
Il primo metodo sarà in questo caso doGet(): i due oggetti come parametri (uno di tipo HttpServerRequest req, e un altro di tipo
HttpServletResponse res) indicano appunto gli oggetti che instanziano le richieste e le risposte, anche se magari lavoreremo solo
sull'oggetto res.
Il setContentType serve a definire il tipo di risposta che sarà l'oggetto res, che potrà essere o in formato binario o in documento
html. Trasformiamo l'oggetto res in un oggetto PrintWriter output, in modo da poter stampare ogni riga del codice in html.
Il body sarà composto di un form, un modulo che serve all'html per scrivere e inviare dati.
Il form è costituito da strutture tag di input, chiamate appunto <input> che saranno identificate e specificate tramite l'attributo
type. Lo Slash messo all'interno delle stringhe prima delle virgolette è detto "di commutazione" e si usa per far comprendere
quelle virgolette come se fossero parte del codice, altrimenti la stringa principale si chiuderebbe alla prima virgoletta che
troverà.
la classe che contiene il metodo doPost è la classe httpServlet.
il metodo service interpreterà la tipologia di richiesta (get o Post) inviando i parametri di HttpServletRequest req e
HttpServletResponse res.
L'altro file importante per il server è il file web.xml.
Tomcat>webapps>cartellaApplicazione>WEB-INF>web.xml
Questo file serve al tomcat per individuare le servlet al tomcat, tramite la mappatura noi indicheremo proprio l'URL
della servlet "servlet/nomeApp".
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
<!-- Descrizione generale dell'applicazione web (visualizzata nel pannello del manager) -->
<display-name>Primo esercizio a casa di una servlet</display-name>
<description>Richiama l'esecuzione della classe Esercizio</description>
<!-- Definizione delle servlet -->
<servlet>
<servlet-name>Esercizio</servlet-name>
<description>Visualizza un modulo form</description>
<servlet-class>Esercizio</servlet-class>
</servlet>
<!-- Mappatura -->
<servlet-mapping>
<servlet-name>Esercizio</servlet-name> <!-- nome dato alla servlet nel file web.xml -->
<url-pattern>/servlet/Esercizio</url-pattern> <!-- url con cui la servlet può essere invocata -->
</servlet-mapping>
</web-app>
Costruzione classe con contatore che verrà incrementato ogni chiamata di servlet.
Il metodo init è contenuto all'interno della classe genericServlet e lo sovrascriveremo con la stringa super.init() all'interno perché
se non lo sovrascrivessimo, ci sarebbero problemi con la classe madre genericServlet.
**Prova della pagina con contatore che si incrementa**
Se noi chiudessimo tomcat e xampp durante l'aggiornamento della pagina (e ovviamente anche gli incrementi) e poi riaprissimo
xampp e tomcat la pagina e la servlet verrà re-inizializzata e il contatore verrà riavviato.
La classe genericServlet appartiene al package di javax.servlet.http.*
Nel caso non volessimo usare un documento html in uscita, ma un flusso binario useremo string buffer.
pf3
pf4
pf5

Anteprima parziale del testo

Scarica Basi per definire una Servlet e più Appunti in PDF di Sistemi di reti solo su Docsity!

definire le basi per il funzionamento di una servlet

Javax.servlet.http.* serve a interfacciarci al modulo http e ai suoi metodi.

Si estende la classe HttpServlet --->> il primo metodo effettuato è il Service() che serve a interpretare la richiesta e capire se è un

get o post. Service è un metodo che si trova nella classe HttpServlet.

Il primo metodo sarà in questo caso doGet(): i due oggetti come parametri (uno di tipo HttpServerRequest req, e un altro di tipo

HttpServletResponse res) indicano appunto gli oggetti che instanziano le richieste e le risposte, anche se magari lavoreremo solo

sull'oggetto res.

Il setContentType serve a definire il tipo di risposta che sarà l'oggetto res, che potrà essere o in formato binario o in documento

html. Trasformiamo l'oggetto res in un oggetto PrintWriter output, in modo da poter stampare ogni riga del codice in html.

Il body sarà composto di un form, un modulo che serve all'html per scrivere e inviare dati.

Il form è costituito da strutture tag di input, chiamate appunto che saranno identificate e specificate tramite l'attributo

type. Lo Slash messo all'interno delle stringhe prima delle virgolette è detto "di commutazione" e si usa per far comprendere

quelle virgolette come se fossero parte del codice, altrimenti la stringa principale si chiuderebbe alla prima virgoletta che

troverà.

la classe che contiene il metodo doPost è la classe httpServlet.

il metodo service interpreterà la tipologia di richiesta (get o Post) inviando i parametri di HttpServletRequest req e

HttpServletResponse res.

L'altro file importante per il server è il file web.xml.

Tomcat>webapps>cartellaApplicazione>WEB-INF>web.xml

Questo file serve al tomcat per individuare le servlet al tomcat, tramite la mappatura noi indicheremo proprio l'URL

della servlet "servlet/nomeApp".

Primo esercizio a casa di una servlet

Richiama l'esecuzione della classe Esercizio

Esercizio

Visualizza un modulo form

Esercizio

Esercizio

/servlet/Esercizio

Costruzione classe con contatore che verrà incrementato ogni chiamata di servlet.

Il metodo init è contenuto all'interno della classe genericServlet e lo sovrascriveremo con la stringa super.init() all'interno perché

se non lo sovrascrivessimo, ci sarebbero problemi con la classe madre genericServlet.

Prova della pagina con contatore che si incrementa

Se noi chiudessimo tomcat e xampp durante l'aggiornamento della pagina (e ovviamente anche gli incrementi) e poi riaprissimo

xampp e tomcat la pagina e la servlet verrà re-inizializzata e il contatore verrà riavviato.

La classe genericServlet appartiene al package di javax.servlet.http.*

Nel caso non volessimo usare un documento html in uscita, ma un flusso binario useremo string buffer.

Parametrizzare e configurare una applicazione web.

Perché è necessario?

Supponiamo di voler realizzar un'applicazione web per un istituto scolastico e supponiamo che dovrà restituire un certo tipo di

output: nome della scuola, il paese e il suo indirizzo.

Il codice può essere riutilizzato per diversi istituti scolastici e quindi per differenti parametri di nome, città e indirizzo.

Per farlo dovremmo ovviamente modificare la classe java. si tratta di una procedura molto lenta se fatta non attraverso la

parametrizzazione.

Prima modalità: scrivere dei file di configurazione all'interno del file xml.

Seconda modalità: l'utilizzo di file resource bundle, file testuali di estensione properties.

Il codice che riutilizzeremo sarà quello del contatore precedente ma andremo a cambiare alcune cose:

l'init() lo lasceremo così però andremo ad eliminare il contatore e inseriamo delle stringhe nomeScuola, Indirizzo, citta e Colore.

Il metodo che permette la configurazione e la lettura dei parametri di configurazione è il:

parametro.getInitParameter(nomeParametro):

public void init(ServletConfig config)

throws ServletException

super.init(config);

nomeScuola = config.getInitParameter("nomeScuola");

citta = config.getInitParameter("citta");

indirizzo = config.getInitParameter("indirizzo");

colore = config.getInitParameter("colore");

La modifica che andrà a rendere il programma quello che cerchiamo sarà fatta nel file xml, nel context description:

abbiamo la stessa struttura del vecchio xml e dobbiamo inserire e precisare i precedenti parametri che abbiamo scelto di avere

con il tag , contenuto all’interno del tag generico ,

quindi:

nome parametro

valore del parametro

Altro metodo per parametrizzare:

Il metodo getServletConfig.

Perché questa modalità può essere più vantaggiosa dell'altro?

Perché è scritto nel metodo doGet, può essere richiamato in qualsiasi momento dal metodo doGet, non per forza dal init() che

sta prima del doGet e quindi il getInitParameter dovrebbe necessariamente essere scritto all’inizio nell’init().

ServletConfig config = getServletConfig();

String parametro = config.getInitParameter("nomeParametro");

Avremo sempre un oggetto di tipo classe ServletConfig.

I parametri, sempre scritti nel context description, verranno estrapolati uno alla volta con il metodo getInitParameter.

La differenza sostanziale è che invece di scrivere il metodo init e parametrizzare la servlet nel metodo init, lo facciamo all'interno

del metodo doGet:

Dobbiamo cancellare il metodo init() e aggiungere queste due righe presentate.

/* Esempio di passaggio dei parametri alla servlet mediante la modalità GET / import java.io.; import javax.servlet.; import javax.servlet.http.; import java.util.Date; import java.util.Locale; import java.text.DateFormat; public class Form extends HttpServlet { String nome; String cognome; public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html"); // content type PrintWriter output = response.getWriter(); // get writer ---> viene effettuata la conversione. nome = request.getParameter("nome"); cognome = request.getParameter("cognome"); // crea una pagina HTML e la invia al client output.println(""); output.println(""); output.println("Home Page"); output.println(""); output.println(""); output.println("Benvenuto "+nome+" "+cognome+"! "); //concateniamo le due variabili. Date d = new Date(); //istruzioni che permettono di leggere la data DateFormat formatoData = DateFormat.getDateInstance(DateFormat.FULL, Locale.ITALY); String data = formatoData.format(d); output.println("

La data di oggi e': " +data+ "

"); output.println(""); output.println(""); } }

Metodo getParameter riceve un oggetto di tipo string che è il nome del parametro e restituirà un oggetto di tipo String che sarà

il valore effettivo del parametro. Dopo aver definito questi parametri, la servlet sarà in grado di utilizzarli per qualsiasi motivo.

Il deployement descriptor sarà lo stesso del file xml che abbiamo fatto l’altra volta, quindi elemento o tag di init-paramer e cose

varie.

Andiamo ad aprire la servlet nuovamente.

Una volta aperto l’index

inseriamo dei parametri

all’interno del form e li

inviamo

Otterremo così la servlet con i dati che abbiamo inviato noi. Localhost:8080  la nostra porta. la parte che include i dati si chiama querystring che viene visualizzata solo in modalità get. Si definisce il simbolo punto interrogativo per iniziare i parametri e il simbolo della & (e commerciale) per dividere e separare i parametri. Andiamo a vedere l’index della pagina html Benvenuto_POST

Passaggio dei parametri alla servlet con la modalità POST

Passaggio dei parametri alla servlet con la modalità POST

Inserisci nome e cognome, e clicca sul pulsante per inviare i dati alla servlet "Form.java"

Inviando così tale servlet, i dati dei parametri non verranno visualizzati sulla barra di ricerca: non vedremo più il punto

interrogativo, né la &, né i parametri.

Se dovessimo contemplare entrambe le modalità in una pagina html basterebbe aggiungere entrambi i metodi: un metodo post

completo ed un metodo get semplificato con solamente un metodo doPost(request,response) andando a richiamare il metodo.

finora abbiamo visto come fare il form e la richiesta in html ma può essere tutto semplificato scrivendo direttamente la querystring in html: prendiamo l'intero index e togliamo il form possiamo invocare la servlet con querystring. scriviamo un link link lol

LINGUAGGIO XML L'XML si presenta utile per diverse problematiche:  definizione struttura di documenti allo scambio di informazione;  rappresentazione di dati. I File XML sono file molto semplici le quali specifiche del linguaggio sono state definite dal W3C. Un file XML è un semplice file di tipo testuale, che permette di dividere la rappresentazione grafica dei dati dalla loro natura. È strutturato come un insieme di regole sintattiche che rappresentano la natura dei dati che contengono le informazioni con le quali vengono rappresentati. come il linguaggio HTML, i file xml si basano sull'utilizzo di attributi , la differenza sta nel fatto che l'html si occupa di rappresentare i dati, mentre l'xml si occupa della modellizzazione dei dati. Questi due linguaggi lavorano in parallelo. DATA ISLAND, isole di dati: con XML i dati strutturati possono essere memorizzati all'interno di pagine HTML. altri utilizzi sono:  scambio di dati con XML ---> DATABASE. dati spesso incompatibili tra loro. xml si presenta come uno strumento utile. conversione dei dati in formato xml riduce la complessità di tale scambio di dati incompatibili. può essere trasmesso tra aziende e ambienti differenti. FACILITANO LO SCAMBIO DEI DATI/CONDIVISIONE --> questo linguaggio è slegato dalle componenti hardware e software;  riguarda la memorizzazione dei dati: permette di memorizzare i dati all'interno di file o database. rende i database molto più accessibili, utilizzando strutture che permettono di archiviare e recuperare informazioni dagli archivi. UN DOCUMENTO XML è WELL FORMED SE I NOMI DEGLI ELEMENTI RISPETTANO I SEGUENTI CRITERI:

  1. IL NOME NON DEVE CONTENERE SPAZI
  2. IL NOME DELL'ELEMENTO NON DEVE INIZIARE CON UN NUMERO
  3. IL NOME DELL'ELEMENTO NON DEVE INIZIARE CON IL CARATTERE UNDERSCORE DOCUMENTO DTD Il Documento DTD (Document Type Definition) è un documento che descrive i tag utilizzabili in un documento XML, la loro reciproca relazione nella struttura e le altre informazioni sugli attributi di ciascun tag.  definisce gli elementi utilizzabili nel documento e la struttura del documento stesso;  definisce invece tutti gli attributi per ciascun elemento. si deve definire il numero di occorrenze di un elemento. Esso indica:  con + se l'elemento è presente una o più volte;  con se l'elemento è presente zero o due volte;  con? se l'elemento è presente zero o una sola volta; la definizione che specifica che un elemento non ha contenuto è EMPTY

se un elemento racchiude del testo si usa la definzione: #PCDATA

se il contenuto di un elemento non è definito, cioè quando può essere vuoto o contenere qualcosa, si usa la definizione ANY.