We can speed up the data transfer between servlet and applet in a Web
application by compressing the data transferred between them. The example
below demonstrates how this is done:
Servlet Code:
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException
{
try
{
res.setHeader("Content-Encoding","gzip");
OutputStream out = res.getOutputStream();
GZIPOutputStream gz = new GZIPOutputStream(out);
String data = "Compressed Data";
gz.write(data.getBytes());
gz.close();
out.close();
}
catch(Exception e)
{
System.out.println("In CompressServlet: Exception in doGet");
}
}
//Applet Code:
public class UnCompressApplet extends Applet {
String fromServ = "";
public void start()
{
try
{
readData();
}
catch(Exception e)
{
System.out.println("Exception in start()");
}
}
public void paint(Graphics g)
{
// Display the obtained data
g.drawString("Contents of Servlet Data: " + fromServ, 10, 10);
}
public void readData() throws Exception
{
try
{
GZIPInputStream gz = new GZIPInputStream( getData() );
byte[] buf = new byte[1024];
int len;
while ((len = gz.read(buf)) > 0)
fromServ = new String(buf);
gz.close();
}
catch (IOException e)
{
System.out.println("In UncompressApplet: Exception in readData()");
}
}
public InputStream getData() throws Exception
{
try{
//URL of the Web Server
String url = "http://localhost:8080/examples/servlet/CompressServlet";
URL postURL = new URL( url );
URLConnection urlCon = null;
urlCon = postURL.openConnection();
urlCon.setDoOutput(true);
urlCon.setDoInput(true);
return urlCon.getInputStream();
}
catch(Exception e)
{
e.printStackTrace();
return null; //something went wrong
}
}//end of getData
}//end of class
HTML Code :
Applet/Servlet Communication