a servlet that generates a page with 100 IMG tags.
Each of the IMG tags refers to another servlet ImageRetriever, that reads a GIF file from the server system and returns it to the client.
Both the original servlet and the ImageRetriever servlet use persistent connections.
But ImageRetriever.java is never invoked! What's the problem?
///PersistentConnection.java
public class PersistentConnection extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
ByteArrayOutputStream byteStream =
new ByteArrayOutputStream(7000);
PrintWriter out = new PrintWriter(byteStream, true);
String persistenceFlag =
request.getParameter("usePersistence");
boolean usePersistence =
((persistenceFlag == null) ||
(!persistenceFlag.equals("no")));
String title;
if (usePersistence) {
title = "Using Persistent Connection";
} else {
title = "Not Using Persistent Connection";
}
out.println(ServletUtilities.headWithTitle(title) +
"<BODY BGCOLOR=\"#FDF5E6\">\n" +
"<H1 ALIGN=\"CENTER\">" + title + "</H1>");
int numImages = 100;
for(int i=0; i<numImages; i++) {
out.println(makeImage(i, usePersistence));
}
out.println("</BODY></HTML>");
if (usePersistence) {
response.setContentLength(byteStream.size());
}
byteStream.writeTo(response.getOutputStream());
}
private String makeImage(int n, boolean usePersistence) {
String file =
"/servlet/coreservlets.ImageRetriever?gifLocation=" +
"/bullets/bullet" + n + ".gif";
if (!usePersistence)
file = file + "&usePersistence=no";
return("<IMG SRC=\"" + file + "\"\n" +
" WIDTH=6 HEIGHT=6 ALT=\"\">");
}
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
/////ImageRetriever.java
public class ImageRetriever extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
String gifLocation = request.getParameter("gifLocation");
if ((gifLocation == null) ||
(gifLocation.length() == 0)) {
reportError(response, "Image File Not Specified");
return;
}
String file = getServletContext().getRealPath(gifLocation);
try {
BufferedInputStream in =
new BufferedInputStream(new FileInputStream(file));
ByteArrayOutputStream byteStream =
new ByteArrayOutputStream(512);
int imageByte;
while((imageByte = in.read()) != -1) {
byteStream.write(imageByte);
}
in.close();
String persistenceFlag =
request.getParameter("usePersistence");
boolean usePersistence =
((persistenceFlag == null) ||
(!persistenceFlag.equals("no")));
response.setContentType("image/gif");
if (usePersistence) {
response.setContentLength(byteStream.size());
}
byteStream.writeTo(response.getOutputStream());
} catch(IOException ioe) {
reportError(response, "Error: " + ioe);
}
}
public void reportError(HttpServletResponse response,
String message)
throws IOException {
response.sendError(response.SC_NOT_FOUND,
message);
}
}