Torna indietro   Hardware Upgrade Forum > Software > Programmazione

iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile
iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile
C'è tanta sostanza nel nuovo smartphone della Mela dedicato ai creator digitali. Nuovo telaio in alluminio, sistema di raffreddamento vapor chamber e tre fotocamere da 48 megapixel: non è un semplice smartphone, ma uno studio di produzione digitale on-the-go
Intel Panther Lake: i processori per i notebook del 2026
Intel Panther Lake: i processori per i notebook del 2026
Panther Lake è il nome in codice della prossima generazione di processori Intel Core Ultra, che vedremo al debutto da inizio 2026 nei notebook e nei sistemi desktop più compatti. Nuovi core, nuove GPU e soprattutto una struttura a tile che vede per la prima volta l'utilizzo della tecnologia produttiva Intel 18A: tanta potenza in più, ma senza perdere in efficienza
Intel Xeon 6+: è tempo di Clearwater Forest
Intel Xeon 6+: è tempo di Clearwater Forest
Intel ha annunciato la prossima generazione di processori Xeon dotati di E-Core, quelli per la massima efficienza energetica e densità di elaborazione. Grazie al processo produttivo Intel 18A, i core passano a un massimo di 288 per ogni socket, con aumento della potenza di calcolo e dell'efficienza complessiva.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 17-04-2006, 00:07   #1
boysna
Senior Member
 
Iscritto dal: Mar 2004
Città: castel san giorgio(salerno)
Messaggi: 1218
Tomcat non trova la jsp

Ciao a tutti ragazzi. Ho un problema con una jsp che viene caricata grazie ha una forward di una servlet. Questa è la servlet:
Codice:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;


public class RicercaProdotto extends HttpServlet {
	
	public void doGet (HttpServletRequest request, HttpServletResponse response)
						throws ServletException, IOException {
		
		GestioneDB cerca = new GestioneDB();
            prodotto p = cerca.cercaProdotto(request.getParameter("marca"), request.getParameter("modello"));	
		gotoPage("/visualizza_prodotto.jsp?p",request,response);
		
	} 

	private void gotoPage( String address, 
			   			   HttpServletRequest request, 
			   			   HttpServletResponse response)
			throws ServletException, IOException {
		RequestDispatcher dispatcher = 
			getServletContext().getRequestDispatcher(address);
		dispatcher.forward(request,response);
	} 
}
Come si vede deve richiamare una jsp visualizza_prodotto che è questa:
Codice:
<HTML><HEAD><TITLE>BENVENUTO</TITLE></HEAD>


<BODY BGCOLOR="white">

<% prodotto p = request.getParameter("p");
   out.println(p.getCategoria());
%>



</BODY>
</HTML>
Questa jsp l'ho messa sia sotto E:\Programmi\Apache Software Foundation\Tomcat 5.5\webapps\esercizio che sotto E:\Programmi\Apache Software Foundation\Tomcat 5.5\webapps\esercizio\work\org\apache\jsp che
E:\Programmi\Apache Software Foundation\Tomcat 5.5\webapps\esercizio\WEB-INF\classes
ma continua a darmi errore "HTTP Status 404 - /visualizza_prodotto.jsp"
"description The requested resource (/visualizza_prodotto.jsp) is not available."

Ho notato che sotto E:\Programmi\Apache Software Foundation\Tomcat 5.5\webapps\esercizio\work\org\apache\jsp sono stati creati dei file nome_jsp e nome_jsp.class per ogni jsp chiamata nome. Non so come le ho create. Comunque sono hsp raggiungibili da se,plici link e non dopo l'elaborazione di una servlet


Mi sa che dovrei creare sotto la cartella org/apache/jsp questi file anche per la jsp visualizza_prodotto, ma come faccio?
boysna è offline   Rispondi citando il messaggio o parte di esso
Old 17-04-2006, 15:31   #2
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
La cosa potrebbe anche funzionare, con le opportune impostazioni nel descrittore di dispiegamento dell'applicazione web. Ritengo tuttavia che, nel caso in cui lo standard J2EE sia affrontato per la prima volta, si deva seguire un approccio un po' più sistematico al fine di apprendere come funzioni la faccenda.

Nota che tutto quanto sto per dire è giustamente occultato dagli IDE predisposti allo sviluppo di applicazioni web J2EE, trattandosi di operazioni sempre identiche.

La struttura dei file che costituiscono un'applicazione web è questa:

1. una directory di base il cui nome, in assenza di indicazioni specifiche per il server, è considerato il nome della radice del contesto dell'applicazione.

miaapplicazione/

2. la radice contiene le pagine, statiche o dinamiche, pubblicamente accessibili.

miaapplicazione/ documenti o cartelle di documenti pubblicamente accessibili

3. la radice contiene la cartella WEB-INF. Il contenuto della cartella WEB-INF non è pubblicamente accessibile. La cartella WEB-INF contiene il necessario all'applicazione web.

3.1 la cartella WEB-INF puo contenere, ad esempio, pagine jsp, pagine html o cartelle di documenti che tu non voglia rendere pubbliche ma, ovviamente, che ti servano per l'applicazione.

3.2 la cartella WEB-INF contiene il descrittore di dispiegamento dell'applicazione web (web.xml)

miaapplicazione/WEB-INF/web.xml

3.3 la cartella WEB-INF contiene la cartella "classes". La cartella classes contiene le classi Java che definiscono i componenti servlet.

3.4 la cartella WEB-INF contiene la cartella "lib". La cartella lib contiene gli archivi jar delle librerie necessarie ai componenti dell'applicazione web. Ad esempio può contenere i JavaBean usati da servlet e pagine jsp.

Direi che questo è il minimo necessario e sufficiente, sulla struttura, per costruire un'applicazione web J2EE. C'è molto altro, naturalmente.

Faccio un esempio di costruzione di un'applicazione web J2EE che usi JavaBean, servlet, pagine jsp e html, passo per passo.

1. creiamo un cartella per infilare il necessario all'applicazione:

c:\servletsample

2. creiamo una cartella WEB-INF in /servletsample

c:\servletsample\WEB-INF

3. creiamo una cartella /classes e una /lib in WEB-INF

4. creiamo un JavaBean "Prodotto":

Codice:
package mybeans;

public class Prodotto {
	private String nome;
	private String categoria;
	public String getNome() { return nome; }
	public String getCategoria() { return categoria; }
	public void setNome(String n) { nome = n; }
	public void setCategoria(String c) { categoria = c; }
}
4.1 compiliamo Prodotto.java (javac -d . Prodotto.java) e lo impacchetto in jar (jar cf MyBeans.jar mybeans/).
4.2 copiamo il file MyBeans.jar in c:\servletsample\WEB-INF\lib\

5. creiamo una pagina html d'esempio per invocare un componente Servlet:

Codice:
<html>
<head><title>Welcome</title></head>
<body>
	<h1>Esempio</h1>
	<form action="./RicercaProdotto">
		<button type="submit">Vai</button>
	</form>
</body>
</html>
Triste ma serve allo scopo. L'unica cosa che interessa è che la pagina invoca un che di nome "RicercaProdotto". Salviamo la pagina html nella cartella WEB-INF (diventa quindi "privata") col nome arbitrario "index.html".

6. Creiamo una pagina JSP che mostra un Prodotto:

Codice:
<html>
	<head><title>Risposta</title></head>
	<body>
	<% 
		Object value = request.getAttribute("risultato");
		if(value != null && value instanceof mybeans.Prodotto) {
			mybeans.Prodotto p = (mybeans.Prodotto)value;
			out.println("Categoria: " + p.getCategoria());
		}
	%>
	</body>
</html>
o, meglio, la categoria di un Prodotto. Salviamo la pagina JSP in WEB-INF (diventa privata come index.html) col nome arbitrario "pippo.jsp".

7. Creiamo un componente Servlet:

Codice:
package servletsample;

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

public class RicercaProdotto extends HttpServlet {

	public void doGet(HttpServletRequest req, HttpServletResponse res)
		throws ServletException, IOException
	{
		mybeans.Prodotto p = new mybeans.Prodotto();
		p.setNome("Acqua");
		p.setCategoria("Alimentari");
		req.setAttribute("risultato", p);
		RequestDispatcher d = getServletContext().getRequestDispatcher("/cartelloneProdotti");
		d.include(req, res);
	}
}
RicercaProdotto si inventa un prodotto e lo rifila ad un che di nome "cartellone", ipotetica vista dei prodotto.

Compiliamo RicercaProdotto e salviamo il prodotto della compilazione, incluse le cartelle dei package e sotto package, in WEB-INF/classes. Otteniamo:

c:\miapplicazione\WEB-INF\classes\servletsample\RicercaProdotto.class

8. Creiamo il descrittore di dispiegamento dell'applicazione web. Attraverso il descrittore di dispiegamento possiamo collegare i nomi dei componenti ai riferimenti usati nei componenti stessi. Il primo passo è associare un nome ai componenti (servlet e pagine jsp), con l'elemento "servlet":

Codice:
<servlet>
	<servlet-name>gianni</servlet-name>
	<servlet-class>servletsample.RicercaProdotto</servlet-class>
</servlet>
<servlet>
	<servlet-name>pippo</servlet-name>
	<jsp-file>/WEB-INF/pippo.jsp</jsp-file>
</servlet>
Notiamo come il contenuto di "servlet-name" abbia una funzione interna al descrittore: l'associazione tra nomi usati dai componenti e nomi dei componenti si realizzare negli elementi "servlet-mapping". Ad esempio, la pagina di benvenuto ha un pulsante alla cui pressione è invocato un componente il cui percorso, relativamente alla radice dell'applicazioner web, è "RicercaProdotto". Vogliamo collegare questo "nome" al componente "gianni"? Bene, associamo "gianni" a "/RicercaProdotto":

Codice:
<servlet-mapping>
	<servlet-name>gianni</servlet-name>
	<url-pattern>/RicercaProdotto</url-pattern>
</servlet-mapping>
Il componente servlet usa un "/cartelloneProdotti"? Associamo il componente che per noi è il fantomatico cartellone prodotti al percorso "/cartelloneProdotti":

Codice:
<servlet-mapping>
	<servlet-name>pippo</servlet-name>
	<url-pattern>/cartelloneProdotti</url-pattern>
</servlet-mapping>
Non resta che la nostra pagina di benvenuto, quella automaticamente presentata dal server quando si tenti l'accesso al contesto dell'applicazione web. La nostra pagina di benvenuto è in WEB-INF/index.html. Qui associamo il percorso reale alla funzionalità "pagina di benvenuto":

Codice:
<welcome-file-list>
	<welcome-file>/WEB-INF/index.html</welcome-file>
</wecome-file-list>
L'intero descrittore di dispiegamento assume la forma:

Codice:
<?xml version="1.0"?>
<web-app>
	<servlet>
		<servlet-name>gianni</servlet-name>
		<servlet-class>servletsample.RicercaProdotto</servlet-class>
	</servlet>
	<servlet>
		<servlet-name>pippo</servlet-name>
		<jsp-file>/WEB-INF/pippo.jsp</jsp-file>
	</servlet>
	<servlet-mapping>
		<servlet-name>gianni</servlet-name>
		<url-pattern>/RicercaProdotto</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>pippo</servlet-name>
		<url-pattern>/cartelloneProdotti</url-pattern>
	</servlet-mapping>
	<welcome-file-list>
		<welcome-file>/WEB-INF/index.html</welcome-file>
	</welcome-file-list>
</web-app>
e, ripeto, è salvato in "/WEB-INF/web.xml"

Adesso si arriva al dispiegamento. Impacchetta tutto in un WAR, usando il programma jar o uno zipper o quello che vuoi purche crei un archivio zip con estensione "war". Ricorda che qui il nome dell'archivio corrisponderà alla radice dell'applicazione:

jar cf ssample.war WEB-INF/ [invio]

A questo punto lanci tomcat e copi il file ssample.war in:

TOMCAT_HOME/webapps/

attendi qualche secondo e vedrai comparire una cartella "ssample" gestita in toto dal server e di cui ti disinteresserai totalmente: la tua applicazione è nello zip "war".

A questo punto puoi provare l'applicazione accedendo al server tomcat in locare (tipo localhost:8080/) e usando il nome del "war" come punto di partenza (localhost:8080/ssample).

A questo punto si dovrebbe spiegare perchè io abbia detto "la cosa potrebbe anche funzionare", all'inizio di questo tremendo messaggio. Il descrittore di dispiegamento ti consente, relativamente alla radice dell'applicazione web, di spargere i file un po' dove ti pare, sebbene esistano dei punti "consigliati" nelle specifiche servlet 2.4. I componenti servlet, ad esempio, potrebbero benissimo essere impachettati in un jar e finire in /lib. Le pagine JSP possono annidarsi a piacere o diventare pubbliche (direttamente o in via ulteriormente annidata).

Cerca sempre di affidare al server un pacchetto war, in modo tale da non dover litigare con le cartelle del server ma con le tue. E tieni sempre presente la relatività dei percorsi e dei nome nonchè la funzione tracciante del descrittore di dispiegamento.

Spero di non aver abusato della tua attenzione.
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 18-04-2006, 00:46   #3
boysna
Senior Member
 
Iscritto dal: Mar 2004
Città: castel san giorgio(salerno)
Messaggi: 1218
Grazie mille della immensa pazienza. In qualche modo ora Tomcat trova la jsp però mi da errori nel visualizzarla:

An error occurred at line: 5 in the jsp file: /VisualizzaProdotto.jsp
Generated servlet error:
Prodotto cannot be resolved to a type.

La servlet è questa, la riposto con qualche modifica rispetto la precedente:
Codice:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;


public class RicercaProdotto extends HttpServlet {
	
	public void doGet (HttpServletRequest request, HttpServletResponse response)
						throws ServletException, IOException {
		
		GestioneDB cerca = new GestioneDB();
            Prodotto p = cerca.cercaProdotto(request.getParameter("marca"), request.getParameter("modello"));	
            request.setAttribute("prodotto", p);		
            gotoPage("/VisualizzaProdotto.jsp",request,response);
		
	} 

	private void gotoPage( String address, 
			   			   HttpServletRequest request, 
			   			   HttpServletResponse response)
			throws ServletException, IOException {
		RequestDispatcher dispatcher = 
			getServletContext().getRequestDispatcher(address);
		dispatcher.forward(request,response);
	} 
}
E questa è la jsp che dovrebbe visualizzare l'attributo categoria del bean passato dalla sevlet:
Codice:
<HTML><HEAD><TITLE>Visualizza PRODOTTO</TITLE></HEAD>

<BODY BGCOLOR="white">

<% 
	Prodotto p = (coreservlets.Prodotto)request.getAttribute("prodotto");
	out.println("Categoria: " + p.getCategoria()+"<br>");
%>


</BODY>
</HTML>
boysna è offline   Rispondi citando il messaggio o parte di esso
Old 18-04-2006, 10:56   #4
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Una svista. Come hai fatto nella conversione esplicita, usa il nome pienamente qualificato del tipo Prodotto anche nella dichiarazione della variabile p:

Codice:
coreservlets.Prodotto p =
    (coreservlets.Prodotto)request.getAttribute("prodotto");
Alternativamente importa il package "coreservlets" con una direttiva jsp.
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile iPhone 17 Pro: più di uno smartphone. &Eg...
Intel Panther Lake: i processori per i notebook del 2026 Intel Panther Lake: i processori per i notebook ...
Intel Xeon 6+: è tempo di Clearwater Forest Intel Xeon 6+: è tempo di Clearwater Fore...
4K a 160Hz o Full HD a 320Hz? Titan Army P2712V, a un prezzo molto basso 4K a 160Hz o Full HD a 320Hz? Titan Army P2712V,...
Recensione Google Pixel Watch 4: basta sollevarlo e si ha Gemini sempre al polso Recensione Google Pixel Watch 4: basta sollevarl...
Le sonde spaziali ESA ExoMars e Mars Exp...
Roscosmos: static fire per i propulsori ...
Alcune partite NBA saranno trasmesse in ...
Intel Core 13000 e 14000 aumentano uffic...
Gemini sta per arrivare in Google Maps: ...
2 minuti per vedere le 27 offerte imperd...
Ray-Ban Meta Display: tecnologia sorpren...
Un mini PC a prezzo stracciato, non cerc...
Al via i coupon nascosti di ottobre: qua...
Ferrari Elettrica si aggiorna solo in of...
Doppio sconto sugli smartphone top Xiaom...
Samsung è sempre più prota...
ChatGPT ha pregiudizi politici? Ecco cos...
Un solo iPhone rubato ha portato alla sc...
Xiaomi 17 Ultra sta arrivando: ecco come...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 22:52.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v