This commit is contained in:
Ziver Koc 2009-05-18 12:52:16 +00:00
parent 553f8da549
commit c21b229882
5 changed files with 37 additions and 30 deletions

View file

@ -1,6 +1,6 @@
package zutil.network.http;
import java.util.HashMap;
import java.util.Map;
/**
* This is a interface for a ordinary page for the HttpServer
@ -21,8 +21,8 @@ public interface HttpPage{
* @param request is POST and GET requests from the client
*/
public abstract void respond(HttpPrintStream out,
HashMap<String,String> client_info,
HashMap<String,Object> session,
HashMap<String,String> cookie,
HashMap<String,String> request);
Map<String,String> client_info,
Map<String,Object> session,
Map<String,String> cookie,
Map<String,String> request);
}

View file

@ -10,7 +10,9 @@ import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import java.security.cert.CertificateException;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Timer;
import java.util.TimerTask;
import java.util.regex.Pattern;
@ -19,6 +21,7 @@ import javax.net.ssl.SSLServerSocketFactory;
import zutil.MultiPrintStream;
/**
* A simple web server that handles both cookies and
* sessions for all the clients
@ -38,7 +41,7 @@ public class HttpServer extends Thread{
private HashMap<String,HttpPage> pages;
private HttpPage defaultPage;
private HashMap<String,HashMap<String,Object>> sessions;
private Map<String,Map<String,Object>> sessions;
private int nextSessionId;
/**
@ -67,7 +70,7 @@ public class HttpServer extends Thread{
this.keyStore = keyStore;
pages = new HashMap<String,HttpPage>();
sessions = new HashMap<String,HashMap<String,Object>>();
sessions = Collections.synchronizedMap(new HashMap<String,Map<String,Object>>());
nextSessionId = 0;
Timer timer = new Timer();
@ -82,17 +85,17 @@ public class HttpServer extends Thread{
*/
private class GarbageCollector extends TimerTask {
public void run(){
synchronized(sessions) {
for(String key : sessions.keySet()){
HashMap<String,Object> client_session = sessions.get(key);
Object[] keys = sessions.keySet().toArray();
for(Object key : keys){
Map<String,Object> client_session = sessions.get(key);
// Check if session is still valid
if((Long)client_session.get("ttl") < System.currentTimeMillis()){
sessions.remove(key);
if(DEBUG) MultiPrintStream.out.println("Removing Session: "+key);
}
// Check if session is still valid
if((Long)client_session.get("ttl") < System.currentTimeMillis()){
sessions.remove(key);
if(DEBUG) MultiPrintStream.out.println("Removing Session: "+key);
}
}
}
}
@ -259,14 +262,14 @@ public class HttpServer extends Thread{
//**************************** HANDLE REQUEST *********************************
// Get the client session or create one
HashMap<String, Object> client_session;
Map<String, Object> client_session;
long ttl_time = System.currentTimeMillis()+SESSION_TTL;
if(cookie.containsKey("session_id") && sessions.containsKey(cookie.get("session_id"))){
client_session = sessions.get(cookie.get("session_id"));
// Check if session is still valid
if((Long)client_session.get("ttl") < System.currentTimeMillis()){
int session_id = (Integer)client_session.get("session_id");
client_session = new HashMap<String, Object>();
client_session = Collections.synchronizedMap(new HashMap<String, Object>());
client_session.put("session_id", session_id);
sessions.put(""+session_id, client_session);
}
@ -274,7 +277,7 @@ public class HttpServer extends Thread{
client_session.put("ttl", ttl_time);
}
else{
client_session = new HashMap<String, Object>();
client_session = Collections.synchronizedMap(new HashMap<String, Object>());
client_session.put("session_id", nextSessionId);
client_session.put("ttl", ttl_time);
sessions.put(""+nextSessionId, client_session);

View file

@ -10,6 +10,7 @@ import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import javax.wsdl.Binding;
import javax.wsdl.BindingInput;
@ -190,9 +191,10 @@ public class SOAPHttpPage implements HttpPage{
public void respond(HttpPrintStream out,
HashMap<String, String> client_info,
HashMap<String, Object> session, HashMap<String, String> cookie,
HashMap<String, String> request) {
Map<String, String> client_info,
Map<String, Object> session,
Map<String, String> cookie,
Map<String, String> request) {
try {
out.setHeader("Content-Type", "text/xml");

View file

@ -1,7 +1,7 @@
package zutil.test;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import zutil.network.http.HttpPage;
import zutil.network.http.HttpPrintStream;
@ -18,15 +18,16 @@ public class HTTPGuessTheNumber implements HttpPage{
}
public void respond(HttpPrintStream out,
HashMap<String, String> client_info,
HashMap<String, Object> session, HashMap<String, String> cookie,
HashMap<String, String> request) {
Map<String, String> client_info,
Map<String, Object> session,
Map<String, String> cookie,
Map<String, String> request) {
out.enableBuffering(true);
out.println("<html>");
out.println("<H2>Welcome To The Number Guess Game!</H2>");
if(session.containsKey("random_nummber") && request.containsKey("guess")){
if(session.containsKey("random_nummber") && request.containsKey("guess") && !request.get("guess").isEmpty()){
int guess = Integer.parseInt(request.get("guess"));
int nummber = (Integer)session.get("random_nummber");
try {

View file

@ -1,7 +1,7 @@
package zutil.test;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import zutil.network.http.HttpPage;
import zutil.network.http.HttpPrintStream;
@ -18,9 +18,10 @@ public class HTTPUploaderTest implements HttpPage{
}
public void respond(HttpPrintStream out,
HashMap<String, String> client_info,
HashMap<String, Object> session, HashMap<String, String> cookie,
HashMap<String, String> request) {
Map<String, String> client_info,
Map<String, Object> session,
Map<String, String> cookie,
Map<String, String> request) {
if(!session.containsKey("file1")){
out.println("</html>" +