Java >> Programma Java >  >> Java

Esempio di parametri URL servlet Java

I servlet sono moduli del codice Java che vengono eseguiti in un'applicazione server per rispondere alle richieste del client. Non sono legati a uno specifico protocollo client-server ma sono più comunemente usati con HTTP. La parola “Servlet ” è spesso usato nel significato di “servlet HTTP ”. In questo tutorial spiegheremo come gestire i parametri della richiesta HTTP Servlet.

1. Introduzione

Servo è un programma Java che esiste ed è in esecuzione nei server J2EE e viene utilizzato per ricevere la richiesta del protocollo HTTP, elaborarla e rispedire la risposta al client. I servlet utilizzano le classi di estensione standard Java nei pacchetti javax.servlet e javax.servlet.http . Poiché i servlet sono scritti nel linguaggio Java altamente portabile e seguono un framework standard, forniscono un mezzo per creare le sofisticate estensioni del server in un server e nel sistema operativo in modo indipendente.

Usi tipici di HTTP I servlet includono:

  • Elaborazione e/o conservazione dei dati inviati da un modulo HTML
  • Fornire contenuto dinamico, ovvero restituire i risultati di una query al database al client
  • Gestione delle informazioni sullo stato sopra l'HTTP stateless, ad esempio per un sistema di carrello degli acquisti online che gestisce i carrelli degli acquisti per molti clienti simultanei e mappa ogni richiesta al cliente giusto

Poiché la tecnologia Servlet utilizza il linguaggio Java, le applicazioni Web realizzate utilizzando Servlet sono protette , scalabile e Robusto .

1.1 Architettura del servlet e ciclo di vita

Un Servlet, nella sua forma più generale, è un'istanza di una classe che implementa il javax.servlet.Servlet interfaccia. La maggior parte dei servlet, tuttavia, estende una delle implementazioni standard di questa interfaccia, ovvero javax.servlet.GenericServlet e javax.servlet.http.HttpServlet . In questo tutorial, discuteremo solo dei servlet HTTP che estendono il javax.servlet.http.HttpServlet classe.

Per inizializzare un Servlet, un'applicazione server carica la classe Servlet e crea un'istanza chiamando il costruttore no-args. Quindi chiama il servlet init(ServletConfig config) metodo. Il servlet dovrebbe eseguire le procedure di configurazione una tantum in questo metodo e memorizzare il ServletConfig oggetto in modo che possa essere recuperato in seguito chiamando il servlet getServletConfig() metodo. Questo è gestito dal GenericServlet . Servlet che estendono il GenericServlet (o la sua sottoclasse cioè HttpServlet ) dovrebbe chiamare il super.init(config) all'inizio del init metodo per utilizzare questa funzione.

Firma del metodo init()

public void init(ServletConfig config) throws ServletException

Il ServletConfig contiene i parametri del servlet e un riferimento al ServletContext del servlet . Il init è garantito che il metodo venga chiamato solo una volta durante il ciclo di vita del servlet. Non è necessario che sia thread-safe perché service() il metodo non verrà chiamato fino alla chiamata al init() metodo ritorna.

Quando il servlet viene inizializzato, il suo service(HttpServletRequest req, HttpServletResponse resp) viene chiamato per ogni richiesta al servlet. Il metodo è chiamato contemporaneamente (ovvero più thread possono chiamare questo metodo contemporaneamente) poiché dovrebbe essere implementato in modo thread-safe. Il service() il metodo chiamerà quindi il doGet() o doPost() metodo basato sul tipo di richiesta HTTP.

Firma del metodo service()

public void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException

Quando è necessario scaricare il servlet (ad es. perché deve essere caricata una nuova versione o il server si sta spegnendo), il destroy() viene chiamato il metodo. Potrebbero esserci ancora thread che eseguono il service() metodo quando il destroy() viene chiamato il metodo, quindi destroy() il metodo deve essere thread-safe. Tutte le risorse che sono state allocate nel init() dovrebbe essere rilasciato nel destroy() metodo. Questo metodo è garantito per essere chiamato solo una volta durante il ciclo di vita del Servlet.

Fig. 1:Un tipico ciclo di vita del servlet

1.2 Contenitore servlet

Contenitore servlet è un componente che carica i servlet e gestisce il ciclo di vita dei servlet e risponde con il contenuto dinamico al server HTTP. Il contenitore servlet viene utilizzato dal server HTTP per elaborare il contenuto dinamico e Tomcat è un esempio perfetto per il Servlet Container.

Fig. 2:Contenitore servlet

Il contenitore servlet esegue le operazioni riportate di seguito:

  • Gestione del ciclo di vita
  • Supporto multithread
  • Raccolta di oggetti
  • Sicurezza ecc.

1.3 Ricevi e invia richiesta

Esistono molte differenze tra la richiesta HTTP Get e Post. Vediamo queste differenze:

Funzionalità OTTIENI POST
Invio dei dati I dati del cliente vengono aggiunti all'URL e inviati I dati del cliente vengono inviati separatamente
Memorizzazione nella cronologia del browser Quando i dati vengono aggiunti, i dati del client vengono archiviati nella cronologia del browser Poiché i dati vengono inviati separatamente, i dati del client non vengono memorizzati nella cronologia del browser
Segnalibro L'URL con i dati del client può essere aggiunto ai preferiti. In tal modo, in seguito senza compilare il modulo HTML, gli stessi dati possono essere inviati al server Impossibile aggiungere un segnalibro
Codifica o enctype application/x-www-form-urlencoded application/x-www-form-urlencoded o multipart/form-data . Per i dati binari, multipart viene utilizzato il tipo di codifica
Limitazione dei dati inviati Limitato a 2048 caratteri (a seconda del browser) Dati illimitati
Facilità di hacking Facile da hackerare i dati poiché i dati sono archiviati nella cronologia del browser Difficile da hackerare in quanto i dati vengono inviati separatamente in formato HTML
Tipo di dati inviati È possibile inviare solo dati ASCII Può essere inviato qualsiasi tipo di dati inclusi i dati binari
Segretezza dei dati I dati non sono segreti poiché altre persone possono vedere i dati nella cronologia del browser I dati sono segreti in quanto non memorizzati nella cronologia del browser
Quando utilizzarlo Preferisci quando i dati inviati non sono segreti. Non utilizzare per password ecc. Preferisci dati critici e sensibili come password ecc.
Cache Può essere catturato Impossibile catturare
Predefinito Se non menzionato, GET viene assunto come predefinito Dovrebbe essere menzionato esplicitamente
Prestazioni Relativamente più veloce poiché i dati vengono aggiunti all'URL Deve essere creato un corpo del messaggio separato

Ricorda, se i dati del client includono solo i caratteri ASCII cioè nessuna segretezza e i dati sono limitati a 2 KB di lunghezza, quindi preferisci GET, altrimenti POST.

1.4 Vantaggi dei servlet

Ci sono molti vantaggi di Servlet su CGI (Common Gateway Interface). Il contenitore Web servlet crea thread per la gestione delle richieste multiple al servlet. I thread hanno molti vantaggi rispetto ai processi in quanto condividono un'area di memoria comune, sono leggeri, i costi di comunicazione tra i thread sono bassi. I vantaggi di base di Servlet sono i seguenti:

  • Meno tempo di risposta perché ogni richiesta viene eseguita in un thread separato
  • I servlet sono scalabili
  • I servlet sono robusti e orientati agli oggetti
  • I servlet sono indipendenti dalla piattaforma
  • I servlet sono sicuri e offrono portabilità

Fig. 3:Vantaggi dell'utilizzo dei servlet

Ora apri l'IDE Eclipse e vediamo come recuperare i parametri Url in un Servlet!

2. Esempio di parametri URL servlet Java

Ecco una guida passo passo per implementare il framework servlet in Java.

2.1 Strumenti utilizzati

Stiamo usando Eclipse Kepler SR2, JDK 8 e Maven. Detto questo, abbiamo testato il codice rispetto a JDK 1.7 e funziona bene.

2.2 Struttura del progetto

Innanzitutto, esaminiamo la struttura finale del progetto, nel caso in cui sei confuso su dove creare i file o le cartelle corrispondenti in un secondo momento!

Fig. 4:Struttura del progetto applicativo

2.3 Creazione del progetto

Questa sezione mostrerà come creare un progetto Maven basato su Java con Eclipse. In Eclipse IDE, vai a File -> New -> Maven Project .

Fig. 5:Crea progetto Maven

Nella finestra New Maven Project, ti chiederà di selezionare la posizione del progetto. Per impostazione predefinita, sarà selezionato "Usa posizione dell'area di lavoro predefinita". Basta fare clic sul pulsante Avanti per procedere.

Fig. 6:Dettagli del progetto

Seleziona l'App Web Maven Archetipo dall'elenco di opzioni e fare clic su Avanti.

Fig. 7:Selezione dell'archetipo

Ti chiederà di "Inserire il gruppo e l'ID artefatto per il progetto". Inseriremo i dettagli come mostrato nell'immagine qui sotto. Il numero di versione sarà per impostazione predefinita:0.0.1-SNAPSHOT .

Fig. 8:Parametri dell'archetipo

Fare clic su Fine e la creazione di un progetto Maven è completata. Se osservi, ha scaricato le dipendenze Maven e un pom.xml verrà creato il file. Avrà il seguente codice:

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>JavaServletUrlParameters</groupId>
	<artifactId>JavaServletUrlParameters</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>war</packaging>
</project>

Possiamo iniziare ad aggiungere le dipendenze che gli sviluppatori desiderano come Servlets, Junit ecc. Iniziamo a creare l'applicazione!

3. Creazione di applicazioni

Di seguito sono riportati i passaggi coinvolti nello sviluppo di questa applicazione.

3.1 Dipendenze Maven

Qui specifichiamo le dipendenze per l'API Servlet. Le restanti dipendenze verranno automaticamente risolte dal framework Maven e aggiornato il file avrà il seguente codice:

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>JavaServletUrlParameters</groupId>
	<artifactId>JavaServletUrlParameters</artifactId>
	<packaging>war</packaging>
	<version>0.0.1-SNAPSHOT</version>
	<name>JavaServletUrlParameters Maven Webapp</name>
	<url>http://maven.apache.org</url>
	<dependencies>
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>javax.servlet-api</artifactId>
			<version>3.1.0</version>
		</dependency>
	</dependencies>
	<build>
		<finalName>${project.artifactId}</finalName>
	</build>
</project>

3.2 Creazione di classi Java

Creiamo i file Java richiesti. Fare clic con il pulsante destro del mouse su src/main/java cartella, New -> Package .

Fig. 9:Creazione del pacchetto Java

Si aprirà una nuova finestra pop in cui inseriremo il nome del pacchetto come:com.jcg.servlet .

Fig. 10:Nome pacchetto Java (com.jcg.servlet)

Una volta creato il pacchetto nell'applicazione, dovremo creare la classe controller. Fai clic con il pulsante destro del mouse sul pacchetto appena creato:New -> Class .

Fig. 11:Creazione di classi Java

Si aprirà una nuova finestra pop e inserisci il nome del file come:ServletUrlParameterExample . La classe Servlet Controller verrà creata all'interno del pacchetto:com.jcg.servlet .

Fig. 12:Classe Java (ServletUrlParameterExample.java)

3.2.1 Implementazione della classe controller servlet

In una richiesta HTTP GET, i parametri della richiesta vengono presi dalla stringa di query (ovvero i dati che seguono il punto interrogativo nell'URL). Ad esempio, l'URL http://hostname.com?p1=v1&p2=v2 contiene i due parametri di richiesta ovvero p1 e p2 . Vediamo il semplice frammento di codice che segue questa implementazione.

ServletUrlParameterExample.java

package com.jcg.servlet;

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

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

@WebServlet("/getParameters")
public class ServletUrlParameterExample extends HttpServlet {

	private static final long serialVersionUID = 1L;

	// This Method Is Called By The Servlet Container To Process A 'GET' Request.
	public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
		handleRequest(req, resp);
	}

	public void handleRequest(HttpServletRequest req, HttpServletResponse resp) throws IOException {

		resp.setContentType("text/html");

		// Get Parameters From The Request
		String param1 = req.getParameter("param1");
		String param2 = req.getParameter("param2");
		String[] paramArray = req.getParameterValues("paramArray");

		if(param1 == null || param2 == null || paramArray == null) {
			// The Request Parameters Were Not Present In The Query String. Do Something Or Exception Handling !!
		} else if ("".equals(param1) || "".equals(param2) || "".equals(paramArray)) {
			// The Request Parameters Were Present In The Query String But Has No Value. Do Something Or  Exception Handling !!
		} else {
			System.out.println("Parameter1?= " + param1 + ", Parameter2?= " + param2 + ", Array Parameters?= " + Arrays.toString(paramArray));

			// Print The Response
			PrintWriter out = resp.getWriter();
			out.write("<html><body><div id='serlvetResponse'>");
			out.write("<h2>Servlet HTTP Request Parameters Example</h2>");
			out.write("<p>param1: " + param1 + "</p>");
			out.write("<p>param2: " + param2 + "</p>");
			out.write("<p>paramArray: " + Arrays.toString(paramArray) + "</p>");
			out.write("</div></body></html>");
			out.close();
		}
	}
}

4. Esegui l'applicazione

Poiché siamo pronti con tutte le modifiche, compiliamo il progetto e distribuiamo l'applicazione sul server Tomcat7. Per distribuire l'applicazione su Tomat7, fai clic con il pulsante destro del mouse sul progetto e vai a Run as -> Run on Server .

Fig. 13:Come distribuire l'applicazione su Tomcat

Tomcat distribuirà l'applicazione nella sua cartella delle app Web e avvierà la sua esecuzione per distribuire il progetto in modo che possiamo procedere e testarlo sul browser.

5. Demo del progetto

Apri il tuo browser preferito e premi il seguente URL. Verrà visualizzata la pagina di output.

http://localhost:8085/JavaServletUrlParameters/

Il nome del server (localhost) e la porta (8085) possono variare in base alla configurazione di Tomcat. Gli sviluppatori possono eseguire il debug dell'esempio e vedere cosa succede dopo ogni passaggio. Divertiti!

Fig. 14:Output dell'applicazione

Questo è tutto per questo post. Buon apprendimento!!

6. Conclusione

In questa sezione, gli sviluppatori hanno appreso come recuperare i parametri della richiesta in un servlet. Gli sviluppatori possono scaricare l'applicazione di esempio come progetto Eclipse nella sezione Download. Spero che questo articolo ti sia servito qualunque cosa stavi cercando come sviluppatore.

7. Scarica il progetto Eclipse

Questo era un esempio di Servlet Url Parameters.Apache Tomcat get servlet ciclo di vita del servlet Tomcat Tomcat 8

Etichetta Java