alvinalexander.com | career | drupal | java | mac | mysql | perl | scala | uml | unix  

Java example source code file (file2.1)

This example Java source code file (file2.1) is included in the alvinalexander.com "Java Source Code Warehouse" project. The intent of this project is to help you "Learn Java by Example" TM.

Learn more about this Java project at its project page.

Java - Java tags/keywords

bufferedreader, file, fileinputstream, fileoutputstream, ioexception, map, myresponse, myresponsecachehandler, net, network, nio, objectoutputstream, printstream, responsecachehandlertest, serversocket, string, url, util, www

The file2.1 Java example source code

/* @test @(#)file2.1	1.1 03/08/09
 * @summary Unit test for java.net.ResponseCacheHandler
 * @bug 4837267
 * @author Yingxian Wang
 */

import java.net.*;
import java.util.*;
import java.io.*;
import java.nio.*;
import java.nio.channels.ReadableByteChannel;
import sun.net.www.ParseUtil;

/**
 * Request should get serviced by the cache handler. Response get
 * saved through the cache handler.
 */
public class ResponseCacheHandlerTest implements Runnable {
    ServerSocket ss;
    static URL url1;
    static URL url2;
    static boolean flag = false;
    /* 
     * Our "http" server to return a 404 */
    public void run() {
	try {
	    Socket s = ss.accept();

	    // check request contains "Cookie"
	    InputStream is = s.getInputStream ();
	    BufferedReader r = new BufferedReader(new InputStreamReader(is));
	    boolean flag = false;
	    String x;
	    while ((x=r.readLine()) != null) {
		if (x.length() ==0) {
		    break;
		}
	    }
	    PrintStream out = new PrintStream( 
				 new BufferedOutputStream(
				    s.getOutputStream() ));
	    
	    /* send file2.1 */
	    File file2 = new File("file2.1");
	    out.print("HTTP/1.1 200 OK\r\n");
	    out.print("Content-Type: text/html; charset=iso-8859-1\r\n");
	    out.print("Content-Length: "+file2.length()+"\r\n");
	    out.print("Connection: close\r\n");
	    out.print("\r\n");
	    FileInputStream fis = new FileInputStream(file2);
	    byte[] buf = new byte[(int)file2.length()];
	    int len;
	    while ((len = fis.read(buf)) != -1) {
		out.print(new String(buf));
	    }

	    out.flush();

	    s.close();
	    ss.close();
	} catch (Exception e) { 
	    e.printStackTrace();
	}
    }

    ResponseCacheHandlerTest() throws Exception {
	/* start the server */
	ss = new ServerSocket(0);
	(new Thread(this)).start();

	/* establish http connection to server */
	url1 = new URL("http://localhost/file1.cache");
	HttpURLConnection http = (HttpURLConnection)url1.openConnection();
	InputStream is = null;
	System.out.println("headers1:"+http.getHeaderFields());
	try {
	    is = http.getInputStream();
	} catch (IOException ioex) {
	    throw new RuntimeException(ioex.getMessage());
	}
	BufferedReader r = new BufferedReader(new InputStreamReader(is));
	String x;
	File fileout = new File("file1");
	PrintStream out = new PrintStream( 
				 new BufferedOutputStream(
				    new FileOutputStream(fileout)));
	while ((x=r.readLine()) != null) {
	    out.print(x+"\n");
	}
	out.flush();
	out.close();

	// if !(file1.out == file1.cache)
	// throw new RuntimeException("testing ResponseCacheHandler.get() failed");
	http.disconnect();

	// testing ResponseCacheHandler.put()
	url2 = new URL("http://localhost:" + 
		       Integer.toString(ss.getLocalPort())+"/file2.1");
	http = (HttpURLConnection)url2.openConnection();
	System.out.println("headers2:"+http.getHeaderFields());

	try {
	    is = http.getInputStream();
	} catch (IOException ioex) {
	    throw new RuntimeException(ioex.getMessage());
	}
	DataInputStream dis = new DataInputStream(is);
	fileout = new File("file2.2");
	byte[] buf = new byte[(int)new File("file2.1").length()];
	DataOutputStream dos =  new DataOutputStream(new FileOutputStream(fileout));
	int len;
	while ((len=dis.read(buf)) != -1) {
	    dos.write(buf, 0, len);
	}
	dos.flush();
	dos.close();

	// if !(file2.1 == file2.2 == file2.cache)
	// throw new RuntimeException("testing ResponseCacheHandler.put() failed");
    }
    public static void main(String args[]) throws Exception {
	ResponseCacheHandler.setDefault(new MyResponseCacheHandler());

	new ResponseCacheHandlerTest();
    }

    static class MyResponseCacheHandler extends ResponseCacheHandler {
	public Response 
	get(URI uri, Map requestHeaders)
	    throws IOException {
	    if (uri.equals(ParseUtil.toURI(url1))) {
		return new MyResponse("file1.cache");
	    } if (uri.equals(ParseUtil.toURI(url2)) && !flag) {
		flag = true;
		return null;
	    } else {
		return new MyResponse("file2.cache");
	    }
	}
	public boolean put(URI uri, Response response)  throws IOException {
	    // save cache to file2.cache
	    // 1. serialize headers into file2.cache
	    // 2. write data to file2.cache
	    File file = new File("file2.cache");
	    FileOutputStream fos = new FileOutputStream(file);
	    ObjectOutputStream oos = new ObjectOutputStream(fos);
	    oos.writeObject(response.getHeaders());

	    ReadableByteChannel rbc = response.getBody();
	    int len = (int)new File("file2.1").length();
	    ByteBuffer buf = ByteBuffer.allocate(len);
	    byte[] b = new byte[len];
	    while ((len = rbc.read(buf)) != -1) {
		buf.flip();
		buf.get(b, 0, len);
		buf.compact();
		oos.write(b, 0, len);
	    }
	    oos.close();
	    return true;
	}
    }

    static class MyResponse extends Response {
	FileInputStream fis;
	Map headers;
	public MyResponse(String filename) {
	    try {
		fis = new FileInputStream(new File(filename));
		headers = (Map)new ObjectInputStream(fis).readObject();
	    } catch (Exception ex) {
		throw new RuntimeException(ex.getMessage());
	    }
	}
	public ReadableByteChannel getBody() throws IOException {
	    return fis.getChannel();
	}

	public Map getHeaders() throws IOException {
	    return headers;
	}
    }
}

Other Java examples (source code examples)

Here is a short list of links related to this Java file2.1 source code file:

... this post is sponsored by my books ...

#1 New Release!

FP Best Seller

 

new blog posts

 

Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.

A percentage of advertising revenue from
pages under the /java/jwarehouse URI on this website is
paid back to open source projects.