0

次のサーブレットを作成しました。入力を大文字に変換します。

 public class TestServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        InputStream in=req.getInputStream();
        OutputStream out=resp.getOutputStream();
        byte array[]=new byte[1024];
        int nReads;
        while((nReads=in.read(array))!=-1)
            {
            for(int i=0;i<nReads;++i)
                {
                array[i]=(byte)Character.toUpperCase(array[i]);
                }
            out.write(array, 0, nReads);
            }
        out.flush();
        out.close();
        }
    }

それはうまくいきます:

echo "aaaaaaaaaaaaaaaaaaaaaaaaaaa" |\
curl -d @- "http://localhost:8080/app/test"
AAAAAAAAAAAAAAAAAAAAAAAAAAAl

そのようなサーブレットをデプロイしても安全ですか? この種のサーブレットの落とし穴は何ですか? たとえば、ユーザーがサーブレットのインスタンスを永久にブロックするのを防ぐにはどうすればよいですか。

 cat  | curl -d @- "http://localhost:8080/app/test/x"
4

1 に答える 1

0

いいえ、ストリームをサーブレットにパイプすることはできません。HTTPは実際には入力ストリームを提供しません。

catデータの出力が完了すると戻るため、コマンドは機能します。curl次に、そのすべてのデータを取得して送信します。ただし、curlデータの取得が完了するまでは何も送信しません。

もちろん、これには、サーブレットではなくcurlでブロックが行われるため、サーブレットのインスタンスがブロックされないという利点があります。

于 2013-01-23T14:17:54.827 に答える