2

ユーザーがサーブレットのデータをCSVファイルとして保存できるようにしようとしています。もともと私はファイルをドロップするために彼らのデスクトップを見つけていましたが、このルートでは許可が拒否されるので、ユーザーにファイルを保存したい場所を尋ねたいと思います。

私が見ているところによると、TomcatはGUIの描画方法を知らないため、サーブレットでSwingAPIを使用することはできません。私はこのコードを試しました:

    String fileName = "ClassMonitor" + formatter.format(currentDate) + ".csv";

    File csvFile = new File(fileName);

    //Attempt to write as a CSV file 
    try{

        JFileChooser fileChooser = new JFileChooser();
        fileChooser.setSelectedFile(csvFile);
        int returnValue = fileChooser.showSaveDialog(null);

        if(returnValue == JFileChooser.APPROVE_OPTION)
        {
            BufferedWriter out = new BufferedWriter(new FileWriter(csvFile));

            //Iterates and writes to file
            for(ClassInfo classes : csvWrite)
            {
                //Check if the class has a comma. Currently, only section titles have a comma in them, so that's all we check for.
                classes.setSectionTitle(replaceComma(classes.getSectionTitle()));

                out.write(classes.toString());
            }

            //Close the connection
            out.close();
        }

        //Log the process as successful.
        logger.info("File was successfully written as a CSV file to the desktop at " + new Date() + "\nFilename" +
                "stored as " + fileName + ".");

    }
    catch(FileNotFoundException ex)
    {
        //Note the exception
        logger.error("ERROR: I/O exception has occurred when an attempt was made to write results as a CSV file at " + new Date());
    }
    catch(IOException ex)
    {
        //Note the exception
        logger.error("ERROR: Permission was denied to desktop. FileNotFoundException thrown.");
    }
    catch(Exception ex)
    {
        //Note the exception
        logger.error("ERROR: Save file was not successfull. Ex: " + ex.getMessage());
    }



}

しかし、これはheadlessExceptionをスローします。

サーブレットにファイル保存ダイアログのようなものを実装する方法についてのガイダンスをいただければ幸いです。

4

2 に答える 2

2

ローカル (!!) ディスク ファイル システムではなく、応答本文に書き込むだけです。

response.setContentType("text/csv"); // Tell browser what content type the response body represents, so that it can associate it with e.g. MS Excel, if necessary.
response.setHeader("Content-Disposition", "attachment; filename=name.csv"); // Force "Save As" dialogue.
response.getWriter().write(csvAsString); // Write CSV file to response. This will be saved in the location specified by the user.

Content-Disposition: attachmentヘッダーは名前を付けて保存マジックを処理します

以下も参照してください。

于 2013-03-18T18:19:49.020 に答える
1

JFileChooserサーブレットはクライアントではなくサーバーで実行されるため、サーブレットから を呼び出すことはできません。Java コードはすべてサーバー上で実行されます。ファイルをサーバーに保存する場合は、書き込み先のパスを既に知っている必要があります。

ユーザーのブラウザーにファイルを保存するように促したい場合は、content-disposition ヘッダーを使用します: HTTP 応答ヘッダーでの content-disposition の使用

于 2013-03-18T18:07:55.027 に答える