Hello,

Here is a Servlet that produces text from the Jungle Book,
with increasing text length.

It seems that the problem only manifests itself if the
number of elements is large. I should have said in my first
posting that the output was a few pages, not a few lines.

Best regards,

        -- David Tonhofer

--On Monday, September 02, 2002 8:27 PM +0200 "David Tonhofer, m-plify 
S.A." <[EMAIL PROTECTED]> wrote:

> Ok, thanks. I will try to reproduce ASAP...will try to find
> an hour tomorrow. But I'm currently positively *wrestling*
> with some other code issues 8-( ... (aren't we all?)
>
> --On Monday, September 02, 2002 11:30 AM -0500 Stephan Nagy
> <[EMAIL PROTECTED]> wrote:
>
>> I cannot reproduce this problem, here is my test case.

[snip]
import javax.servlet.http.*;
import javax.servlet.*;
import java.io.*;
import java.util.*;

import org.apache.ecs.html.TT;
import org.apache.ecs.html.Input;
import org.apache.ecs.html.H3;
import org.apache.ecs.Document;
import org.apache.ecs.Entities;
import org.apache.ecs.html.BR;
import org.apache.ecs.Doctype;
import org.apache.ecs.html.Form;

public class ECSTestCase extends javax.servlet.http.HttpServlet {

    public void doGet(javax.servlet.http.HttpServletRequest request, 
javax.servlet.http.HttpServletResponse response) throws 
javax.servlet.ServletException, java.io.IOException {
        performTask(request, response);
    }


    public void doPost(javax.servlet.http.HttpServletRequest request, 
javax.servlet.http.HttpServletResponse response) throws 
javax.servlet.ServletException, java.io.IOException {
        performTask(request, response);
    }

    private void performTask(javax.servlet.http.HttpServletRequest request, 
javax.servlet.http.HttpServletResponse response) throws 
javax.servlet.ServletException, java.io.IOException {
        final String DATA =
            "It was seven o'clock of a very warm evening in the Seeonee hills\n"
                + "when Father Wolf woke up from his day's rest, scratched himself,\n"
                + "yawned, and spread out his paws one after the other to get rid of\n"
                + "the sleepy feeling in their tips.  Mother Wolf lay with her big\n"
                + "gray nose dropped across her four tumbling, squealing cubs, and\n"
                + "the moon shone into the mouth of the cave where they all lived.\n"
                + "\"Augrh!\" said Father Wolf.  \"It is time to hunt again.\"  He 
was\n"
                + "going to spring down hill when a little shadow with a bushy tail\n"
                + "crossed the threshold and whined: \"Good luck go with you, O 
Chief\n"
                + "of the Wolves.  And good luck and strong white teeth go with 
noble\n"
                + "children that they may never forget the hungry in this world.\"\n"
                + "\n"
                + "It was the jackal--Tabaqui, the Dish-licker--and the\n"
                + "wolves of India despise Tabaqui because he runs about making\n"
                + "mischief, and telling tales, and eating rags and pieces of 
leather\n"
                + "from the village rubbish-heaps.  But they are afraid of him too,\n"
                + "because Tabaqui, more than anyone else in the jungle, is apt to 
go\n"
                + "mad, and then he forgets that he was ever afraid of anyone, and\n"
                + "runs through the forest biting everything in his way.  Even the\n"
                + "tiger runs and hides when little Tabaqui goes mad, for madness is\n"
                + "the most disgraceful thing that can overtake a wild creature.  We\n"
                + "call it hydrophobia, but they call it dewanee--the madness--\n"
                + "and run.\n"
                + "\n"
                + "\"Enter, then, and look,\" said Father Wolf stiffly, \"but there\n"
                + "is no food here.\"\n"
                + "\n"
                + "\"For a wolf, no,\" said Tabaqui, \"but for so mean a person as\n"
                + "myself a dry bone is a good feast.  Who are we, the Gidur-log 
[the\n"
                + "jackal people], to pick and choose?\"  He scuttled to the back of\n"
                + "the cave, where he found the bone of a buck with some meat on it,\n"
                + "and sat cracking the end merrily.\n"
                + "\n"
                + "\"All thanks for this good meal,\" he said, licking his lips.\n"
                + "\"How beautiful are the noble children!  How large are their 
eyes!\n"
                + "And so young too!  Indeed, indeed, I might have remembered that\n"
                + "the children of kings are men from the beginning.\"\n"
                + "\n"
                + "Now, Tabaqui knew as well as anyone else that there is nothing\n"
                + "so unlucky as to compliment children to their faces.  It pleased\n"
                + "him to see Mother and Father Wolf look uncomfortable.\n"
                + "\n"
                + "Tabaqui sat still, rejoicing in the mischief that he had made,\n"
                + "and then he said spitefully:\n"
                + "\n"
                + "\"Shere Khan, the Big One, has shifted his hunting grounds.  He\n"
                + "will hunt among these hills for the next moon, so he has told 
me.\"\n"
                + "\n"
                + "Shere Khan was the tiger who lived near the Waingunga River,\n"
                + "twenty miles away.\n"
                + "\n"
                + "\"He has no right!\" Father Wolf began angrily--\"By the Law\n"
                + "of the Jungle he has no right to change his quarters without due\n"
                + "warning.  He will frighten every head of game within ten miles,\n"
                + "and I--I have to kill for two, these days.\"\n"
                + "\n"
                + "\"His mother did not call him Lungri [the Lame One] for\n"
                + "nothing,\" said Mother Wolf quietly.  \"He has been lame in one 
foot\n"
                + "from his birth.  That is why he has only killed cattle.  Now the\n"
                + "villagers of the Waingunga are angry with him, and he has come\n"
                + "here to make our villagers angry.  They will scour the jungle for\n"
                + "him when he is far away, and we and our children must run when 
the\n"
                + "grass is set alight.  Indeed, we are very grateful to Shere 
Khan!\"\n"
                + "\n"
                + "\"Shall I tell him of your gratitude?\" said Tabaqui.\n"
                + "\n"
                + "\"Out!\" snapped Father Wolf.  \"Out and hunt with thy master.\n"
                + "Thou hast done harm enough for one night.\"\n"
                + "\n"
                + "\"I go,\" said Tabaqui quietly.  \"Ye can hear Shere Khan below\n"
                + "in the thickets.  I might have saved myself the message.\"\n"
                + "\n"
                + "Father Wolf listened, and below in the valley that ran down to\n"
                + "a little river he heard the dry, angry, snarly, singsong whine of\n"
                + "a tiger who has caught nothing and does not care if all the 
jungle\n"
                + "knows it.\n"
                + "\n"
                + "\"The fool!\" said Father Wolf.  \"To begin a night's work with\n"
                + "that noise!  Does he think that our buck are like his fat\n"
                + "Waingunga bullocks?\"\n"
                + "\n"
                + "\"H'sh.  It is neither bullock nor buck he hunts to-night,\"\n"
                + "said Mother Wolf.  \"It is Man.\"\n"
                + "\n"
                + "The whine had changed to a sort of humming purr that seemed to\n"
                + "come from every quarter of the compass.  It was the noise that\n"
                + "bewilders woodcutters and gypsies sleeping in the open, and makes\n"
                + "them run sometimes into the very mouth of the tiger.\n"
                + "\n"
                + "\"Man!\" said Father Wolf, showing all his white teeth.  \"Faugh!\n"
                + "Are there not enough beetles and frogs in the tanks that he must\n"
                + "eat Man, and on our ground too!\"\n"
                + "\n"
                + "The Law of the Jungle, which never orders anything without a\n"
                + "reason, forbids every beast to eat Man except when he is killing\n"
                + "to show his children how to kill, and then he must hunt outside\n"
                + "the hunting grounds of his pack or tribe.  The real reason for\n"
                + "this is that man-killing means, sooner or later, the arrival of\n"
                + "white men on elephants, with guns, and hundreds of brown men with\n"
                + "gongs and rockets and torches.  Then everybody in the jungle\n"
                + "suffers.  The reason the beasts give among themselves is that Man\n"
                + "is the weakest and most defenseless of all living things, and it\n"
                + "is unsportsmanlike to touch him.  They say too--and it is true\n"
                + "--that man-eaters become mangy, and lose their teeth.\n"
                + "\n"
                + "The purr grew louder, and ended in the full-throated \"Aaarh!\"\n"
                + "of the tiger's charge.\n"
                + "\n"
                + "Then there was a howl--an untigerish howl--from Shere\n"
                + "Khan.  \"He has missed,\" said Mother Wolf.  \"What is it?\"\n"
                + "\n"
                + "Father Wolf ran out a few paces and heard Shere Khan muttering\n"
                + "and mumbling savagely as he tumbled about in the scrub.\n"
                + "\n"
                + "\"The fool has had no more sense than to jump at a woodcutter's\n"
                + "campfire, and has burned his feet,\" said Father Wolf with a 
grunt.\n"
                + "\"Tabaqui is with him.\"\n"
                + "\n"
                + "\"Something is coming uphill,\" said Mother Wolf, twitching one\n"
                + "ear.  \"Get ready.\"\n";
        //
        // the servlet request contains 'limit', the max. number of characters to 
output as TT
        // this value is now extracted (if it exists) and the next limit up the scale 
is computed
        //
        int limit = 0;
        {
            String limitStr = request.getParameter("limit");
            if (limitStr != null) {
                try {
                    limit = Integer.parseInt(limitStr);
                } catch (NumberFormatException exe) {
                }
            }
            if (request.getParameter("restart") != null) {
                limit = 0;
            }
        }
        int MORE_CHARACTERS = 500;
        int nextLimit = limit + MORE_CHARACTERS;
        //
        // set up the document, the 'tt' element is set up later
        //
        Document doc;
        TT tt;
        {
            doc = new Document();
            doc.setDoctype(new Doctype.Html40Transitional());
            doc.appendBody(new H3("Limit is now " + limit));
            tt = new TT();
            doc.appendBody(tt);
            Form form = new Form();
            doc.appendBody(form);
            form.setAction(request.getServletPath());
            form.setMethod(form.POST);
            form.setName("junglebook");
            form.addElement(new Input(Input.HIDDEN, "limit", nextLimit));
            form.addElement(new Input(Input.SUBMIT, "encore", "Encore une fois!"));
            form.addElement(new Input(Input.SUBMIT, "restart", "Restart"));
            doc.appendBody(tt);
        }
        //
        // HERE COMES THE BEEF.
        // The 'TT' element is created; note that one of two loops can be chosen;
        // The original (David's) and Stephan's. Stephan's has been modified to
        // actually read from 'buffer' not (erroneously) from 'DATA'.
        // Here we go:
        //
        java.io.StringReader reader = new java.io.StringReader(DATA.substring(0, 
limit));
        final int BUFFERSIZE = 256;
        final boolean USE_DAVIDS_LOOP = !true;
        char[] buffer = new char[BUFFERSIZE];
        try {
            if (USE_DAVIDS_LOOP) {
                int actuallyRead;
                do {
                    actuallyRead = reader.read(buffer);
                    int startOff = 0;
                    for (int i = 0; i < actuallyRead; i++) {
                        if (buffer[i] == '\n' || buffer[i] == '\r') {
                            tt.addElement(new BR());
                        } else if (buffer[i] == ' ') {
                            tt.addElement(Entities.NBSP);
                        } else {
                            tt.addElement(new String(buffer, i, 1));
                        }
                    }
                } while (actuallyRead == buffer.length);
            } else {
                while (true) {
                    int read = reader.read(buffer);
                    if (read == -1) {
                        break;
                    }
                    for (int x = 0; x < read; x++) {
                        if (buffer[x] == '\n') {
                            tt.addElement(new BR());
                        } else if (buffer[x] == ' ') {
                            tt.addElement(Entities.NBSP);
                        } else {
                            tt.addElement(new String(buffer, x, 1));
                        }
                    }

                }
            }
            doc.output(response.getWriter());
        } catch (java.io.IOException ioe) {
            ioe.printStackTrace();
        }
    }

}
--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to