View Full Version : Jsp,servlet,jdom,bean: primi passi
Ciao a tutti. Apro questa discussione per rivolgere domande ai piu esperti su queste tecnologie, visto che sono alle prime armi.
Il mio primo problema è questo. Ho una pagina HTML e una JSP. Ecco i codici.
<html>
<head>
<title>Scelta Compagnia</title>
</head>
<body>
<form action="benvenuto.jsp" METHOD="get">
Scegli la compagnia:<br>
<input type="radio" name="compagnia" value="Alitalia"> Alitalia <br>
<input type="radio" name="compagnia" value="KLM"> KLM <br>
<input type="radio" name="compagnia" value="British Airways"> British Airways <br>
<input type="hidden" name="pagina" value="scelta_compagnia">
<button type="submit">Vai alla Compagnia scelta</button>
</form>
</body>
</html>
<html>
<head>
<title>Benvenuto</title>
</head>
<body>
<%String compagnia = request.getParameter("compagnia");
if(request.getParameter("pagina")=="scelta_compagnia")
{out.println("Benvenuto alla pagina della compagnia di volo: " + compagnia);}
else
{out.println("Bentornato alla pagina della compagnia di volo: " + compagnia);} %>
</body>
</html>
Qualcuno mi spiega perchè la JSP stampa sempre quello che sta nell'else nonostante la condizione verificata sia quella nell'if?
Grazie.
if(request.getParameter("pagina").equals("scelta_compagnia"))
...
Ho risolto, grazie mille!!!
Ora ho un altro problema. Ho un file xml e sto scrivendo una classe java per accederci.
Questo è l'xml:
<database>
<volo>
<compagnia>Alitalia</compagnia>
<partenza>Nap</partenza>
<destinazione>rom</destinazione>
<tipo>scalo</tipo>
<oraPartenza>11</oraPartenza>
<minutiPartenza>40</minutiPartenza>
<postiBusiness>300</postiBusiness>
<postiEconomy>14</postiEconomy>
<prezzoBusiness>200</prezzoBusiness>
<prezzoEconomy>100</prezzoEconomy>
</volo>
</database>
Questa la classe per accederci. Ho fatto solo un piccolo metodo cercaVolo che, per ora, mi restituisce il nome del root.
import org.w3c.dom.Document;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import java.io.File;
import java.io.FileNotFoundException;
import javax.xml.parsers.ParserConfigurationException;
import org.xml.sax.SAXException;
import java.io.IOException;
import org.xml.sax.SAXParseException;
public class GestioneDB{
private Document document;
String file = "E:\\Programmi\\Apache Software Foundation\\Tomcat 5.5\\webapps\\appello2\\voli.xml";
//Costruttore
public GestioneDB(){
try{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setValidating(true);
DocumentBuilder builder = factory.newDocumentBuilder();
//Creao un Node che si riferisce al file "voli.xml"
document = builder.parse(new File(file));
}
catch(ParserConfigurationException e){}
catch(SAXException r){r.printStackTrace();}
catch(FileNotFoundException me){}
catch(IOException t){}}
//Metodi
public void cercaVolo(){
Document doc = (Document) document;
System.out.println(doc.getNodeName());
}
}
Ho fatto un test creando un'istanza di GestioneDB e lanciando il metodo cercaVolo ma mi da alcuni errori come: Document is invalid. No grammar found e "Document root element "database", must match DOCTYPE root "null"".
La prima cosa che mi salta all'occhio è che il path del file ha un sacco di spazi...dalla quello che ho potuto vedere java e gli spazi nei path non vanno granchè d'accordo..prova a spostare tuo xml in un path senza spazi.
Bahamut Zero
12-04-2006, 18:10
Boysna questo mi pare proprio uguale all'esame di TSW del professor Costagliola o mi sbaglio :D
Io per l'xml uso la libreria JDom
Boysna questo mi pare proprio uguale all'esame di TSW del professor Costagliola o mi sbaglio :D
Bravo. Sto cercando di fare le tracce che ha dato in precedenza agli appelli per esercitarmi alla prova del 19 Aprile 2006. Vuoi altre informazioni? :oink:
La prima cosa che mi salta all'occhio è che il path del file ha un sacco di spazi...dalla quello che ho potuto vedere java e gli spazi nei path non vanno granchè d'accordo..prova a spostare tuo xml in un path senza spazi.
Niente da fare... Ho messo voli.xml in un path senza spazi e poi ho usato l'istruzione "System.getProperty("user.dir")" ma non va. L'errore è sempre lo stesso.
Secondo me l'errore è nel file xml, ma non vedo quale sia. Il file è di una struttura molto semplice.
Io per l'xml uso la libreria JDom
Sarebbe?
Ne provo un'altra...nell'xml c'è l'intestazione o parte diretto col tag database ??
una cosa tipo
<?xml version="1.0" encoding="UTF-8"?>
Ho messo questo tag ma niente da fare. Comunque puoi cntrollare il codice dela classe GestioneDB se è OK? Ho qualche dubbio in merito.
Su un esempio che ho viene importato il pacchetto "com.sun.xml.tree.XmlDocument". Ho provato a importarlo ma mi dice che non esiste.
Sarà che c'è bisogno di questo pacchetto?
Allora ho provato...sono riuscito a farmi tornare il nome del tag root ossia database.
ho modificato queste righe
factory.setValidating(false);
System.out.println(document.getDocumentElement().getTagName());
Pare che il documento xml non era valido. Mancava il DOCTYPE. Ma nonostante sia riuscito a validarlo l'errore rimane sempre.
Ho risolto.
In GestioneDB dovevo mettere builder.setErrorHandler(new MyErrorHandler) dopo l'istruzione: document = builder.parse(new File(file)). E poi creare la classe MyErrorHandler.
Poi ho modificato l'xml mettendo un attributo al "volo", cosi:
<database>
<volo id="sdhfhc">
<compagnia>Alitalia</compagnia>
<partenza>Nap</partenza>
<destinazione>rom</destinazione>
<tipo>scalo</tipo>
<oraPartenza>11</oraPartenza>
<minutiPartenza>40</minutiPartenza>
<postiBusiness>300</postiBusiness>
<postiEconomy>14</postiEconomy>
<prezzoBusiness>200</prezzoBusiness>
<prezzoEconomy>100</prezzoEconomy>
</volo>
</database>
Ora dovrei fare un metodo che va a cercare un elemento attributo che ha come elemento figlio una compagnia data in input come stringa. E ritornare l'id del volo.
Io ho fatto questo:
public void cercaVolo(String compagnia){
Element root = document.getDocumentElement();
//Ciclo sui figli di database
for (int i=0; i<root.getChildNodes().length(); i++ ) {
//Ciclo sui figli di volo
for(int j = 0; j< root.getChildNodes().item(i).getChildNodes().length(); j++){
if(root.getChildNodes().item(i).getChildNodes().item(j).getNodeName()=="compagnia"){
if(root.getChildNodes().item(i).getChildNodes().item(j).getChildNodes(1).getNodeName().isequal(compagnia)){
System.out.println(root.getChildNodes().item(i).getAttribute());
}
}
}
}
}
Purtroppo, come previsto, mi da alcuni errori.
Sopratutto perchè dice che uso metodi che non esistono. Mah...
Ho risolto il problema dei metodi non trovati. Era il length che si chiama getLength(). Comunque ora lo compila ma mi restituisce un errore di null pointer.
Ecco il codice aggiornato:
public class GestioneDB{
private Document document;
String file = System.getProperty("user.dir") + "\\" + "voli.xml";
//Costruttore
public GestioneDB(){
try{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setValidating(true);
DocumentBuilder builder = factory.newDocumentBuilder();
//Creao un Node che si riferisce al file "voli.xml"
builder.setErrorHandler(new MyErrorHandler());
document = builder.parse(new File(file));
}
catch(ParserConfigurationException e){}
catch(SAXException r){r.printStackTrace();}
catch(FileNotFoundException me){}
catch(IOException t){}}
//Metodi
public void cercaVolo(String compagnia){
Element root = document.getDocumentElement();
//Ciclo sui figli di database
for (int i=0; i<root.getChildNodes().getLength(); i++ ) {
//Ciclo sui figli di volo
for(int j=0; j< root.getChildNodes().item(i).getChildNodes().getLength(); j++){
if(root.getChildNodes().item(i).getChildNodes().item(j).getNodeName()=="compagnia"){
if(root.getChildNodes().item(i).getChildNodes().item(j).getChildNodes().item(1).getNodeName()==compagnia){
System.out.println(root.getChildNodes().item(i).getAttributes());
}
}
}
}
}
Qualcuno mi dice com'è la struttura ad albero di questo file xml?
<database>
<prodotto id="tre">
<categoria>notebook</categoria>
<marca>Asus</marca>
<modello>3200+</modello>
<quantita>5</quantita>
<prezzo>11</prezzo>
<giornoImmissione>4</giornoImmissione>
<meseImmissione>3</meseImmissione>
<annoImmissione>2006</annoImmissione>
<rata>si</rata>
<numeroRate>24</numeroRate>
</prodotto>
</database>
Allora ho provato...sono riuscito a farmi tornare il nome del tag root ossia database.
ho modificato queste righe
factory.setValidating(false);
System.out.println(document.getDocumentElement().getTagName());
Chiedo venia. Non ho visto la tua risposta. Comunque grazie mille.
Il problema ora è un altro però. Guarda piu giu. grazie e scusa ancora.
La struttura ad albero dovrebbe essere
database ha come figlio prodotto che ha come figli tutti gli altri.
Ma sei obbligato a usare dom? perchè se usi dom4j è molto + semplice la cosa.
Bahamut Zero
14-04-2006, 11:53
Ma sei obbligato a usare dom? perchè se usi dom4j è molto + semplice la cosa.
Il nostro prof. vuole che usiamo JDOM ;)
Comunque sto capendo jDom.
L'unico problema è che devo usare la classe XmlDocument per scrivere in un file. Ho fatto l'import com.sun.xml.tree.XmlDocument ma non me la trova, come faccio?
Risolto il problema mi si è ripresentato un altro problema.
Ho creato una servlet:
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:
<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?
Bahamut Zero
19-04-2006, 22:21
Com'è andata la prova?Stamattina ero a Fisciano ma ho visto pochi all'appello....postaci le tracce :asd:
Il tempo era poco.
E ha messo una traccia un po intricata da capire all'inizio.
Comunque la prova era alle 15:00. Se stavi di mattina come hai fatto a vedere il numero di presenti all'appello?
Bahamut Zero
20-04-2006, 16:03
nel senso che sono venuto di mattina.....mi son fumato una sigaretta fuori facendo il giro delle aule x curiosare dalle finestre :asd:
Si ma l'appello era alle 15:00, non di mattina.
Bahamut Zero
20-04-2006, 23:04
boysna e mammamia e comm stai :asd:
mattina...pomeriggio...e c'ammà fà nu dibbattito mò? :D
Se la mattina fosse pomeriggio... non so cosa accadrebbe.
Comunque era curiosità...
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.