Tutorial di Applicazioni Web Java per Principianti

Java Web Application viene utilizzato per creare siti web dinamici. Java fornisce supporto per le applicazioni web tramite Servlet e JSP. Possiamo creare un sito web con pagine HTML statiche, ma quando vogliamo che le informazioni siano dinamiche, abbiamo bisogno di un’applicazione web.

Java Web Application

Lo scopo di questo articolo è fornire dettagli di base sui diversi componenti dell’applicazione web e su come utilizzare Servlet e JSP per creare la nostra prima applicazione web in Java.

  1. Server e Client Web
  2. HTML e HTTP
  3. Comprensione dell’URL
  4. Perché abbiamo bisogno di Servlet e JSP?
  5. Prima applicazione web con Servlet e JSP
  6. Contenitore Web
  7. Struttura della directory dell’applicazione web
  8. Descrittore di distribuzione

Server e Client Web

Il server Web è un software in grado di elaborare la richiesta del client e inviare la risposta al client. Ad esempio, Apache è uno dei server Web più utilizzati. Il server Web viene eseguito su una macchina fisica e ascolta le richieste dei client su una porta specifica. Un client Web è un software che aiuta a comunicare con il server. Alcuni dei client Web più utilizzati sono Firefox, Google Chrome, Safari, ecc. Quando richiediamo qualcosa al server (attraverso l’URL), il client Web si occupa di creare una richiesta, inviarla al server, analizzare la risposta del server e presentarla all’utente.

HTML e HTTP

Il server Web e il client Web sono due software separati, quindi deve esserci un linguaggio comune per la comunicazione. HTML è il linguaggio comune tra server e client e sta per HyperText Markup Language. Il server Web e il client hanno bisogno di un protocollo di comunicazione comune, HTTP (HyperText Transfer Protocol) è il protocollo di comunicazione tra server e client. HTTP funziona in cima al protocollo di comunicazione TCP/IP. Alcune delle parti importanti della richiesta HTTP sono:

  • Metodo HTTP – azione da eseguire, di solito GET, POST, PUT, ecc.
  • URL – Pagina da accedere
  • Parametri del modulo – simili agli argomenti in un metodo Java, ad esempio dettagli utente, password dalla pagina di accesso.

Esempio di richiesta HTTP:

GET /FirstServletProject/jsps/hello.jsp HTTP/1.1
Host: localhost:8080
Cache-Control: no-cache

Alcune delle parti importanti della risposta HTTP sono:

  • Codice di stato – un numero intero che indica se la richiesta è stata eseguita con successo o meno. Alcuni dei codici di stato più noti sono 200 per il successo, 404 per Non trovato e 403 per Accesso negato.
  • Tipo di contenuto – testo, html, immagine, pdf, ecc. Conosciuto anche come tipo MIME
  • Contenuto – dati effettivi che vengono resi dal client e mostrati all’utente.

Esempio di risposta HTTP:

200 OK
Date: Wed, 07 Aug 2013 19:55:50 GMT
Server: Apache-Coyote/1.1
Content-Length: 309
Content-Type: text/html;charset=US-ASCII

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Hello</title>
</head>
<body>
<h2>Hi There!</h2>
<br>
<h3>Date=Wed Aug 07 12:57:55 PDT 2013
</h3>
</body>
</html>

Tipo MIME o tipo di contenuto: Se si guarda l’intestazione di risposta HTTP di esempio sopra, contiene il tag “Content-Type”. Viene anche chiamato tipo MIME e il server lo invia al client per far loro sapere il tipo di dati che sta inviando. Aiuta il client a visualizzare i dati per l’utente. Alcuni dei tipi MIME più utilizzati sono text/html, text/xml, application/xml, ecc.

Comprensione dell’URL

URL è l’acronimo di Universal Resource Locator ed è utilizzato per individuare il server e la risorsa. Ogni risorsa sul web ha il suo indirizzo unico. Vediamo le parti dell’URL con un esempio. https://localhost:8080/FirstServletProject/jsps/hello.jsp https:// – Questa è la prima parte dell’URL e fornisce il protocollo di comunicazione da utilizzare nella comunicazione server-client. localhost – L’indirizzo unico del server, nella maggior parte dei casi è il nome host del server che viene mappato a un indirizzo IP unico. A volte più nomi host puntano allo stesso indirizzo IP e il server virtuale si occupa di inviare una richiesta all’istanza specifica del server. 8080 – Questa è la porta su cui il server è in ascolto, è facoltativa e se non la forniamo nell’URL la richiesta viene inviata alla porta predefinita del protocollo. I numeri di porta da 0 a 1023 sono porte riservate per servizi ben noti, ad esempio, 80 per HTTP, 443 per HTTPS, 21 per FTP, ecc. FirstServletProject/jsps/hello.jsp – Risorsa richiesta dal server. Può essere un file statico html, pdf, JSP, servlet, PHP, ecc.

Perché abbiamo bisogno di Servlet e JSP?

I server web sono adatti per pagine HTML con contenuti statici, ma non sanno generare contenuti dinamici o salvare dati nei database, quindi abbiamo bisogno di un altro strumento che possiamo utilizzare per generare contenuti dinamici. Ci sono diversi linguaggi di programmazione per contenuti dinamici come PHP, Python, Ruby on Rails, Java Servlets e JSP. I Java Servlet e JSP sono tecnologie lato server per estendere le capacità dei server web, fornendo supporto per risposte dinamiche e persistenza dei dati.

Sviluppo web in Java

Prima applicazione web con Servlet e JSP

Useremo “Eclipse IDE for Java EE Developers” per creare la nostra prima applicazione servlet. Poiché il servlet è una tecnologia lato server, avremo bisogno di un contenitore web che supporti la tecnologia Servlet, quindi useremo il server Apache Tomcat. È molto facile da configurare e lascerò a te questa parte. Per facilitare lo sviluppo, possiamo configurare Tomcat con Eclipse, ciò aiuta nel deployment e nell’esecuzione delle applicazioni. Vai alle Preferenze di Eclipse e seleziona Ambienti di esecuzione server e seleziona la versione del tuo server Tomcat, la mia è Tomcat 7. Fornisci la posizione della directory di Apache Tomcat e le informazioni JRE per aggiungere l’ambiente di runtime. Ora vai alla visualizzazione Server e crea un nuovo server come nell’immagine seguente, puntando all’ambiente di runtime appena aggiunto. Nota: Se la scheda Server non è visibile, puoi selezionare Finestra > Mostra visualizzazione > Server in modo che sia visibile nella finestra di Eclipse. Prova a fermare e avviare il server per assicurarti che funzioni correttamente. Se hai già avviato il server dal terminale, dovrai fermarlo dal terminale e quindi avviarlo da Eclipse altrimenti non funzionerà correttamente. Ora siamo pronti con la nostra configurazione per creare il primo servlet ed eseguirlo sul server Tomcat. Seleziona File > Nuovo > Progetto Web Dinamico e utilizza l’immagine seguente per fornire come runtime il server che abbiamo aggiunto nell’ultimo passaggio e la versione del modulo come 3.0 per creare il nostro servlet utilizzando le specifiche Servlet 3.0. Puoi fare clic direttamente sul pulsante Fine per creare il progetto o puoi fare clic sui pulsanti Avanti per verificare altre opzioni. Ora seleziona File > Nuovo > Servlet e utilizza l’immagine seguente per creare il nostro primo servlet. Di nuovo, puoi fare clic su Fine o puoi controllare altre opzioni tramite il pulsante Avanti. Quando facciamo clic sul pulsante Fine, viene generato il codice scheletro del nostro servlet, quindi non dobbiamo digitare tutti i diversi metodi e importazioni nel servlet e ci fa risparmiare tempo. Ora aggiungeremo del codice HTML con dati dinamici nel metodo doGet() che verrà invocato per la richiesta HTTP GET. Il nostro primo servlet ha questo aspetto.

package com.journaldev.first;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class FirstServlet
 */
@WebServlet(description = "My First Servlet", urlPatterns = { "/FirstServlet" , "/FirstServlet.do"}, initParams = {@WebInitParam(name="id",value="1"),@WebInitParam(name="name",value="pankaj")})
public class FirstServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	public static final String HTML_START="";
	public static final String HTML_END="";
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public FirstServlet() {
        super();
        // TODO Costruttore generato automaticamente
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		PrintWriter out = response.getWriter();
		Date date = new Date();
		out.println(HTML_START + "

Hi There!


Date="+date +"

"+HTML_END); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Metodo generato automaticamente } }

Prima di Servlet 3, dovevamo fornire le informazioni sul pattern dell’URL nel descrittore di distribuzione dell’applicazione web, ma Servlet 3.0 utilizza le annotazioni Java che sono facili da capire e con minori possibilità di errori. Ora scegliere Esegui > Esegui su server dall’editor Servlet e utilizzare le seguenti immagini per le opzioni. Dopo aver fatto clic su Fine, il browser si aprirà in Eclipse e otterremo la seguente pagina HTML. È possibile aggiornarla per verificare che la data sia dinamica e continui a cambiare, è possibile aprirla anche al di fuori di Eclipse in qualsiasi altro browser. Quindi, Servlet viene utilizzato per generare HTML e inviarlo come risposta, se si esamina l’implementazione doGet(), in realtà stiamo creando un documento HTML e scrivendolo nell’oggetto PrintWriter della risposta e stiamo aggiungendo informazioni dinamiche dove ne abbiamo bisogno. È buono per iniziare, ma se la risposta è enorme con molti dati dinamici, è soggetto a errori ed è difficile da leggere e mantenere. Questa è la ragione principale per l’introduzione di JSP. JSP è anche una tecnologia lato server ed è simile all’HTML con funzionalità aggiuntive per aggiungere contenuto dinamico dove ne abbiamo bisogno. I JSP sono buoni per la presentazione perché è facile da scrivere in quanto è simile all’HTML. Ecco il nostro primo programma JSP che fa la stessa cosa del servlet precedente.

<%@page import="java.util.Date"%>
<%@ page language="java" contentType="text/html; charset=US-ASCII"
    pageEncoding="US-ASCII"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Hello</title>
</head>
<body>
<h2>Hi There!</h2>
<br>
<h3>Date=<%= new Date() %>
</h3>
</body>
</html>

Se eseguiamo il JSP sopra, otteniamo un output come nell’immagine sottostante. La struttura finale del progetto appare come nell’immagine sottostante in Eclipse.

Scarica il progetto FirstServlet

Scarica il progetto esempio Servlet Hello World

Esamineremo i Servlet e gli JSP in modo più dettagliato in futuri articoli, ma prima di concludere questo articolo, dovremmo avere una buona comprensione di alcuni aspetti delle applicazioni web Java.

Contenitore Web

Tomcat è un contenitore web, quando viene effetta una richiesta da un client a un server web, questa viene passata al contenitore web ed è compito del contenitore web trovare la risorsa corretta per gestire la richiesta (servlet o JSP) e quindi utilizzare la risposta dalla risorsa per generare la risposta e fornirla al server web. Successivamente, il server web invia la risposta al client. Quando il contenitore web riceve la richiesta e se è per una servlet, il contenitore crea due oggetti HTTPServletRequest e HTTPServletResponse. Quindi trova la servlet corretta in base all’URL e crea un thread per la richiesta. Successivamente, invoca il metodo service() della servlet e in base al metodo HTTP, il metodo service() invoca i metodi doGet() o doPost(). I metodi della servlet generano la pagina dinamica e la scrivono sulla risposta. Una volta completato il thread della servlet, il contenitore converte la risposta in una risposta HTTP e la invia al client. Alcuni dei lavori importanti svolti dal contenitore web sono:

  • Supporto alla comunicazione – Il contenitore fornisce un modo semplice di comunicazione tra il server web e le servlet e JSP. Grazie al contenitore, non è necessario creare un socket del server per ascoltare eventuali richieste dal server web, analizzare la richiesta e generare una risposta. Tutte queste importanti e complesse attività sono svolte dal contenitore e tutto ciò su cui dobbiamo concentrarci è la logica di business delle nostre applicazioni.
  • Gestione del ciclo di vita e delle risorse – Il contenitore si occupa di gestire il ciclo di vita delle servlet. Il contenitore si occupa di caricare le servlet in memoria, inizializzare le servlet, invocare i metodi delle servlet e distruggerle. Il contenitore fornisce anche utility come JNDI per il pooling e la gestione delle risorse.
  • Supporto multithreading – Il container crea un nuovo thread per ogni richiesta al servlet e quando viene elaborato il thread muore. Quindi i servlet non vengono inizializzati per ogni richiesta e risparmiano tempo e memoria.
  • Supporto JSP – Le JSP non assomigliano a normali classi Java e il container web fornisce supporto per le JSP. Ogni JSP dell’applicazione viene compilata dal container e convertita in un servlet, quindi il container le gestisce come gli altri servlet.
  • Attività varie – Il container web gestisce il pool di risorse, esegue ottimizzazioni della memoria, avvia il garbage collector, fornisce configurazioni di sicurezza, supporto per applicazioni multiple, distribuzione in tempo reale e altre attività dietro le quinte che rendono la nostra vita più facile.

Struttura della directory dell’applicazione web

Le applicazioni web Java vengono confezionate come file di archivio web (WAR) e hanno una struttura definita. È possibile esportare il progetto web dinamico sopra come file WAR e decomprimerlo per controllare la gerarchia. Sarà qualcosa come l’immagine sottostante.

File di descrizione del deployment

web.xml è il file di descrizione del deployment dell’applicazione web e contiene le configurazioni per i servlet (prima della versione 3.0), le pagine di benvenuto, le configurazioni di sicurezza, le impostazioni per il timeout della sessione, ecc. Questo è tutto per il tutorial di avvio dell’applicazione web in Java, esploreremo i Servlet e le JSP più approfonditamente in futuri articoli. Aggiornamento: Il prossimo tutorial in questa serie è Tutorial sui Servlet Java

Source:
https://www.digitalocean.com/community/tutorials/java-web-application-tutorial-for-beginners