1 //header of class--------------------------------------------------------------- 2 import java.*; 3 import java.io.*; 4 import java.net.*; 5 import java.util.*; 6 7 public class HTTPService0 extends TCPService{ 8 public final static int BUILD=110; 9 //serve.zdys-------------------------------------------------------------------- 10 public void serve(){ 11 try{ 12 BufferedReader br= new BufferedReader(new InputStreamReader(so.getInputStream())); 13 String line= br.readLine(); 14 String[] firstline= zServer.toStringArray(line, " "); 15 do{ 16 line= br.readLine(); 17 }while(!line.equals("")); 18 DataOutputStream dos= new DataOutputStream(new BufferedOutputStream(so.getOutputStream())); 19 StringBuffer sb= new StringBuffer(); 20 if(firstline[0].equalsIgnoreCase("GET")){ 21 firstline[1]= (new URLDecoder()).decode(firstline[1]); 22 if(File.pathSeparator.equals("/")){ 23 firstline[1]= firstline[1].replace('/', '\\'); 24 }else{ 25 firstline[1]= firstline[1].replace('\\', '/'); 26 } 27 File f= new File(arg[3]+ firstline[1]); 28 sb.append("HTTP/1.1 200 OK\r\n"); 29 String mime= null; 30 if(firstline[1].lastIndexOf(".")!= -1){ 31 String ending= firstline[1].substring(firstline[1].lastIndexOf(".")+ 1, firstline[1].length()).toLowerCase(); 32 mime= (String)((Hashtable)zServer.constants.get("mimetypes")).get(ending); 33 } 34 if(mime== null){ 35 mime= (String)((Hashtable)zServer.constants.get("mimetypes")).get("html"); 36 } 37 if(f.isDirectory()){ 38 sb.append("Content-Type: "); sb.append(mime); sb.append("\r\n\r\n"); 39 dos.writeBytes(sb.toString()); 40 dos.flush(); 41 sb= new StringBuffer(); 42 sb.append("<html><head><title>zServer "); 43 sb.append(firstline[1]); 44 sb.append("</title></head><body>"); 45 StringBuffer dirs= new StringBuffer(); 46 StringBuffer files= new StringBuffer(); 47 String[] list= Utils.sortStringArray(f.list()); 48 StringBuffer isactdir; 49 for(int i= 0; i< list.length; i++){ 50 isactdir= new StringBuffer(); 51 isactdir.append(arg[3]+ firstline[1]+ list[i]+ f.separator); 52 if((new File(isactdir.toString())).isDirectory()){ 53 dirs.append("<a href= \""+ firstline[1]+ list[i]+ "/\">"+ list[i]+ "</a><br>"); 54 }else{ 55 files.append("<a href= \""+ firstline[1]+ list[i]+ "\">"+ list[i]+ "</a><br>"); 56 } 57 } 58 sb.append("upward directories:<br>"); 59 StringTokenizer st= new StringTokenizer(firstline[1], "/"); 60 String temp= "/"; 61 while(st.hasMoreTokens()){ 62 sb.append("<a href= \""+ temp+ "\">"+ temp+ "</a><br>"); 63 temp+= st.nextToken()+ "/"; 64 } 65 sb.append("<br><hr>actual directory:<br><b>"+ firstline[1]+ "</b><br><br><hr>subdirectories:<br>"); 66 sb.append(dirs.toString()); 67 sb.append("<br><hr>files:<br>"); 68 sb.append(files.toString()); 69 sb.append("</body></html>"); 70 dos.writeBytes(sb.toString()); 71 }else if(f.exists()){ 72 sb.append("Content-Type: "); sb.append(mime); sb.append("\r\n\r\n"); 73 dos.writeBytes(sb.toString()); 74 dos.flush(); 75 byte[] data= new byte[1024* 64]; 76 DataInputStream dis= new DataInputStream(new FileInputStream(f)); 77 try{ 78 while(true){ 79 dis.readFully(data); 80 dos.write(data, 0, data.length); 81 dos.flush(); 82 } 83 }catch(Exception ex){ 84 dos.write(data, 0, data.length); 85 } 86 }else{ 87 sb.append("Content-Type: "); sb.append(mime); sb.append("\r\n\r\n"); 88 dos.writeBytes(sb.toString()); 89 dos.flush(); 90 sb= new StringBuffer(); 91 sb.append("<html><head><title>zServer ERROR</title></head>"+ 92 "<body>ERROR file:"+ firstline[1]+ " not found."+ "</body>"+ 93 "</html>"); 94 dos.writeBytes(sb.toString()); 95 } 96 } 97 dos.flush(); 98 so.close(); 99 }catch(Exception ex){ 100 Utils.pr(this, "ERROR in run():"+ ex); 101 } 102 } 103 //end of class------------------------------------------------------------------ 104 }