Question

J'essaie de traiter un grand fichier texte via un HttpServlet (Tomcat).

Comme ce fichier peut être grand et que le processus devrait être très rapide, je ne veux pas télécharger le fichier sur le serveur et j'ai utilisé la méthode HttpRequest.getInputStream Pour traiter l'entrée à la volée. Par exemple, je souhaite transformer l'entrée en majuscules avec le code ci-dessous:

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@SuppressWarnings("serial")
public class EchoServlet extends HttpServlet
    {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException
        {
        OutputStream out=null;
        InputStream in=req.getInputStream();
        if(in==null) throw new IOException("input is null");
        try
            {
            resp.setContentType("text/plain");
            out=resp.getOutputStream();
            int c;
            while((c=in.read())!=-1)
                {
                out.write((char)Character.toUpperCase(c));
                }
            }
        catch(IOException err)
            {
            //ignore
            }
        finally
            {
            if(out!=null) out.flush();
            if(out!=null) out.close();
            in.close();
            }
        }
    }

J'ai invoqué mon servlet avec Curl:

curl -s -d @big.file.txt  "http://localhost:8080/test/toupper"

1) Traiter l'entrée à la volée à travers un servlet, est-ce une pratique bonne / courante?

2) Mon code semble supprimer le retour du chariot (' n'). Pourquoi ?

Merci

Était-ce utile?

La solution

1) Traiter l'entrée à la volée à travers un servlet, est-ce une pratique bonne / courante?

Dépend de l'exigence fonctionnelle. J'aurais personnellement utilisé un servlet qui accepte http multipart/form-data Demandes au lieu des corps de demande bruts. De cette façon, il est réutilisable sur les formes HTML normales.

2) Mon code semble supprimer le retour du chariot (' n'). Pourquoi ?

L'exemple de code donné ne fait pas cela. Peut-être que vous l'avez simplifié et vous utilisiez à l'origine BufferedReader#readLine() Tout en n'utilisant pas PrintWriter#println(). La readLine() En effet, mange des CRLF.

Il y a plus de problèmes / inefficacités dans l'extrait de code donné, mais je ne peux pas donner une réponse décente à ce sujet car vous semblez ne pas réellement exécutez le code comme vous l'avez publié dans la question.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top