Questa è una servlet funzionante, un esempio tratto da onlava.com, non riesco a capire perché, dopo aver mappato la servlet su Tomcat, quando la richiamo da browser Firefox è in continuo "Trasferimento dati da xxx.it", potrebbe continuare all'infinito, senza nessun timeout del browser.
Ho scaricato le 3 librerie POI, ultime release, copiate sotto la /lib della web application, non va.
Se invece cancello tutto il codice e lascio solo l'impostazione del ContentType, ricompilo e richiamo la servlet da browser la servlet risponde immediatamente, anche se poi ovviamente l'output gestito da excel non è interpertato con successo, ma ci sta visto che non scrivo assolutamente niente.
Bah... suggerimenti? sembra così banale per non funzionare.. inoltre è stranissimo che sia in continuo trasferimento, almeno ci fosse un errore, ma niente...


codice:
import java.io.*;
import java.net.*;
import javax.servlet.*;
import javax.servlet.http.*;
import org.apache.poi.hssf.usermodel.*;

public class HSSFCreate extends HttpServlet {
    public void init(ServletConfig config) throws ServletException {
        super.init(config);  
    }

    public void destroy() {
    }

    /** Processes requests for both HTTP GET and POST methods.
     * @param request servlet request
     * @param response servlet response
     */

    protected void processRequest(HttpServletRequest request,
        HttpServletResponse response) throws ServletException, IOException {

        response.setContentType("application/vnd.ms-excel");
        HSSFWorkbook wb = new HSSFWorkbook();
        HSSFSheet sheet = wb.createSheet("new sheet");

        // Create a row and put some cells in it. Rows are 0 based.
        HSSFRow row     = sheet.createRow((short)0);

        // Create a cell and put a value in it.
        HSSFCell cell   = row.createCell((short)0);

        cell.setCellValue(1);

        // Or do it on one line.
        row.createCell((short)1).setCellValue(1.2);
        row.createCell((short)2).setCellValue("This is a string");
        row.createCell((short)3).setCellValue(true);
        // Write the output 
        OutputStream out = response.getOutputStream();
        wb.write(out);
        out.close();
    }

    /** Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     */

    protected void doGet(HttpServletRequest request,
        HttpServletResponse response) throws ServletException, IOException {
        processRequest(request, response);
    }

    /** Handles the HTTP POST method.
     * @param request servlet request
     * @param response servlet response
     */

    protected void doPost(HttpServletRequest request,
        HttpServletResponse response) throws ServletException, IOException {
        processRequest(request, response);
    }