Buonasera a tutti,
Ho un problema con il mio progetto Dynamic Web.
L'esercitazione che mi è stata assegnata prevede la creazione di una pagina jsp iniziale ,chiamata index.jsp, contenente un tasto di tipo submit che,al click dell'utente, fa partire una servlet che carica semplicemente dal database i dati di alcuni studenti presentandoli in una tabella nella pagina elenco.jsp. E fin qui funziona tutto correttamente.
Sotto la tabella con i risultati degli studenti, vi è un tasto di tipo submit che si collega alla seguente servlet che serve per salvare i risultati in un file PDF:
package it.meucci;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import it.meucci.PDFmanager;
/**
* Servlet implementation class ServletPDF
*/
@WebServlet("/pdf")
public class ServletPDF extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public ServletPDF() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String nome= request.getParameter("nome");
System.out.println(nome);
PDFmanager pdf=new PDFmanager();
pdf.writeStudents();
pdf.saveAndClose(nome);
response.sendRedirect("Elenco.jsp");
}
}
Per fare ciò, la servlet richiama i metodi della seguente classe, chiamata PDFmanager:
package it.meucci;
import java.io.IOException;
import java.util.ArrayList;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.font.PDFont;
import org.apache.pdfbox.pdmodel.font.PDType1Font;
import it.meucci.dbManager;
public class PDFmanager {
private PDDocument document;
private PDPage page;
private dbManager db;
public PDFmanager() {
System.out.println("sonoqui");
db=new dbManager();
// Creo documento vuoto
document = new PDDocument();
// Creo una nuova pagina bianca da aggiungere al documento
page = new PDPage();
document.addPage(page);
}
public void writeStudents() {
//vengono caricati i dati del database nel vettore
ArrayList<Studente>studenti=db.studenteLoad();
System.out.println("ciao sto scrivendo");
try {
// Creo in nuovo oggetto font e imposto il carattere
PDFont font = PDType1Font.HELVETICA_BOLD;
// Instanzio un nuovo stream che contiene l'oggetto creato
PDPageContentStream contentStream
= new PDPageContentStream(document, page);
// Definisco un flusso di contenuti di testo utilizzando
// il carattere selezionato, spostando il cursore
contentStream.beginText();
contentStream.setFont(font, 12);
contentStream.moveTextPositionByAmount(100, 700);
contentStream.drawString("STUDENTI");
for(int i=0;i<studenti.size();i++) {
contentStream.drawString(studenti.get(i).getCognome());
}
contentStream.endText();
// Chiudo lo stream
contentStream.close();
}catch (Exception e) {
System.out.println("Errore: errore nella scrittura del file");
}
}
public void saveAndClose(String nomeFile) {
try {
System.out.println("ciao sto salvando");
// Salvo il documento
document.save(nomeFile+".pdf");
System.out.println("Salvato");
//Chiudo il documento
document.close();
}catch (Exception e) {
System.out.println("Errore:File non salvato");
}
}
public static void main(String[] args) {
//TEST
PDFmanager pdf=new PDFmanager();
pdf.writeStudents();
pdf.saveAndClose("ou");
}
}
Il problema è il seguente: se eseguo la classe PDFmanager, usando il main per fare il test, i metodi funzionano tutti correttamente e mi ritrovo il file PDF con tutti i risultati nella root del progetto; se invece eseguo tutti i passaggi, partendo dall'index.jsp ed arrivando alla servlet che dovrebbe salvarmi il file, esegue tutti i metodi, ma evidentemente non salva niente nella root del progetto.
Come potete notare, ho inserito alcuni system.out per vedere se la servlet accedeva ai metodi della classe, cosa che effettivamente succede.
Come potrei risolvere? Qualcuno mi potrebbe dare alcune dritte, considerando che sono una studentessa di quinto superiore e sto ancora imparando?